pax_global_header00006660000000000000000000000064144556065040014523gustar00rootroot0000000000000052 comment=83c22dd0b76ddbbb73594438cbfd9dd2d929ed40 rabbitvcs-0.19/000077500000000000000000000000001445560650400134335ustar00rootroot00000000000000rabbitvcs-0.19/.github/000077500000000000000000000000001445560650400147735ustar00rootroot00000000000000rabbitvcs-0.19/.github/workflows/000077500000000000000000000000001445560650400170305ustar00rootroot00000000000000rabbitvcs-0.19/.github/workflows/codeql-analysis.yml000066400000000000000000000046061445560650400226510ustar00rootroot00000000000000# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL" on: push: branches: [ master ] pull_request: # The branches below must be a subset of the branches above branches: [ master ] schedule: - cron: '44 2 * * 6' jobs: analyze: name: Analyze runs-on: ubuntu-latest permissions: actions: read contents: read security-events: write strategy: fail-fast: false matrix: language: [ 'python' ] #'cpp', # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v2 # â„šī¸ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # âœī¸ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language #- run: | # make bootstrap # make release - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 rabbitvcs-0.19/.github/workflows/main.yml000066400000000000000000000025571445560650400205100ustar00rootroot00000000000000# This is a basic workflow to help you get started with Actions name: CI # Controls when the workflow will run on: # Triggers the workflow on push or pull request events but only for the "master" branch push: branches: [ "master" ] pull_request: branches: [ "master" ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.8' # Version range or exact version of a Python version to use, using SemVer's version range syntax - name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 pytest configobj if [ -f requirements.txt ]; then pip install -r requirements.txt; fi # Runs a single command using the runners shell - run: pytest # Runs a single command using the runners shell - run: python3 setup.py build rabbitvcs-0.19/.github/workflows/pylint.yml000066400000000000000000000011221445560650400210660ustar00rootroot00000000000000name: Pylint on: [pull_request] jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.8"] # For now, only target one python "3.9", "3.10" steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install pylint - name: Analysing the code with pylint run: | pylint $(git ls-files '*.py') rabbitvcs-0.19/.gitignore000066400000000000000000000001111445560650400154140ustar00rootroot00000000000000*.pyc *~ rabbitvcs/buildinfo.py build/ dist/ rabbitvcs.egg-info/ .vscode rabbitvcs-0.19/AUTHORS000066400000000000000000000002771445560650400145110ustar00rootroot00000000000000Jason Field Bruce van der Kooij Adam Plumb Jason Heeris Patrick Monnerat rabbitvcs-0.19/COPYING000066400000000000000000000431031445560650400144670ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, 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 Lesser 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 Street, 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 Lesser General Public License instead of this License. rabbitvcs-0.19/MAINTAINERS000066400000000000000000000002461445560650400151320ustar00rootroot00000000000000Adam Plumb E-mail: adamplumb@gmail.com Userid: adamplumb Andreas E-mail: electronics45@gmail.com Daniel O'Connor E-mail: daniel.oconnor@gmail.com Userid: clockwerx rabbitvcs-0.19/README.md000066400000000000000000000061771445560650400147250ustar00rootroot00000000000000RabbitVCS ========= RabbitVCS is a set of graphical tools written to provide simple and straightforward access to the version control systems you use. We currently support Subversion and Git on a variety of clients such as Nautilus, Thunar, Nemo, Caja, PCManFM-Qt and on the command line. System Requirements ------------------- * gtk >= 3.0 * python-configobj >= 4.4.0 * python-gobject >= 2.14 For subversion: * python-svn >= 1.7.2 * subversion >= 1.4.6 For git: * dulwich >= 0.19.0 * git * tkinter (for now, newer versions of ubuntu this is called python-tk) For spell checking of commit messages (optional): * python-gtkspell (newer versions of ubuntu, this is called python-gtkspellcheck) * hunspell langpacks For syntax highlighting (optional): * python-pygments Recommends: * meld (graphical diff tool) For Debian-based distros you can run: ``` # apt-get install python3-configobj python3-gtkspellcheck python3-svn subversion python3-dulwich python3-pygments git meld python3-tk ``` For Fedora-based distros you can run: ``` # dnf install python[23]-nautilus python[23]-pysvn python[23]-configobj python[23]-dbus python[23]-dulwich python[23]-tkinter python[23]-gtkspell3 python[23]-pygments subversion git meld ``` Manual Installation ------------------- Note that you will require superuser rights in order to install RabbitVCS. Execute the following as root or using sudo: ``` # python setup.py install ``` On Ubuntu or Debian-based distros, instead run: ``` # python setup.py install --install-layout=deb ``` Once this is run, make sure you install one or more client below. Note ---- Please note that if there is a `PYTHON` environment variable it will be used as a Runtime environtment for the rabbitvcs module. For example, if `PYTHON` points to Python3, then the code in the rabbitvcs module will should be located in the Python 3 module search path. Clients ------- RabbitVCS is the core library and set of dialogs, but you interact with them through our clients. Each client needs to be purposefully installed and has its own README. Here is a list of our currently working clients: * [Nautilus](https://github.com/rabbitvcs/rabbitvcs/tree/master/clients/nautilus) * [Thunar](https://github.com/rabbitvcs/rabbitvcs/tree/master/clients/thunar) * [Nemo](https://github.com/rabbitvcs/rabbitvcs/tree/master/clients/nemo) * [Caja](https://github.com/rabbitvcs/rabbitvcs/tree/master/clients/caja) * [PCManFM-Qt](https://github.com/rabbitvcs/rabbitvcs/tree/master/clients/pcmanfm-qt) * [Command Line](https://github.com/rabbitvcs/rabbitvcs/tree/master/clients/cli) We have some others as well that are either incomplete, experimental or non-working. [Check them out!](https://github.com/rabbitvcs/rabbitvcs/tree/master/clients) Upgrade ------- To upgrade an existing version manually, copy the contents of the repository to the rabbitvcs lib folder. Most likely it is located at `/usr/lib/pymodules/python2.7/rabbitvcs`. In case of Debian-based distros this is will be `/usr/lib/python2.7/dist-packages/rabbitvcs`. For Fedora-based distros on 64-bit make sure to check `/usr/lib64`. References ---------- Homepage: http://www.rabbitvcs.org rabbitvcs-0.19/clients/000077500000000000000000000000001445560650400150745ustar00rootroot00000000000000rabbitvcs-0.19/clients/caja/000077500000000000000000000000001445560650400157725ustar00rootroot00000000000000rabbitvcs-0.19/clients/caja/README000066400000000000000000000013451445560650400166550ustar00rootroot00000000000000RabbitVCS Caja Extension This extension is meant to be used with the Caja (MATE) File Manager, Requirements: * caja * caja-python * python-dbus (> 0.80) * (all other RabbitVCS requirements) To install: To install for all users, copy RabbitVCS.py to: /usr/share/caja-python/extensions To install for a single user, copy RabbitVCS.py to: ~/.local/share/caja-python/extensions In both cases, you may need to create the caja-python/extensions folder. Restart caja with the following commands: $ caja -q $ nohup caja > /dev/null & Troubleshooting: See the known-issues section of our website: http://wiki.rabbitvcs.org/wiki/support/known-issues rabbitvcs-0.19/clients/caja/RabbitVCS.py000066400000000000000000000567741445560650400201460ustar00rootroot00000000000000# # This is an extension to the Caja file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2008 by Adam Plumb # Copyright (C) 2012-2012 by Pavel Antonov # Copyright (C) 2014 by Francis Bisson # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Our module for everything related to the Caja extension. """ from __future__ import with_statement from __future__ import absolute_import from rabbitvcs.util.contextmenuitems import * import copy from rabbitvcs.services.checkerservice import StatusCheckerStub as StatusChecker import rabbitvcs.services.service from rabbitvcs.util.settings import SettingsManager from rabbitvcs import version as EXT_VERSION from rabbitvcs import gettext, get_icon_path from rabbitvcs.util.log import Log, reload_log_settings import rabbitvcs.ui.property_page import rabbitvcs.ui from rabbitvcs.util.strings import S from rabbitvcs.util.contextmenu import ( MenuBuilder, MainContextMenu, SEPARATOR, ContextMenuConditions, ) from rabbitvcs.util.decorators import timeit, disable from rabbitvcs.util.helper import pretty_timedelta from rabbitvcs.util.helper import get_file_extension, get_common_directory from rabbitvcs.util.helper import launch_ui_window, launch_diff_tool import rabbitvcs.vcs.status from rabbitvcs.vcs import VCS import pysvn from gi.repository import Caja, GObject, Gtk, GdkPixbuf from rabbitvcs.util import helper import datetime from os.path import isdir, isfile, realpath, basename, dirname import os.path import os from six.moves import range def log_all_exceptions(type, value, tb): import sys import traceback from rabbitvcs.util.log import Log log = Log("rabbitvcs.util.extensions.Caja.RabbitVCS") log.exception_info("Error caught by master exception hook!", (type, value, tb)) text = "".join(traceback.format_exception(type, value, tb, limit=None)) try: import rabbitvcs.ui.dialog rabbitvcs.ui.dialog.ErrorNotification(text) except Exception as ex: log.exception( "Additional exception when attempting" " to display error dialog." ) log.exception(ex) raise sys.__excepthook__(type, value, tb) # import sys # sys.excepthook = log_all_exceptions sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.util.extensions.Caja.RabbitVCS") _ = gettext.gettext settings = SettingsManager() class RabbitVCS( Caja.InfoProvider, Caja.MenuProvider, Caja.ColumnProvider, Caja.PropertyPageProvider, GObject.GObject, ): """ This is the main class that implements all of our awesome features. """ #: This is our lookup table for C{NautilusVFSFile}s which we need for attaching #: emblems. This is mostly a workaround for not being able to turn a path/uri #: into a C{VFSFile}. It looks like::: #: #: VFSFile_table = { #: "/foo/bar/baz": #: #: } #: #: Keeping track of C{NautilusVFSFile}s is a little bit complicated because #: when an item is moved (renamed) C{update_file_info} doesn't get called. So #: we also add C{NautilusVFSFile}s to this table from C{get_file_items} etc. # FIXME: this may be the source of the memory hogging seen in the extension # script itself. VFSFile_table = {} #: This is in case we want to permanently enable invalidation of the status #: checker info. always_invalidate = True #: When we get the statuses from the callback, put them here for further #: use. This is of the form: [("path/to", {...status dict...}), ...] statuses_from_callback = [] def get_local_path(self, item): if item.get_uri_scheme() != "file": return None return item.get_location().get_path() def __init__(self): factory = Gtk.IconFactory() rabbitvcs_icons = [ "scalable/actions/rabbitvcs-cancel.svg", "scalable/actions/rabbitvcs-ok.svg", "scalable/actions/rabbitvcs-no.svg", "scalable/actions/rabbitvcs-yes.svg", "scalable/actions/rabbitvcs-settings.svg", "scalable/actions/rabbitvcs-export.svg", "scalable/actions/rabbitvcs-properties.svg", "scalable/actions/rabbitvcs-editprops.svg", "scalable/actions/rabbitvcs-show_log.svg", "scalable/actions/rabbitvcs-delete.svg", "scalable/actions/rabbitvcs-run.svg", "scalable/actions/rabbitvcs-unlock.svg", "scalable/actions/rabbitvcs-dbus.svg", "scalable/actions/rabbitvcs-rename.svg", "scalable/actions/rabbitvcs-help.svg", "scalable/actions/rabbitvcs-update.svg", "scalable/actions/rabbitvcs-diff.svg", "scalable/actions/rabbitvcs-resolve.svg", "scalable/actions/rabbitvcs-about.svg", "scalable/actions/rabbitvcs-add.svg", "scalable/actions/rabbitvcs-changes.svg", "scalable/actions/rabbitvcs-createpatch.svg", "scalable/actions/rabbitvcs-merge.svg", "scalable/actions/rabbitvcs-drive.svg", "scalable/actions/rabbitvcs-stop.svg", "scalable/actions/rabbitvcs-checkout.svg", "scalable/actions/rabbitvcs-import.svg", "scalable/actions/rabbitvcs-branch.svg", "scalable/actions/rabbitvcs-refresh.svg", "scalable/actions/rabbitvcs-editconflicts.svg", "scalable/actions/rabbitvcs-monkey.svg", "scalable/actions/rabbitvcs-applypatch.svg", "scalable/actions/rabbitvcs-switch.svg", "scalable/actions/rabbitvcs-lock.svg", "scalable/actions/rabbitvcs-annotate.svg", "scalable/actions/rabbitvcs-compare.svg", "scalable/actions/rabbitvcs-revert.svg", "scalable/actions/rabbitvcs-bug.svg", "scalable/actions/rabbitvcs-cleanup.svg", "scalable/actions/rabbitvcs-clear.svg", "scalable/actions/rabbitvcs-unstage.svg", "scalable/actions/rabbitvcs-emblems.svg", "scalable/actions/rabbitvcs-relocate.svg", "scalable/actions/rabbitvcs-reset.svg", "scalable/actions/rabbitvcs-asynchronous.svg", "scalable/actions/rabbitvcs-commit.svg", "scalable/actions/rabbitvcs-checkmods.svg", "scalable/apps/rabbitvcs.svg", "scalable/apps/rabbitvcs-small.svg", "16x16/actions/rabbitvcs-push.png", ] rabbitvcs_icon_path = get_icon_path() for rel_icon_path in rabbitvcs_icons: icon_path = "%s/%s" % (rabbitvcs_icon_path, rel_icon_path) file = os.path.basename(rel_icon_path) (root, ext) = os.path.splitext(file) pixbuf = GdkPixbuf.Pixbuf.new_from_file(icon_path) iconset = Gtk.IconSet.new_from_pixbuf(pixbuf) factory.add(root, iconset) factory.add_default() # Create a global client we can use to do VCS related stuff self.vcs_client = VCS() self.status_checker = StatusChecker() self.status_checker.assert_version(EXT_VERSION) self.items_cache = {} def get_columns(self): """ Return all the columns we support. """ return ( Caja.Column( name="RabbitVCS::status_column", attribute="status", label=_("RVCS Status"), description="", ), Caja.Column( name="RabbitVCS::revision_column", attribute="revision", label=_("RVCS Revision"), description="", ), Caja.Column( name="RabbitVCS::author_column", attribute="author", label=_("RVCS Author"), description="", ), Caja.Column( name="RabbitVCS::age_column", attribute="age", label=_("RVCS Age"), description="", ), ) def update_file_info(self, item): """ C{update_file_info} is called only when: - When you enter a directory (once for each item but only when the item was modified since the last time it was listed) - When you refresh (once for each item visible) - When an item viewable from the current window is created or modified This is insufficient for our purpose because: - You're not notified about items you don't see (which is needed to keep the emblem for the directories above the item up-to-date) @type item: NautilusVFSFile @param item: """ enable_emblems = bool(int(settings.get("general", "enable_emblems"))) enable_attrs = bool(int(settings.get("general", "enable_attributes"))) if not (enable_emblems or enable_attrs): return Caja.OperationResult.COMPLETE if not self.valid_uri(item.get_uri()): return Caja.OperationResult.FAILED path = self.get_local_path(item) # log.debug("update_file_info() called for %s" % path) invalidate = False if path in self.VFSFile_table: invalidate = True # Always replace the item in the table with the one we receive, because # for example if an item is deleted and recreated the NautilusVFSFile # we had before will be invalid (think pointers and such). self.VFSFile_table[path] = item # This check should be pretty obvious :-) # TODO: how come the statuses for a few directories are incorrect # when we remove this line (detected as working copies, even though # they are not)? That shouldn't happen. is_in_a_or_a_working_copy = self.vcs_client.is_in_a_or_a_working_copy(path) if not is_in_a_or_a_working_copy: return Caja.OperationResult.COMPLETE # Do our magic... # I have added extra logic in cb_status, using a list # (paths_from_callback) that should allow us to work around this for # now. But it'd be good to have an actual status monitor. found = False status = None # Could replace with (st for st in self.... if st.path ...).next() # Need to catch exception for idx in range(len(self.statuses_from_callback)): found = (self.statuses_from_callback[idx].path) == path if found: break if found: # We're here because we were triggered by a callback status = self.statuses_from_callback[idx] del self.statuses_from_callback[idx] # Don't bother the checker if we already have the info from a callback if not found: status = self.status_checker.check_status( path, recurse=True, summary=True, callback=self.cb_status, invalidate=invalidate, ) # FIXME: when did this get disabled? if enable_attrs: self.update_columns(item, path, status) if enable_emblems: self.update_status(item, path, status) return Caja.OperationResult.COMPLETE def update_columns(self, item, path, status): """ Update the columns (attributes) for a given Caja item, filling them in with information from the version control server. """ revision = "" if status.revision: revision = str(status.revision) age = "" if status.date: age = pretty_timedelta( datetime.datetime.fromtimestamp(status.date), datetime.datetime.now() ) author = "" if status.author: author = str(status.author) values = { "status": status.simple_content_status(), "revision": revision, "author": author, "age": age, } for key, value in list(values.items()): item.add_string_attribute(key, value if not value is None else "") def update_status(self, item, path, status): if status.summary in rabbitvcs.ui.STATUS_EMBLEMS: item.add_emblem(rabbitvcs.ui.STATUS_EMBLEMS[status.summary]) # ~ @disable # @timeit # FIXME: this is a bottleneck. See generate_statuses() in # MainContextMenuConditions. def get_file_items_full(self, provider, window, items): """ Menu activated with items selected. Caja also calls this function when rendering submenus, even though this is not needed since the entire menu has already been returned. Note that calling C{nautilusVFSFile.invalidate_extension_info()} will also cause get_file_items to be called. @type window: NautilusNavigationWindow @param window: @type items: list of NautilusVFSFile @param items: @rtype: list of MenuItems @return: The context menu entries to add to the menu. """ paths = [] for item in items: if self.valid_uri(item.get_uri()): path = self.get_local_path(item) paths.append(path) self.VFSFile_table[path] = item if len(paths) == 0: return [] # log.debug("get_file_items_full() called") paths_str = "-".join(paths) base_dir = dirname(paths[0]) conditions_dict = None if paths_str in self.items_cache: conditions_dict = self.items_cache[paths_str] if conditions_dict and conditions_dict != "in-progress": conditions = CajaMenuConditions(conditions_dict) menu = CajaMainContextMenu(self, base_dir, paths, conditions).get_menu() return menu if conditions_dict != "in-progress": self.status_checker.generate_menu_conditions_async( provider, base_dir, paths, self.update_file_items ) self.items_cache[path] = "in-progress" return () def get_file_items(self, window, items): paths = [] for item in items: if self.valid_uri(item.get_uri()): path = self.get_local_path(item) paths.append(path) self.VFSFile_table[path] = item if len(paths) == 0: return [] # log.debug("get_file_items() called") base_dir = dirname(paths[0]) return CajaMainContextMenu(self, base_dir, paths).get_menu() def update_file_items(self, provider, base_dir, paths, conditions_dict): paths_str = "-".join(paths) self.items_cache[paths_str] = conditions_dict Caja.MenuProvider.emit_items_updated_signal(provider) # ~ @disable # This is useful for profiling. Rename it to "get_background_items" and then # rename the real function "get_background_items_real". def get_background_items_profile(self, window, item): import cProfile path = S(gnomevfs.get_local_path_from_uri(item.get_uri())).replace("/", ":") profile_data_file = os.path.join( helper.get_home_folder(), "checkerservice_%s.stats" % path ) prof = cProfile.Profile() retval = prof.runcall(self.get_background_items_real, window, item) prof.dump_stats(profile_data_file) log.debug("Dumped: %s" % profile_data_file) return retval def get_background_items_full(self, provider, window, item): """ Menu activated on entering a directory. Builds context menu for File menu and for window background. @type window: CajaNavigationWindow @param window: @type item: CajaVFSFile @param item: @rtype: list of MenuItems @return: The context menu entries to add to the menu. """ if not self.valid_uri(item.get_uri()): return path = self.get_local_path(item) self.VFSFile_table[path] = item # log.debug("get_background_items_full() called") conditions_dict = None if path in self.items_cache: conditions_dict = self.items_cache[path] if conditions_dict and conditions_dict != "in-progress": conditions = CajaMenuConditions(conditions_dict) menu = CajaMainContextMenu(self, path, [path], conditions).get_menu() return menu if conditions_dict != "in-progress": self.status_checker.generate_menu_conditions_async( provider, path, [path], self.update_background_items ) self.items_cache[path] = "in-progress" return () def get_background_items(self, window, item): if not self.valid_uri(item.get_uri()): return path = self.get_local_path(item) self.VFSFile_table[path] = item # log.debug("get_background_items() called") return CajaMainContextMenu(self, path, [path]).get_menu() def update_background_items(self, provider, base_dir, paths, conditions_dict): paths_str = "-".join(paths) conditions = CajaMenuConditions(conditions_dict) self.items_cache[paths_str] = conditions_dict Caja.MenuProvider.emit_items_updated_signal(provider) # # Helper functions # def valid_uri(self, uri): """ Check whether or not it's a good idea to have RabbitVCS do its magic for this URI. Some examples of URI schemes: x-nautilus-desktop:/// # e.g. mounted devices on the desktop """ if not uri.startswith("file://"): return False return True # # Some methods to help with keeping emblems up-to-date # def rescan_after_process_exit(self, proc, paths): def do_check(): # We'll check the paths first (these were the paths that # were originally passed along to the context menu). # # This is needed among other things for: # # - When a directory is normal and you add files inside it # for path in paths: # We're not interested in the result now, just the callback self.status_checker.check_status( path, recurse=True, invalidate=True, callback=self.cb_status, summary=True, ) self.execute_after_process_exit(proc, do_check) def execute_after_process_exit(self, proc, func=None): def is_process_still_alive(): log.debug("is_process_still_alive() for pid: %i" % proc.pid) # First we need to see if the commit process is still running retval = proc.poll() log.debug("%s" % retval) still_going = retval is None if not still_going and callable(func): func() return still_going # Add our callback function on a 1 second timeout GObject.timeout_add_seconds(1, is_process_still_alive) # # Some other methods # def reload_settings(self, proc): """ Used to re-load settings after the settings dialog has been closed. FIXME: This probably doesn't belong here, ideally the settings manager does this itself and make sure everything is reloaded properly after the settings dialogs saves. """ def do_reload_settings(): globals()["settings"] = SettingsManager() globals()["log"] = reload_log_settings()("rabbitvcs.util.extensions.caja") log.debug("Re-scanning settings") self.execute_after_process_exit(proc, do_reload_settings) # # Callbacks # def cb_status(self, status): """ This is the callback that C{StatusMonitor} calls. @type path: string @param path: The path of the item something interesting happened to. @type statuses: list of status objects @param statuses: The statuses """ if status.path in self.VFSFile_table: item = self.VFSFile_table[status.path] # We need to invalidate the extension info for only one reason: # # - Invalidating the extension info will cause Caja to remove all # temporary emblems we applied so we don't have overlay problems # (with ourselves, we'd still have some with other extensions). # # After invalidating C{update_file_info} applies the correct emblem. # Since invalidation triggers an "update_file_info" call, we can # tell it NOT to invalidate the status checker path. self.statuses_from_callback.append(status) # NOTE! There is a call to "update_file_info" WITHIN the call to # invalidate_extension_info() - beware recursion! item.invalidate_extension_info() if status.path in self.items_cache: del self.items_cache[status.path] else: log.debug("Path [%s] not found in file table" % status.path) def get_property_pages(self, items): paths = [] for item in items: if self.valid_uri(item.get_uri()): path = self.get_local_path(item) if self.vcs_client.is_in_a_or_a_working_copy(path): paths.append(path) self.VFSFile_table[path] = item if len(paths) == 0: return [] label = rabbitvcs.ui.property_page.PropertyPageLabel( claim_domain=False ).get_widget() page = rabbitvcs.ui.property_page.PropertyPage( paths, claim_domain=False ).get_widget() ppage = Caja.PropertyPage( name="RabbitVCS::PropertyPage", label=label, page=page ) return [ppage] class CajaContextMenu(MenuBuilder): """ Provides a standard Caja context menu (ie. a list of "Caja.MenuItem"s). """ signal = "activate" def make_menu_item(self, item, id_magic): identifier = item.make_magic_id(id_magic) menuitem = Caja.MenuItem( name=identifier, label=item.make_label(), tip=item.tooltip, icon=item.icon ) if type(item) is MenuSeparator: item.make_insensitive(menuitem) return menuitem def attach_submenu(self, menu_node, submenu_list): submenu = Caja.Menu() menu_node.set_submenu(submenu) [submenu.append_item(item) for item in submenu_list] def top_level_menu(self, items): return items class CajaMenuConditions(ContextMenuConditions): def __init__(self, path_dict): self.path_dict = path_dict class CajaMainContextMenu(MainContextMenu): def get_menu(self): return CajaContextMenu(self.structure, self.conditions, self.callbacks).menu rabbitvcs-0.19/clients/cli/000077500000000000000000000000001445560650400156435ustar00rootroot00000000000000rabbitvcs-0.19/clients/cli/README000066400000000000000000000007411445560650400165250ustar00rootroot00000000000000RabbitVCS Command Line Plugin This script is meant to be used from the command line. It simply wraps around various RabbitVCS commands and opens dialogs and windows as if launched from a graphical user interface. Requirements: * (all other RabbitVCS requirements) To install: To install, copy the rabbitvcs shell script to: /usr/bin Troubleshooting: See the known-issues section of our website: http://wiki.rabbitvcs.org/wiki/support/known-issues rabbitvcs-0.19/clients/cli/rabbitvcs000077500000000000000000000041301445560650400175460ustar00rootroot00000000000000#!/usr/bin/env python3 # # This is a command line tool to allow better # integration with the Subversion source control system. # # Copyright (C) 2008-2008 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path import sys from optparse import OptionParser from rabbitvcs.util.helper import launch_ui_window from rabbitvcs.util._locale import initialize_locale from rabbitvcs import gettext _ = gettext.gettext initialize_locale() usage = _("""Usage: rabbitvcs [path1] [path2] ... Available Modules ------------------ SVN: about, add, annotate, applypatch, branch, browser, changes, checkmods, checkout, cleanup, commit, createpatch, create, delete, diff, editconflicts, export, ignore, import, lock, log, merge, properties, open, relocate, rename, markresolved, revert, settings, switch, unlock, update, updateto Git: about, add, annotate, applypatch, branches, changes, checkout, clean, clone, commit, createpatch, create, delete, diff, editconflicts, export, ignore, log, merge, open, push, rename, remotes, reset, revert, settings, tags, update For module specific help type: rabbitvcs -h """) args = sys.argv if len(args) < 2 or args[1] == "-h": raise SystemExit(usage) args.pop(0) # remove this file's path module = args.pop(0) # If a filename/path is given, try to expand it to and absolute path i = 0 for arg in args: if os.path.exists(arg): args[i] = os.path.abspath(arg) i += 1 launch_ui_window(module, args) rabbitvcs-0.19/clients/dolphin/000077500000000000000000000000001445560650400165315ustar00rootroot00000000000000rabbitvcs-0.19/clients/dolphin/README000066400000000000000000000026161445560650400174160ustar00rootroot00000000000000RabbitVCS Dolphin/KDE[45] Extension (EXPERIMENTAL!) This extension is meant to be used with the Dolphin File Manager which comes with KDE 4.x and 5.x Please note this extension only consists in menu entries and is not a Dolphin plugin. As a consequence, RabbitVCS functions are available through Dolphin contextual menus, but there is no integration with the Dophin main window interface. Requirements: * KDE 4 or 5 * (all other RabbitVCS requirements) To install with KDE 4: Copy all supplied .desktop files to: /usr/share/kde4/services/ServiceMenus/ Install the RabbitCVS CLI client into some PATH directory (i.e.: /usr/bin). Alternatively you can copy the files to the kde4-directory inside your $HOME, i.e. on Ubuntu 14.04: /home/your-username/.kde/share/kde4/services/ServiceMenus/ In the second case, you may need to create the ServiceMenus folder. Please note that the name (i.e. .kde or .kde4) depends on your OS distribution. To install with KDE 5: Copy all supplied .desktop files to: /usr/share/kservices5/ Install the RabbitCVS CLI client into some PATH directory (i.e.: /usr/bin). Alternatively you can copy the files for a private user installation to: /home/your-username/.local/share/kservices5/ Troubleshooting: See the known-issues section of our website: http://wiki.rabbitvcs.org/wiki/support/known-issues rabbitvcs-0.19/clients/dolphin/rabbitvcs_git_submenu_directory.desktop000066400000000000000000000101171445560650400265700ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=KonqPopupMenu/Plugin,inode/directory Actions=Update;Commit;Push;_SEPARATOR_;Changes;Log;_SEPARATOR_;Delete;Revert;Clean;Reset;Checkout;_SEPARATOR_;Branches;Tags;Remotes;_SEPARATOR_;Export;Merge;_SEPARATOR_;CreatePatch;ApplyPatch;_SEPARATOR_;CreateRepo;Clone;_SEPARATOR_;Settings;About; Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs.svg X-KDE-Priority=TopLevel X-KDE-Submenu=RabbitVCS Git [Desktop Action Update] Name=Update Name[de]=Aktualisieren Name[fr]=Mettre à jour Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-update.svg Exec=rabbitvcs update %U [Desktop Action Commit] Name=Commit... Name[de]=Committen â€Ļ Name[fr]=Appliquer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-commit.svg Exec=rabbitvcs commit %U [Desktop Action Push] Name=Push Name[fr]=Envoyer Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-push.svg Exec=rabbitvcs push %U # SEPARATOR [Desktop Action Changes] Name=Show Changes... Name[fr]=Voir les modifications â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-changes.svg Exec=rabbitvcs changes %U [Desktop Action Log] Name=Show log Name[de]=Historie anzeigen Name[fr]=Consulter le journal Name[pl]=Pokaz Log Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-show_log.svg Exec=rabbitvcs log %U # SEPARATOR [Desktop Action Delete] Name=Delete Name[de]=LÃļschen Name[fr]=Supprimer Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-delete.svg Exec=rabbitvcs delete %U [Desktop Action Revert] Name=Revert... Name[de]=RÃŧckgängig machen â€Ļ Name[fr]=RÊtablir â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-revert.svg Exec=rabbitvcs revert %U [Desktop Action Clean] Name=Clean Name[fr]=Nettoyer Exec=rabbitvcs clean %U [Desktop Action Reset] Name=Reset Name[fr]=Reset Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-reset.svg Exec=rabbitvcs reset %U [Desktop Action Checkout] Name=Checkout... Name[de]=Auschecken â€Ļ Name[fr]=Check-out â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-checkout.svg Exec=rabbitvcs checkout %U # SEPARATOR [Desktop Action Branches] Name=Branches Name[fr]=Branches Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-branch.svg Exec=rabbitvcs branches %U [Desktop Action Tags] Name=Tags Name[fr]=Tags Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-branch.svg Exec=rabbitvcs tags %U [Desktop Action Remotes] Name=Remotes Name[fr]=DÊpôts distants Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-checkmods.svg Exec=rabbitvcs remotes %U # SEPARATOR [Desktop Action Export] Name=Export... Name[de]=Exportieren â€Ļ Name[fr]=Exporter â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-export.svg Exec=rabbitvcs export %U [Desktop Action Merge] Name=Merge... Name[de]=ZusammenfÃŧhren â€Ļ Name[fr]=Fusionner â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-merge.svg Exec=rabbitvcs merge %U # SEPARATOR [Desktop Action CreatePatch] Name=Create patch... Name[de]=Patch erstellen â€Ļ Name[fr]=CrÊer un correctif â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-createpatch.svg Exec=rabbitvcs createpatch %U [Desktop Action ApplyPatch] Name=Apply patch... Name[de]=Patch anwenden â€Ļ Name[fr]=Appliquer un correctif â€Ļ Name[pl]=Zastosuj Patch... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-applypatch.svg Exec=rabbitvcs applypatch %U # SEPARATOR [Desktop Action CreateRepo] Name=Create repository here Name[de]=Hier ein Repository erstellen Name[fr]=CrÊer un dÊpôt ici Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-run.svg Exec=rabbitvcs create --vcs git %U [Desktop Action Clone] Name=Clone Name[fr]=Cloner Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-checkout.svg Exec=rabbitvcs clone %U # SEPARATOR [Desktop Action Settings] Name=Settings Name[de]=Einstellungen Name[fr]=Paramètres Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-settings.svg Exec=rabbitvcs settings [Desktop Action About] Name=About Name[de]=Über Name[fr]=À propos Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-about.svg Exec=rabbitvcs about rabbitvcs-0.19/clients/dolphin/rabbitvcs_git_submenu_file.desktop000066400000000000000000000105271445560650400255100ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=KonqPopupMenu/Plugin,application/octet-stream Actions=Checkout;Commit;_SEPARATOR_;Changes;Log;_SEPARATOR_;EditConflicts;Rename;Delete;Revert;Clean;Reset;_SEPARATOR_;Branches;Tags;Remotes;_SEPARATOR_;Export;Merge;_SEPARATOR_;Annotate;_SEPARATOR_;ApplyPatch;_SEPARATOR_;CreatePatch;Stage;Ignore;_SEPARATOR_;Settings;About; Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs.svg X-KDE-Priority=TopLevel X-KDE-Submenu=RabbitVCS Git [Desktop Action Checkout] Name=Checkout... Name[de]=Auschecken â€Ļ Name[fr]=Check-out â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-checkout.svg Exec=rabbitvcs checkout %U [Desktop Action Commit] Name=Commit... Name[de]=Committen â€Ļ Name[fr]=Envoyer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-commit.svg Exec=rabbitvcs commit %U # SEPARATOR [Desktop Action Changes] Name=Show Changes... Name[fr]=Voir les modifications â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-changes.svg Exec=rabbitvcs changes %U [Desktop Action Log] Name=Show log Name[de]=Historie anzeigen Name[fr]=Consulter le journal Name[pl]=Pokaz Log Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-show_log.svg Exec=rabbitvcs log %U # SEPARATOR [Desktop Action EditConflicts] Name=Edit conflicts Name[fr]=Editer les conflits â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-editconflicts.svg Exec=rabbitvcs editconflicts %U [Desktop Action Rename] Name=Rename... Name[de]=Umbenennen â€Ļ Name[fr]=Renommer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-rename.svg Exec=rabbitvcs rename %U [Desktop Action Delete] Name=Delete Name[de]=LÃļschen Name[fr]=Supprimer Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-delete.svg Exec=rabbitvcs delete %U [Desktop Action Revert] Name=Revert... Name[de]=RÃŧckgängig machen â€Ļ Name[fr]=RÊtablir â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-revert.svg Exec=rabbitvcs revert %U [Desktop Action Clean] Name=Clean Name[fr]=Nettoyer Exec=rabbitvcs clean %U [Desktop Action Reset] Name=Reset Name[fr]=Reset Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-reset.svg Exec=rabbitvcs reset %U # SEPARATOR [Desktop Action Branches] Name=Branches Name[fr]=Branches Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-branch.svg Exec=rabbitvcs branches %U [Desktop Action Tags] Name=Tags Name[fr]=Tags Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-branch.svg Exec=rabbitvcs tags %U [Desktop Action Remotes] Name=Remotes Name[fr]=DÊpôts distants Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-checkmods.svg Exec=rabbitvcs remotes %U # SEPARATOR [Desktop Action Export] Name=Export... Name[de]=Exportieren â€Ļ Name[fr]=Exporter â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-export.svg Exec=rabbitvcs export %U [Desktop Action Merge] Name=Merge... Name[de]=ZusammenfÃŧhren â€Ļ Name[fr]=Fusionner â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-merge.svg Exec=rabbitvcs merge %U # SEPARATOR [Desktop Action Annotate] Name=Annotate... Name[de]=Annotiere â€Ļ Name[fr]=Annoter â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-annotate.svg Exec=rabbitvcs annotate %U # SEPARATOR [Desktop Action ApplyPatch] Name=Apply patch... Name[de]=Patch anwenden â€Ļ Name[fr]=Appliquer un correctif â€Ļ Name[pl]=Zastosuj Patch... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-applypatch.svg Exec=rabbitvcs applypatch %U # SEPARATOR [Desktop Action CreatePatch] Name=Create patch... Name[de]=Patch erstellen â€Ļ Name[fr]=CrÊer un correctif â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-createpatch.svg Exec=rabbitvcs createpatch %U [Desktop Action Stage] Name=Add... Name[de]=Hinzufuegen â€Ļ Name[fr]=Ajouter â€Ļ Name[pl]=Dodaj... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-add.svg Exec=rabbitvcs add %U [Desktop Action Ignore] Name=Add to ignore list Name[de]=Zur Ignorierliste hinzufÃŧgen Name[fr]=Ajouter à la liste de fichiers ignorÊs Exec=rabbitvcs ignore %U # SEPARATOR [Desktop Action Settings] Name=Settings Name[de]=Einstellungen Name[fr]=Paramètres Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-settings.svg Exec=rabbitvcs settings [Desktop Action About] Name=About Name[de]=Über Name[fr]=À propos Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-about.svg Exec=rabbitvcs about rabbitvcs-0.19/clients/dolphin/rabbitvcs_svn_submenu_directory.desktop000066400000000000000000000135441445560650400266220ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=KonqPopupMenu/Plugin,inode/directory Actions=Update;Commit;Checkout;_SEPARATOR_;Log;Browser;CheckMods;_SEPARATOR_;Resolve;UpdateToRev;Rename;Delete;Revert;CleanUp;GetLock;ReleaseLock;_SEPARATOR_;BranchTag;Switch;Merge;Export;Relocate;_SEPARATOR_;CreatePatch;ApplyPatch;Properties;_SEPARATOR_;CreateRepo;Add;Import;Ignore;_SEPARATOR_;Settings;About; Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs.svg X-KDE-Priority=TopLevel X-KDE-Submenu=RabbitVCS SVN [Desktop Action Update] Name=Update Name[de]=Aktualisieren Name[fr]=Mettre à jour Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-update.svg Exec=rabbitvcs update %U [Desktop Action Commit] Name=Commit... Name[de]=Committen â€Ļ Name[fr]=Envoyer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-commit.svg Exec=rabbitvcs commit %U [Desktop Action Checkout] Name=Checkout... Name[de]=Auschecken â€Ļ Name[fr]=Check-out â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-checkout.svg Exec=rabbitvcs checkout # SEPARATOR [Desktop Action Log] Name=Show log Name[de]=Historie anzeigen Name[fr]=Consulter le journal Name[pl]=Pokaz Log Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-show_log.svg Exec=rabbitvcs log %U [Desktop Action Browser] Name=Repo-browser Name[de]=Repository-Browser Name[fr]=Navigateur de dÊpôt Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-drive.svg Exec=rabbitvcs browser %U [Desktop Action CheckMods] Name=Check for modifications Name[de]=Auf Änderungen prÃŧfen Name[fr]=VÊrifier les modifications Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-checkmods.svg Exec=rabbitvcs checkmods %U # SEPARATOR [Desktop Action Resolve] Name=Resolve... Name[de]=Konflikte lÃļsen â€Ļ Name[fr]=RÊsoudre â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-resolve.svg Exec=rabbitvcs editconflicts %U [Desktop Action UpdateToRev] Name=Update to revision... Name[de]=Auf Revision aktualisieren â€Ļ Name[fr]=Mettre à jour à la rÊvision â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-update.svg Exec=rabbitvcs updateto %U [Desktop Action Rename] Name=Rename... Name[de]=Umbenennen â€Ļ Name[fr]=Renommer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-rename.svg Exec=rabbitvcs rename %U [Desktop Action Delete] Name=Delete Name[de]=LÃļschen Name[fr]=Supprimer Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-delete.svg Exec=rabbitvcs delete %U [Desktop Action Revert] Name=Revert... Name[de]=RÃŧckgängig machen â€Ļ Name[fr]=RÊtablir â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-revert.svg Exec=rabbitvcs revert %U [Desktop Action CleanUp] Name=Clean up... Name[de]=Aufräumen â€Ļ Name[fr]=Nettoyer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-cleanup.svg Exec=rabbitvcs cleanup %U [Desktop Action GetLock] Name=Get lock... Name[de]=Sperren â€Ļ Name[fr]=Obtenir le verrou â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-lock.svg Exec=rabbitvcs lock %U [Desktop Action ReleaseLock] Name=Release lock... Name[de]=Sperrung aufheben â€Ļ Name[fr]=RelÃĸcher le verrou â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-unlock.svg Exec=rabbitvcs unlock %U # SEPARATOR [Desktop Action BranchTag] Name=Branch/tag... Name[de]=Verzweigen/markieren â€Ļ Name[fr]=Brancher/Taguer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-branch.svg Exec=rabbitvcs branch %U [Desktop Action Switch] Name=Switch... Name[de]=Wechseln â€Ļ Name[fr]=Basculer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-switch.svg Exec=rabbitvcs switch %U [Desktop Action Merge] Name=Merge... Name[de]=ZusammenfÃŧhren â€Ļ Name[fr]=Fusionner â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-merge.svg Exec=rabbitvcs merge %U [Desktop Action Export] Name=Export... Name[de]=Exportieren â€Ļ Name[fr]=Exporter â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-export.svg Exec=rabbitvcs export %U [Desktop Action Relocate] Name=Relocate... Name[de]=Verschieben â€Ļ Name[fr]=DÊplacer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-relocate.svg Exec=rabbitvcs relocate %U # SEPARATOR [Desktop Action CreatePatch] Name=Create patch... Name[de]=Patch erstellen â€Ļ Name[fr]=CrÊer un correctif â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-createpatch.svg Exec=rabbitvcs createpatch %U [Desktop Action ApplyPatch] Name=Apply patch... Name[de]=Patch anwenden â€Ļ Name[fr]=Appliquer un correctif â€Ļ Name[pl]=Zastosuj Patch... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-applypatch.svg Exec=rabbitvcs applypatch %U [Desktop Action Properties] Name=Properties Name[de]=Eigenschaften Name[fr]=PropriÊtÊs Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-properties.svg Exec=rabbitvcs properties %U # SEPARATOR [Desktop Action CreateRepo] Name=Create repository here Name[de]=Hier ein Repository erstellen Name[fr]=CrÊer un dÊpôt ici Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-run.svg Exec=rabbitvcs create --vcs svn %U [Desktop Action Add] Name=Add... Name[de]=Hinzufuegen â€Ļ Name[fr]=Ajouter â€Ļ Name[pl]=Dodaj... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-add.svg Exec=rabbitvcs add %U [Desktop Action Import] Name=Import... Name[de]=Importieren â€Ļ Name[fr]=Importer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-import.svg Exec=rabbitvcs import %U [Desktop Action Ignore] Name=Add to ignore list Name[de]=Zur Ignorierliste hinzufÃŧgen Name[fr]=Ajouter à la liste de fichiers ignorÊs Exec=rabbitvcs ignore %U # SEPARATOR [Desktop Action Settings] Name=Settings Name[de]=Einstellungen Name[fr]=Paramètres Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-settings.svg Exec=rabbitvcs settings [Desktop Action About] Name=About Name[de]=Über Name[fr]=À propos Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-about.svg Exec=rabbitvcs about rabbitvcs-0.19/clients/dolphin/rabbitvcs_svn_submenu_file.desktop000066400000000000000000000120531445560650400255270ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=KonqPopupMenu/Plugin,application/octet-stream Actions=Update;Commit;_SEPARATOR_;Changes;Log;Browser;CheckMods;_SEPARATOR_;EditConflicts;Resolve;UpdateToRev;Rename;Delete;Revert;GetLock;ReleaseLock;_SEPARATOR_;BranchTag;Switch;Merge;_SEPARATOR_;Annotate;_SEPARATOR_;CreatePatch;Properties;_SEPARATOR_;Add;Ignore;_SEPARATOR_;Settings;About; Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs.svg X-KDE-Priority=TopLevel X-KDE-Submenu=RabbitVCS SVN [Desktop Action Update] Name=Update Name[de]=Aktualisieren Name[fr]=Mettre à jour Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-update.svg Exec=rabbitvcs update %U [Desktop Action Commit] Name=Commit... Name[de]=Committen â€Ļ Name[fr]=Envoyer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-commit.svg Exec=rabbitvcs commit %U # SEPARATOR [Desktop Action Changes] Name=Show Changes... Name[fr]=Voir les modifications â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-changes.svg Exec=rabbitvcs changes %U [Desktop Action Log] Name=Show log Name[de]=Historie anzeigen Name[fr]=Consulter le journal Name[pl]=Pokaz Log Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-show_log.svg Exec=rabbitvcs log %U [Desktop Action Browser] Name=Repo-browser Name[de]=Repository-Browser Name[fr]=Navigateur de dÊpôt Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-drive.svg Exec=rabbitvcs browser %U [Desktop Action CheckMods] Name=Check for modifications Name[de]=Auf Änderungen prÃŧfen Name[fr]=VÊrifier les modifications Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-checkmods.svg Exec=rabbitvcs checkmods %U # SEPARATOR [Desktop Action EditConflicts] Name=Edit conflicts Name[fr]=Editer les conflits â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-editconflicts.svg Exec=rabbitvcs editconflicts %U [Desktop Action Resolve] Name=Resolve... Name[de]=Konflikte lÃļsen â€Ļ Name[fr]=RÊsoudre les conflits â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-resolve.svg Exec=rabbitvcs resolve %U [Desktop Action UpdateToRev] Name=Update to revision... Name[de]=Auf Revision aktualisieren â€Ļ Name[fr]=Mettre à jour à la rÊvision â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-update.svg Exec=rabbitvcs updateto %U [Desktop Action Rename] Name=Rename... Name[de]=Umbenennen â€Ļ Name[fr]=Renommer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-rename.svg Exec=rabbitvcs rename %U [Desktop Action Delete] Name=Delete Name[de]=LÃļschen Name[fr]=Supprimer Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-delete.svg Exec=rabbitvcs delete %U [Desktop Action Revert] Name=Revert... Name[de]=RÃŧckgängig machen â€Ļ Name[fr]=RÊtablir â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-revert.svg Exec=rabbitvcs revert %U [Desktop Action GetLock] Name=Get lock... Name[de]=Sperren â€Ļ Name[fr]=Obtenir le verrou â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-lock.svg Exec=rabbitvcs lock %U [Desktop Action ReleaseLock] Name=Release lock... Name[de]=Sperrung aufheben â€Ļ Name[fr]=RelÃĸcher le verrou â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-unlock.svg Exec=rabbitvcs unlock %U # SEPARATOR [Desktop Action BranchTag] Name=Branch/tag... Name[de]=Verzweigen/markieren â€Ļ Name[fr]=Brancher/Taguer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-branch.svg Exec=rabbitvcs branch %U [Desktop Action Switch] Name=Switch... Name[de]=Wechseln â€Ļ Name[fr]=Basculer â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-switch.svg Exec=rabbitvcs switch %U [Desktop Action Merge] Name=Merge... Name[de]=ZusammenfÃŧhren â€Ļ Name[fr]=Fusionner â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-merge.svg Exec=rabbitvcs merge %U # SEPARATOR [Desktop Action Annotate] Name=Annotate... Name[de]=Annotiere â€Ļ Name[fr]=Annoter â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-annotate.svg Exec=rabbitvcs annotate %U # SEPARATOR [Desktop Action CreatePatch] Name=Create patch... Name[de]=Patch erstellen â€Ļ Name[fr]=CrÊer un correctif â€Ļ Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-createpatch.svg Exec=rabbitvcs createpatch %U [Desktop Action Properties] Name=Properties Name[de]=Eigenschaften Name[fr]=PropriÊtÊs Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-properties.svg Exec=rabbitvcs properties %U # SEPARATOR [Desktop Action Add] Name=Add... Name[de]=Hinzufuegen â€Ļ Name[fr]=Ajouter â€Ļ Name[pl]=Dodaj... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-add.svg Exec=rabbitvcs add %U [Desktop Action Ignore] Name=Add to ignore list Name[de]=Zur Ignorierliste hinzufÃŧgen Name[fr]=Ajouter à la liste de fichiers ignorÊs Exec=rabbitvcs ignore %U # SEPARATOR [Desktop Action Settings] Name=Settings Name[de]=Einstellungen Name[fr]=Paramètres Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-settings.svg Exec=rabbitvcs settings [Desktop Action About] Name=About Name[de]=Über Name[fr]=À propos Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-about.svg Exec=rabbitvcs about rabbitvcs-0.19/clients/gedit/000077500000000000000000000000001445560650400161705ustar00rootroot00000000000000rabbitvcs-0.19/clients/gedit/README000066400000000000000000000017741445560650400170610ustar00rootroot00000000000000RabbitVCS Gedit Plugin This plugin is meant to be used with the Gedit Text Editor. It provides the familiar RabbitVCS Context menu in the Tools menu as well as in various context menus. Note: This is broken for recent versions of Gedit. Requirements: * gedit * (all other RabbitVCS requirements) To install for Gedit 3: To install for all users, copy rabbitvcs-plugin.py and rabbitvcs-gedit3.plugin to: /usr/lib/gedit/plugins To install for a single user, copy rabbitvcs-plugin.py and rabbitvcs-gedit3.plugin to: ~/.local/share/gedit/plugins To install for Gedit 2: To install for all users, copy rabbitvcs-plugin.py and rabbitvcs-gedit2.gedit-plugin to: /usr/lib/gedit-2/plugins To install for a single user, copy rabbitvcs-plugin.py and rabbitvcs-gedit2.gedit-plugin to: ~/.gnome2/gedit/plugins Troubleshooting: See the known-issues section of our website: http://wiki.rabbitvcs.org/wiki/support/known-issues rabbitvcs-0.19/clients/gedit/rabbitvcs-gedit2.gedit-plugin000066400000000000000000000003441445560650400236360ustar00rootroot00000000000000[Gedit Plugin] Loader=python Module=rabbitvcs-plugin IAge=2 Name=RabbitVCS Description=RabbitVCS plugin for Gedit Authors=Adam Plumb Copyright=Copyright Š 2011 Adam Plumb Website=http://www.rabbitvcs.org rabbitvcs-0.19/clients/gedit/rabbitvcs-gedit3.plugin000066400000000000000000000003361445560650400225460ustar00rootroot00000000000000[Plugin] Loader=python3 Module=rabbitvcs-plugin IAge=3 Name=RabbitVCS Description=RabbitVCS plugin for Gedit Authors=Adam Plumb Copyright=Copyright Š 2011 Adam Plumb Website=http://www.rabbitvcs.org rabbitvcs-0.19/clients/gedit/rabbitvcs-plugin.py000066400000000000000000001045651445560650400220300ustar00rootroot00000000000000from __future__ import absolute_import # # This is a Gedit plugin to allow for RabbitVCS integration in the Gedit # text editor. # # Copyright (C) 2008-2011 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from gettext import gettext as _ import os from gi.repository import Gedit, GObject from gi.repository import Gtk as gtk import rabbitvcs.util.helper from rabbitvcs.vcs import create_vcs_instance from rabbitvcs.util.contextmenu import ( GtkFilesContextMenuConditions, GtkFilesContextMenuCallbacks, MainContextMenu, MainContextMenuCallbacks, MenuBuilder, GtkContextMenuCaller, ) from rabbitvcs.util.contextmenuitems import * # Menu item example, insert a new item in the Tools menu ui_str = """ """ class RabbitVCSWindowHelper(GtkContextMenuCaller): _menu_paths = [ # "/MenuBar/RabbitVCSMenu", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Commit", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Update", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Checkout", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Diff", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Diff_Previous_Revision", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Diff_Multiple", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Compare_Tool", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Compare_Tool_Previous_Revision", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Compare_Tool_Multiple", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Show_Changes", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Show_Log", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Repo_Browser", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Check_For_Modifications", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Add", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Add_To_Ignore_List", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Add_To_Ignore_List/RabbitVCS::Ignore_By_Filename", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Add_To_Ignore_List/RabbitVCS::Ignore_By_File_Extension", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Update_To_Revision", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Rename", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Delete", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Revert", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Edit_Conflicts", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Mark_Resolved", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Get_Lock", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Unlock", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Cleanup", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Annotate", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Export", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Create_Repository", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Import", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Branch_Tag", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Switch", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Merge", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Apply_Patch", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Create_Patch", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Properties", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Update", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Commit", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Push", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Clone", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Initialize_Repository", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Diff", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Diff_Previous_Revision", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Diff_Multiple", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Compare_Tool", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Compare_Tool_Previous_Revision", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Compare_Tool_Multiple", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Show_Changes", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Show_Log", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Stage", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Unstage", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Add_To_Ignore_List", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Add_To_Ignore_List/RabbitVCS::Ignore_By_Filename", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Add_To_Ignore_List/RabbitVCS::Ignore_By_File_Extension", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Rename", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Delete", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Revert", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Edit_Conflicts", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Clean", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Reset", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Checkout", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Branches", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Tags", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Remotes", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Export", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Merge", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Annotate", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Apply_Patch", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Create_Patch", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::Settings", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::About", ] _default_base_dir = os.path.expanduser("~") def __init__(self, plugin, window): self._window = window self._plugin = plugin self.base_dir = self._default_base_dir self._menubar_menu = None self._menu_action = None self.vcs_client = create_vcs_instance() # Insert menu items self._insert_menu() def deactivate(self): # Remove any installed menu items self._remove_menu() self._window = None self.base_dir = None self._plugin = None self._menubar_menu = None self._action_group = None def _insert_menu(self): # Get the GtkUIManager manager = self._window.get_ui_manager() self._menubar_menu = GeditMenu( self, self.vcs_client, self.base_dir, [self._get_document_path()] ) self._menu_action = gtk.Action( name="RabbitVCSMenu", label="RabbitVCS", tooltip="Excellent Version Control for Linux", stock_id=None, ) self._action_group = gtk.ActionGroup("RabbitVCSActions") self._action_group = self._menubar_menu.get_action_group(self._action_group) self._action_group.add_action(self._menu_action) # Insert the action group manager.insert_action_group(self._action_group, 0) # Merge the UI self._ui_id = manager.add_ui_from_string(ui_str) def _remove_menu(self): # Get the GtkUIManager manager = self._window.get_ui_manager() # Remove the ui manager.remove_ui(self._ui_id) # Remove the action group manager.remove_action_group(self._action_group) # Make sure the manager updates manager.ensure_update() def update_ui(self): self.update_base_dir() document = self._window.get_active_document() self._action_group.set_sensitive(document != None) if document != None: manager = self._window.get_ui_manager() manager.get_widget("/MenuBar/ExtraMenu_1/RabbitVCSMenu").set_sensitive(True) self._menubar_menu.set_paths([self._get_document_path()]) self._determine_menu_sensitivity([self._get_document_path()]) def connect_view(self, view, id_name): handler_id = view.connect("populate-popup", self.on_view_populate_popup) view.set_data(id_name, [handler_id]) def disconnect_view(self, view, id_name): view.disconnect(view.get_data(id_name)[0]) def on_view_populate_popup(self, view, menu): separator = gtk.SeparatorMenuItem() menu.append(separator) separator.show() context_menu = GeditMainContextMenu( self, self.vcs_client, self.base_dir, [self._get_document_path()] ).get_menu() for context_menu_item in context_menu: menu.append(context_menu_item) def _get_document_path(self): document = self._window.get_active_document() path = self.base_dir if document: tmp_path = document.get_uri_for_display() if os.path.exists(tmp_path): path = tmp_path return path def update_base_dir(self): document = self._window.get_active_document() if document: path = document.get_uri_for_display() if os.path.exists(path): self.base_dir = os.path.dirname(path) else: self.base_dir = self._default_base_dir self._menubar_menu.set_base_dir(self.base_dir) def _determine_menu_sensitivity(self, paths): self._menubar_menu.update_conditions(paths) manager = self._window.get_ui_manager() for menu_path in self._menu_paths: # Gtk3 changes how we access a widget's action. Get it from the # UI Manager instead of the widget directly if hasattr(manager, "get_action"): action = manager.get_action(menu_path) else: widget = manager.get_widget(menu_path) action = widget.get_action() self._menubar_menu.update_action(action) # Menu activate handlers def reload_settings(self, proc): self.update_ui() def on_context_menu_command_finished(self): self.update_ui() class RabbitVCSGedit3Plugin(GObject.Object, Gedit.WindowActivatable): __gtype_name__ = "RabbitVCSGedit3Plugin" window = GObject.property(type=Gedit.Window) def __init__(self): GObject.Object.__init__(self) self._instances = {} self.id_name = "RabbitVCSContextMenuID" def do_activate(self): self._instances[self.window] = RabbitVCSWindowHelper(self, self.window) handler_ids = [] for signal in ("tab-added", "tab-removed"): method = getattr(self, "on_window_" + signal.replace("-", "_")) handler_ids.append(self.window.connect(signal, method)) self.window.set_data(self.id_name, handler_ids) if self.window in self._instances: for view in self.window.get_views(): self._instances[self.window].connect_view(view, self.id_name) def do_deactivate(self): widgets = [self.window] + self.window.get_views() for widget in widgets: handler_ids = widget.get_data(self.id_name) if handler_ids is not None: for handler_id in handler_ids: widget.disconnect(handler_id) widget.set_data(self.id_name, None) if self.window in self._instances: self._instances[self.window].deactivate() del self._instances[self.window] def do_update_state(self): self.update_ui() def update_ui(self): if self.window in self._instances: self._instances[self.window].update_ui() def on_window_tab_added(self, window, tab): if self.window in self._instances: self._instances[self.window].connect_view(tab.get_view(), self.id_name) def on_window_tab_removed(self, window, tab): if window in self._instances: self._instances[self.window].disconnect_view( tab.get_view(), self.id_name ) class MenuIgnoreByFilename(MenuItem): identifier = "RabbitVCS::Ignore_By_Filename" label = _("Ignore by File Name") tooltip = _("Ignore item by filename") class MenuIgnoreByFileExtension(MenuItem): identifier = "RabbitVCS::Ignore_By_File_Extension" label = _("Ignore by File Extension") tooltip = _("Ignore item by extension") class GeditMenuBuilder(object): """ Generalised menu builder class. Subclasses must provide: make_menu_item(self, item, id_magic) - create the menu item for whatever toolkit (usually this should be just call a convenience method on the MenuItem instance). attach_submenu(self, menu_node, submenu_list) - given a list of whatever make_menu_item(...) returns, create a submenu and attach it to the given node. top_level_menu(self, items) - in some circumstances we need to treat the top level menu differently (eg. Nautilus, because Xenu said so). This processes a list of menu items returned by make_menu_item(...) to create the overall menu. """ def __init__(self, structure, conditions, callbacks, action_group): """ @param structure: Menu structure @type structure: list Note on "structure". The menu structure is defined in a list of tuples of two elements each. The first element is a class - the MenuItem subclass that defines the menu interface (see below). The second element is either None (if there is no submenu) or a list of tuples if there is a submenu. The submenus are generated recursively. FYI, this is a list of tuples so that we retain the desired menu item order (dicts do not retain order) Example: [ (MenuClassOne, [ (MenuClassOneSubA, (MenuClassOneSubB ]), (MenuClassTwo, (MenuClassThree ] """ self.action_group = action_group for item_class in structure: item = item_class(conditions, callbacks) default_name = MenuItem.make_default_name(item.identifier) action = RabbitVCSAction( item.identifier, item.label, item.tooltip, item.icon ) if item.icon and hasattr(action, "set_icon_name"): action.set_icon_name(item.icon) if item.callback: if item.callback_args: action.connect("activate", item.callback, item.callback_args) else: action.connect("activate", item.callback) action.set_property("visible", item.show()) action.set_data("item", item) self.action_group.add_action(action) def _get_function(self, object, name): function = None if hasattr(object, name): attr = getattr(object, name) if callable(attr): function = attr return function class GeditMenu(object): def __init__(self, caller, vcs_client, base_dir, paths): """ @param caller: The calling object @type caller: RabbitVCS extension @param vcs_client: The vcs client @type vcs_client: rabbitvcs.vcs @param base_dir: The curent working directory @type base_dir: string @param paths: The selected paths @type paths: list @param conditions: The conditions class that determines menu item visibility @kind conditions: ContextMenuConditions @param callbacks: The callbacks class that determines what actions are taken @kind callbacks: ContextMenuCallbacks """ self.caller = caller self.paths = paths self.base_dir = base_dir self.vcs_client = vcs_client self.conditions = GtkFilesContextMenuConditions(self.vcs_client, self.paths) self.callbacks = GtkFilesContextMenuCallbacks( self.caller, self.base_dir, self.vcs_client, self.paths ) self.structure = [ MenuRabbitVCSSvn, MenuRabbitVCSGit, MenuCheckout, MenuUpdate, MenuCommit, MenuPush, MenuInitializeRepository, MenuClone, MenuRabbitVCS, MenuDiffMenu, MenuDiff, MenuDiffPrevRev, MenuDiffMultiple, MenuCompareTool, MenuCompareToolPrevRev, MenuCompareToolMultiple, MenuShowChanges, MenuShowLog, MenuRepoBrowser, MenuCheckForModifications, MenuAdd, MenuStage, MenuUnstage, MenuAddToIgnoreList, MenuUpdateToRevision, MenuRename, MenuDelete, MenuRevert, MenuEditConflicts, MenuMarkResolved, MenuRelocate, MenuGetLock, MenuUnlock, MenuClean, MenuReset, MenuCleanup, MenuExport, MenuCreateRepository, MenuImport, MenuBranches, MenuTags, MenuRemotes, MenuBranchTag, MenuSwitch, MenuMerge, MenuAnnotate, MenuCreatePatch, MenuApplyPatch, MenuProperties, MenuHelp, MenuSettings, MenuAbout, MenuIgnoreByFilename, MenuIgnoreByFileExtension, ] def set_paths(self, paths): self.paths = paths self.conditions.paths = paths self.callbacks.paths = paths def set_base_dir(self, base_dir): self.base_dir = base_dir self.callbacks.base_dir = base_dir self.conditions.base_dir = base_dir def get_action_group(self, action_group): return GeditMenuBuilder( self.structure, self.conditions, self.callbacks, action_group ).action_group def update_conditions(self, paths): self.conditions.generate_statuses(paths) self.conditions.generate_path_dict(paths) def update_action(self, action): action.set_property("visible", action.get_data("item").show()) class GeditContextMenu(MenuBuilder): """ Provides a standard gtk context menu (ie. a list of "gtk.MenuItem"s). """ signal = "activate" def make_menu_item(self, item, id_magic): return item.make_gtk3_menu_item(id_magic) def attach_submenu(self, menu_node, submenu_list): submenu = gtk.Menu() menu_node.set_submenu(submenu) [submenu.append(item) for item in submenu_list] def top_level_menu(self, items): return items class GeditMainContextMenu(MainContextMenu): def __init__( self, caller, vcs_client, base_dir, paths=[], conditions=None, callbacks=None ): """ @param caller: The calling object @type caller: RabbitVCS extension @param vcs_client: The vcs client @type vcs_client: rabbitvcs.vcs @param base_dir: The curent working directory @type base_dir: string @param paths: The selected paths @type paths: list @param conditions: The conditions class that determines menu item visibility @kind conditions: ContextMenuConditions @param callbacks: The callbacks class that determines what actions are taken @kind callbacks: ContextMenuCallbacks """ self.caller = caller self.paths = paths self.base_dir = base_dir self.vcs_client = vcs_client self.conditions = conditions if self.conditions is None: self.conditions = GtkFilesContextMenuConditions(self.vcs_client, paths) self.callbacks = callbacks if self.callbacks is None: self.callbacks = MainContextMenuCallbacks( self.caller, self.base_dir, self.vcs_client, paths ) ignore_items = get_ignore_list_items(paths) # The first element of each tuple is a key that matches a # ContextMenuItems item. The second element is either None when there # is no submenu, or a recursive list of tuples for desired submenus. self.structure = [ (MenuUpdate, None), (MenuCommit, None), (MenuPush, None), ( MenuRabbitVCSSvn, [ (MenuCheckout, None), ( MenuDiffMenu, [ (MenuDiff, None), (MenuDiffPrevRev, None), (MenuDiffMultiple, None), (MenuCompareTool, None), (MenuCompareToolPrevRev, None), (MenuCompareToolMultiple, None), (MenuShowChanges, None), ], ), (MenuShowLog, None), (MenuRepoBrowser, None), (MenuCheckForModifications, None), (MenuSeparator, None), (MenuAdd, None), (MenuAddToIgnoreList, ignore_items), (MenuSeparator, None), (MenuUpdateToRevision, None), (MenuRename, None), (MenuDelete, None), (MenuRevert, None), (MenuEditConflicts, None), (MenuMarkResolved, None), (MenuRelocate, None), (MenuGetLock, None), (MenuUnlock, None), (MenuCleanup, None), (MenuSeparator, None), (MenuExport, None), (MenuCreateRepository, None), (MenuImport, None), (MenuSeparator, None), (MenuBranchTag, None), (MenuSwitch, None), (MenuMerge, None), (MenuSeparator, None), (MenuAnnotate, None), (MenuSeparator, None), (MenuCreatePatch, None), (MenuApplyPatch, None), (MenuProperties, None), (MenuSeparator, None), (MenuSettings, None), (MenuAbout, None), ], ), ( MenuRabbitVCSGit, [ (MenuClone, None), (MenuInitializeRepository, None), (MenuSeparator, None), ( MenuDiffMenu, [ (MenuDiff, None), (MenuDiffPrevRev, None), (MenuDiffMultiple, None), (MenuCompareTool, None), (MenuCompareToolPrevRev, None), (MenuCompareToolMultiple, None), (MenuShowChanges, None), ], ), (MenuShowLog, None), (MenuStage, None), (MenuUnstage, None), (MenuAddToIgnoreList, ignore_items), (MenuSeparator, None), (MenuRename, None), (MenuDelete, None), (MenuRevert, None), (MenuEditConflicts, None), (MenuClean, None), (MenuReset, None), (MenuCheckout, None), (MenuSeparator, None), (MenuBranches, None), (MenuTags, None), (MenuRemotes, None), (MenuSeparator, None), (MenuExport, None), (MenuMerge, None), (MenuSeparator, None), (MenuAnnotate, None), (MenuSeparator, None), (MenuCreatePatch, None), (MenuApplyPatch, None), (MenuSeparator, None), (MenuSettings, None), (MenuAbout, None), ], ), ] def get_menu(self): return GeditContextMenu(self.structure, self.conditions, self.callbacks).menu rabbitvcs-0.19/clients/nautilus/000077500000000000000000000000001445560650400167405ustar00rootroot00000000000000rabbitvcs-0.19/clients/nautilus/README000066400000000000000000000015071445560650400176230ustar00rootroot00000000000000RabbitVCS Nautilus3 Extension This extension is meant to be used with the Nautilus File Manager v3, Requirements: * nautilus (>= v3.0) * nautilus-python (>= 1.0) * python-dbus (> 0.80) * (all other RabbitVCS requirements) To install: To install for all users, copy RabbitVCS.py to: /usr/share/nautilus-python/extensions To install for a single user, copy RabbitVCS.py to: ~/.local/share/nautilus-python/extensions In both cases, you may need to create the nautilus-python/extensions folder. Restart nautilus with the following commands: $ nautilus -q $ pgrep -f service.py | xargs kill $ nohup nautilus > /dev/null & Troubleshooting: See the known-issues section of our website: http://wiki.rabbitvcs.org/wiki/support/known-issues rabbitvcs-0.19/clients/nautilus/RabbitVCS.py000066400000000000000000000521531445560650400210770ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2008 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Our module for everything related to the Nautilus extension. """ from __future__ import with_statement from __future__ import absolute_import from rabbitvcs.util.contextmenu4 import ( MenuBuilder, MainContextMenu, SEPARATOR, ContextMenuConditions, ) import copy from rabbitvcs.services.checkerservice import StatusCheckerStub as StatusChecker import rabbitvcs.services.service from rabbitvcs.util.settings import SettingsManager from rabbitvcs import version as EXT_VERSION from rabbitvcs import gettext, get_icon_path from rabbitvcs.util.log import Log, reload_log_settings from rabbitvcs.ui.property_page4 import FileInfo import rabbitvcs.ui from rabbitvcs.util.strings import S from rabbitvcs.util.decorators import timeit, disable from rabbitvcs.util.helper import pretty_timedelta from rabbitvcs.util.helper import get_file_extension, get_common_directory from rabbitvcs.util.helper import launch_ui_window, launch_diff_tool import rabbitvcs.vcs.status from rabbitvcs.vcs import VCS import pysvn from gi.repository import Nautilus, GObject, Gtk, GdkPixbuf from rabbitvcs.util import helper import datetime from os.path import isdir, isfile, realpath, basename, dirname import os.path import os from six.moves import range from gi.repository import Gio def log_all_exceptions(type, value, tb): import sys import traceback from rabbitvcs.util.log import Log log = Log("rabbitvcs.util.extensions.Nautilus.RabbitVCS") log.exception_info("Error caught by master exception hook!", (type, value, tb)) text = "".join(traceback.format_exception(type, value, tb, limit=None)) try: import rabbitvcs.ui.dialog rabbitvcs.ui.dialog.ErrorNotification(text) except Exception as ex: log.exception( "Additional exception when attempting" " to display error dialog." ) log.exception(ex) raise sys.__excepthook__(type, value, tb) # import sys # sys.excepthook = log_all_exceptions sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.util.extensions.Nautilus.RabbitVCS") _ = gettext.gettext settings = SettingsManager() class RabbitVCS( Nautilus.InfoProvider, Nautilus.MenuProvider, Nautilus.ColumnProvider, Nautilus.PropertiesModelProvider, GObject.GObject, ): """ This is the main class that implements all of our awesome features. """ #: This is our lookup table for C{NautilusVFSFile}s which we need for attaching #: emblems. This is mostly a workaround for not being able to turn a path/uri #: into a C{VFSFile}. It looks like::: #: #: VFSFile_table = { #: "/foo/bar/baz": #: #: } #: #: Keeping track of C{NautilusVFSFile}s is a little bit complicated because #: when an item is moved (renamed) C{update_file_info} doesn't get called. So #: we also add C{NautilusVFSFile}s to this table from C{get_file_items} etc. # FIXME: this may be the source of the memory hogging seen in the extension # script itself. VFSFile_table = {} #: This is in case we want to permanently enable invalidation of the status #: checker info. always_invalidate = True #: When we get the statuses from the callback, put them here for further #: use. This is of the form: [("path/to", {...status dict...}), ...] statuses_from_callback = [] def get_local_path(self, item): if item.get_uri_scheme() != "file": return None return item.get_location().get_path() def __init__(self): # Create a global client we can use to do VCS related stuff self.vcs_client = VCS() self.status_checker = StatusChecker() self.status_checker.assert_version(EXT_VERSION) self.items_cache = {} # Keep track of the emblems that we changed, to prevent double update requests self.emblem_mod_cache = {} def get_columns(self): """ Return all the columns we support. """ return ( Nautilus.Column( name="RabbitVCS::status_column", attribute="status", label=_("RVCS Status"), description="", ), Nautilus.Column( name="RabbitVCS::revision_column", attribute="revision", label=_("RVCS Revision"), description="", ), Nautilus.Column( name="RabbitVCS::author_column", attribute="author", label=_("RVCS Author"), description="", ), Nautilus.Column( name="RabbitVCS::age_column", attribute="age", label=_("RVCS Age"), description="", ), ) def update_file_info(self, item): """ C{update_file_info} is called only when: - When you enter a directory (once for each item but only when the item was modified since the last time it was listed) - When you refresh (once for each item visible) - When an item viewable from the current window is created or modified This is insufficient for our purpose because: - You're not notified about items you don't see (which is needed to keep the emblem for the directories above the item up-to-date) @type item: NautilusVFSFile @param item: """ enable_emblems = bool(int(settings.get("general", "enable_emblems"))) enable_attrs = bool(int(settings.get("general", "enable_attributes"))) if not (enable_emblems or enable_attrs): return Nautilus.OperationResult.COMPLETE if not self.valid_uri(item.get_uri()): return Nautilus.OperationResult.FAILED path = self.get_local_path(item) # log.debug("update_file_info() called for %s" % path) invalidate = False if path in self.VFSFile_table: invalidate = True # Always replace the item in the table with the one we receive, because # for example if an item is deleted and recreated the NautilusVFSFile # we had before will be invalid (think pointers and such). self.VFSFile_table[path] = item # This check should be pretty obvious :-) # TODO: how come the statuses for a few directories are incorrect # when we remove this line (detected as working copies, even though # they are not)? That shouldn't happen. is_in_a_or_a_working_copy = self.vcs_client.is_in_a_or_a_working_copy(path) if not is_in_a_or_a_working_copy: return Nautilus.OperationResult.COMPLETE # Do our magic... # I have added extra logic in cb_status, using a list # (paths_from_callback) that should allow us to work around this for # now. But it'd be good to have an actual status monitor. found = False status = None # Could replace with (st for st in self.... if st.path ...).next() # Need to catch exception for idx in range(len(self.statuses_from_callback)): found = (self.statuses_from_callback[idx].path) == path if found: break if found: # We're here because we were triggered by a callback status = self.statuses_from_callback[idx] del self.statuses_from_callback[idx] # Don't bother the checker if we already have the info from a callback if not found: status = self.status_checker.check_status( path, recurse=True, summary=True, callback=self.cb_status, invalidate=invalidate, ) # FIXME: when did this get disabled? if enable_attrs: self.update_columns(item, path, status) if enable_emblems: self.update_status(item, path, status) return Nautilus.OperationResult.COMPLETE def update_columns(self, item, path, status): """ Update the columns (attributes) for a given Nautilus item, filling them in with information from the version control server. """ revision = "" if status.revision: revision = str(status.revision) age = "" if status.date: age = pretty_timedelta( datetime.datetime.fromtimestamp(status.date), datetime.datetime.now() ) author = "" if status.author: author = str(status.author) values = { "status": status.simple_content_status(), "revision": revision, "author": author, "age": age, } for key, value in list(values.items()): item.add_string_attribute(key, value) def update_status(self, item, path, status): if status.summary in rabbitvcs.ui.STATUS_EMBLEMS: # log.error ("Add emblem"+path) self.emblem_mod_cache[path] = True item.add_emblem(rabbitvcs.ui.STATUS_EMBLEMS[status.summary]) # ~ @disable # @timeit # FIXME: this is a bottleneck. See generate_statuses() in # MainContextMenuConditions. def get_file_items_full(self, provider, items): """ Menu activated with items selected. Nautilus also calls this function when rendering submenus, even though this is not needed since the entire menu has already been returned. Note that calling C{nautilusVFSFile.invalidate_extension_info()} will also cause get_file_items to be called. @type items: list of NautilusVFSFile @param items: @rtype: list of MenuItems @return: The context menu entries to add to the menu. """ paths = [] for item in items: if self.valid_uri(item.get_uri()): path = self.get_local_path(item) paths.append(path) self.VFSFile_table[path] = item if len(paths) == 0: return [] # log.debug("get_file_items_full() called") paths_str = "-".join(paths) base_dir = dirname(paths[0]) conditions_dict = None if paths_str in self.items_cache: conditions_dict = self.items_cache[paths_str] if conditions_dict and conditions_dict != "in-progress": conditions = NautilusMenuConditions(conditions_dict) menu = NautilusMainContextMenu( self, base_dir, paths, conditions ).get_menu() return menu if conditions_dict != "in-progress": self.status_checker.generate_menu_conditions_async( provider, base_dir, paths, self.update_file_items ) self.items_cache[path] = "in-progress" return () def update_file_items(self, provider, base_dir, paths, conditions_dict): paths_str = "-".join(paths) self.items_cache[paths_str] = conditions_dict Nautilus.MenuProvider.emit_items_updated_signal(provider) # ~ @disable # This is useful for profiling. Rename it to "get_background_items" and then # rename the real function "get_background_items_real". def get_background_items_profile(self, item): import cProfile path = S(gnomevfs.get_local_path_from_uri(item.get_uri())).replace("/", ":") profile_data_file = os.path.join( helper.get_home_folder(), "checkerservice_%s.stats" % path ) prof = cProfile.Profile() retval = prof.runcall(self.get_background_items_real, item) prof.dump_stats(profile_data_file) log.debug("Dumped: %s" % profile_data_file) return retval def get_background_items_full(self, provider, item): """ Menu activated on entering a directory. Builds context menu for File menu and for window background. @type item: NautilusVFSFile @param item: @rtype: list of MenuItems @return: The context menu entries to add to the menu. """ if not self.valid_uri(item.get_uri()): return path = self.get_local_path(item) self.VFSFile_table[path] = item # Early exit when we are already waiting for new info on a path if path in self.items_cache and self.items_cache[path] == "in-progress": log.error("Sceduled task already pending, exit early, in progress") return () # Schedule menu conditions computation for directory contents. for file in os.listdir(path): subpath = os.path.join(path, file) if not subpath in self.items_cache: self.items_cache[subpath] = "in-progress" self.status_checker.generate_menu_conditions_async( provider, path, [subpath], self.update_background_items ) conditions_dict = None if path in self.items_cache: conditions_dict = self.items_cache[path] if conditions_dict and conditions_dict != "in-progress": conditions = NautilusMenuConditions(conditions_dict) menu = NautilusMainContextMenu( self, path, [path], conditions ).get_menu() return menu if conditions_dict != "in-progress": self.status_checker.generate_menu_conditions_async( provider, path, [path], self.update_background_items ) self.items_cache[path] = "in-progress" return () def update_background_items(self, provider, base_dir, paths, conditions_dict): paths_str = "-".join(paths) conditions = NautilusMenuConditions(conditions_dict) self.items_cache[paths_str] = conditions_dict Nautilus.MenuProvider.emit_items_updated_signal(provider) # # Helper functions # def valid_uri(self, uri): """ Check whether or not it's a good idea to have RabbitVCS do its magic for this URI. Some examples of URI schemes: x-nautilus-desktop:/// # e.g. mounted devices on the desktop """ if not uri.startswith("file://"): return False return True # # Some methods to help with keeping emblems up-to-date # def rescan_after_process_exit(self, proc, paths): def do_check(): # We'll check the paths first (these were the paths that # were originally passed along to the context menu). # # This is needed among other things for: # # - When a directory is normal and you add files inside it # for path in paths: # We're not interested in the result now, just the callback self.status_checker.check_status( path, recurse=True, invalidate=True, callback=self.cb_status, summary=True, ) self.execute_after_process_exit(proc, do_check) def execute_after_process_exit(self, proc, func=None): def is_process_still_alive(): log.debug("is_process_still_alive() for pid: %i" % proc.pid) # First we need to see if the commit process is still running retval = proc.poll() log.debug("%s" % retval) still_going = retval is None if not still_going and callable(func): func() return still_going # Add our callback function on a 1 second timeout GObject.timeout_add_seconds(1, is_process_still_alive) # # Some other methods # def reload_settings(self, proc): """ Used to re-load settings after the settings dialog has been closed. FIXME: This probably doesn't belong here, ideally the settings manager does this itself and make sure everything is reloaded properly after the settings dialogs saves. """ def do_reload_settings(): globals()["settings"] = SettingsManager() globals()["log"] = reload_log_settings()( "rabbitvcs.util.extensions.nautilus" ) log.debug("Re-scanning settings") self.execute_after_process_exit(proc, do_reload_settings) # # Callbacks # def cb_status(self, status): """ This is the callback that C{StatusMonitor} calls. @type path: string @param path: The path of the item something interesting happened to. @type statuses: list of status objects @param statuses: The statuses """ if status.path in self.VFSFile_table: item = self.VFSFile_table[status.path] # We need to invalidate the extension info for only one reason: # # - Invalidating the extension info will cause Nautilus to remove all # temporary emblems we applied so we don't have overlay problems # (with ourselves, we'd still have some with other extensions). # # After invalidating C{update_file_info} applies the correct emblem. # Since invalidation triggers an "update_file_info" call, we can # tell it NOT to invalidate the status checker path. self.statuses_from_callback.append(status) # NOTE! There is a call to "update_file_info" WITHIN the call to # invalidate_extension_info() - beware recursion! item.invalidate_extension_info() if status.path in self.items_cache: # Prevent invalidating the item_cache because the emblem changed # If we don't do this, all version control items in a directory are double scanned if status.path in self.emblem_mod_cache: del self.emblem_mod_cache[status.path] else: # log.error ("Remove path from cache: "+status.path) del self.items_cache[status.path] else: log.debug("Path [%s] not found in file table" % status.path) def get_models(self, items): paths = [] for item in items: if self.valid_uri(item.get_uri()): path = self.get_local_path(item) if self.vcs_client.is_in_a_or_a_working_copy(path): paths.append(path) self.VFSFile_table[path] = item if len(paths) == 0: return [] file_info = FileInfo(paths[0]) section_model = Gio.ListStore.new(item_type=Nautilus.PropertiesItem) repo_url, repo_path = file_info.get_additional_info() section_model.append( Nautilus.PropertiesItem( name="Repo", value=repo_path, ) ) section_model.append( Nautilus.PropertiesItem( name="Upstream", value=repo_url, ) ) path_list = "" for p in paths: path_list += f"{p} [{S(file_info.get_status(p).simple_content_status()).display()}]\n" path_list = path_list.strip() section_model.append( Nautilus.PropertiesItem( name="File(s)", value=path_list, ) ) return [ Nautilus.PropertiesModel( title="RabbitVCS", model=section_model, ), ] class NautilusContextMenu(MenuBuilder): """ Provides a standard Nautilus context menu (ie. a list of "Nautilus.MenuItem"s). """ signal = "activate" def make_menu_item(self, item, id_magic): return item.make_nautilus_menu_item(id_magic) def attach_submenu(self, menu_node, submenu_list): submenu = Nautilus.Menu() menu_node.set_submenu(submenu) [submenu.append_item(item) for item in submenu_list] def top_level_menu(self, items): return items class NautilusMenuConditions(ContextMenuConditions): def __init__(self, path_dict): self.path_dict = path_dict class NautilusMainContextMenu(MainContextMenu): def get_menu(self): return NautilusContextMenu(self.structure, self.conditions, self.callbacks).menu rabbitvcs-0.19/clients/nautilus/RabbitVCS3.py000066400000000000000000000574501445560650400211670ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2008 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Our module for everything related to the Nautilus extension. """ from __future__ import with_statement from __future__ import absolute_import from rabbitvcs.util.contextmenuitems import * import copy from rabbitvcs.services.checkerservice import StatusCheckerStub as StatusChecker import rabbitvcs.services.service from rabbitvcs.util.settings import SettingsManager from rabbitvcs import version as EXT_VERSION from rabbitvcs import gettext, get_icon_path from rabbitvcs.util.log import Log, reload_log_settings import rabbitvcs.ui.property_page import rabbitvcs.ui from rabbitvcs.util.strings import S from rabbitvcs.util.contextmenu import ( MenuBuilder, MainContextMenu, SEPARATOR, ContextMenuConditions, ) from rabbitvcs.util.decorators import timeit, disable from rabbitvcs.util.helper import pretty_timedelta from rabbitvcs.util.helper import get_file_extension, get_common_directory from rabbitvcs.util.helper import launch_ui_window, launch_diff_tool import rabbitvcs.vcs.status from rabbitvcs.vcs import VCS import pysvn from gi.repository import Nautilus, GObject, Gtk, GdkPixbuf from rabbitvcs.util import helper import datetime from os.path import isdir, isfile, realpath, basename, dirname import os.path import os from six.moves import range def log_all_exceptions(type, value, tb): import sys import traceback from rabbitvcs.util.log import Log log = Log("rabbitvcs.util.extensions.Nautilus.RabbitVCS") log.exception_info("Error caught by master exception hook!", (type, value, tb)) text = "".join(traceback.format_exception(type, value, tb, limit=None)) try: import rabbitvcs.ui.dialog rabbitvcs.ui.dialog.ErrorNotification(text) except Exception as ex: log.exception( "Additional exception when attempting" " to display error dialog." ) log.exception(ex) raise sys.__excepthook__(type, value, tb) # import sys # sys.excepthook = log_all_exceptions sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.util.extensions.Nautilus.RabbitVCS") _ = gettext.gettext settings = SettingsManager() class RabbitVCS( Nautilus.InfoProvider, Nautilus.MenuProvider, Nautilus.ColumnProvider, Nautilus.PropertyPageProvider, GObject.GObject, ): """ This is the main class that implements all of our awesome features. """ #: This is our lookup table for C{NautilusVFSFile}s which we need for attaching #: emblems. This is mostly a workaround for not being able to turn a path/uri #: into a C{VFSFile}. It looks like::: #: #: VFSFile_table = { #: "/foo/bar/baz": #: #: } #: #: Keeping track of C{NautilusVFSFile}s is a little bit complicated because #: when an item is moved (renamed) C{update_file_info} doesn't get called. So #: we also add C{NautilusVFSFile}s to this table from C{get_file_items} etc. # FIXME: this may be the source of the memory hogging seen in the extension # script itself. VFSFile_table = {} #: This is in case we want to permanently enable invalidation of the status #: checker info. always_invalidate = True #: When we get the statuses from the callback, put them here for further #: use. This is of the form: [("path/to", {...status dict...}), ...] statuses_from_callback = [] def get_local_path(self, item): if item.get_uri_scheme() != "file": return None return item.get_location().get_path() def __init__(self): factory = Gtk.IconFactory() rabbitvcs_icons = [ "scalable/actions/rabbitvcs-cancel.svg", "scalable/actions/rabbitvcs-ok.svg", "scalable/actions/rabbitvcs-no.svg", "scalable/actions/rabbitvcs-yes.svg", "scalable/actions/rabbitvcs-settings.svg", "scalable/actions/rabbitvcs-export.svg", "scalable/actions/rabbitvcs-properties.svg", "scalable/actions/rabbitvcs-editprops.svg", "scalable/actions/rabbitvcs-show_log.svg", "scalable/actions/rabbitvcs-delete.svg", "scalable/actions/rabbitvcs-run.svg", "scalable/actions/rabbitvcs-unlock.svg", "scalable/actions/rabbitvcs-dbus.svg", "scalable/actions/rabbitvcs-rename.svg", "scalable/actions/rabbitvcs-help.svg", "scalable/actions/rabbitvcs-update.svg", "scalable/actions/rabbitvcs-diff.svg", "scalable/actions/rabbitvcs-resolve.svg", "scalable/actions/rabbitvcs-about.svg", "scalable/actions/rabbitvcs-add.svg", "scalable/actions/rabbitvcs-changes.svg", "scalable/actions/rabbitvcs-createpatch.svg", "scalable/actions/rabbitvcs-merge.svg", "scalable/actions/rabbitvcs-drive.svg", "scalable/actions/rabbitvcs-stop.svg", "scalable/actions/rabbitvcs-checkout.svg", "scalable/actions/rabbitvcs-import.svg", "scalable/actions/rabbitvcs-branch.svg", "scalable/actions/rabbitvcs-refresh.svg", "scalable/actions/rabbitvcs-editconflicts.svg", "scalable/actions/rabbitvcs-monkey.svg", "scalable/actions/rabbitvcs-applypatch.svg", "scalable/actions/rabbitvcs-switch.svg", "scalable/actions/rabbitvcs-lock.svg", "scalable/actions/rabbitvcs-annotate.svg", "scalable/actions/rabbitvcs-compare.svg", "scalable/actions/rabbitvcs-revert.svg", "scalable/actions/rabbitvcs-bug.svg", "scalable/actions/rabbitvcs-cleanup.svg", "scalable/actions/rabbitvcs-clear.svg", "scalable/actions/rabbitvcs-unstage.svg", "scalable/actions/rabbitvcs-emblems.svg", "scalable/actions/rabbitvcs-relocate.svg", "scalable/actions/rabbitvcs-reset.svg", "scalable/actions/rabbitvcs-asynchronous.svg", "scalable/actions/rabbitvcs-commit.svg", "scalable/actions/rabbitvcs-checkmods.svg", "scalable/apps/rabbitvcs.svg", "scalable/apps/rabbitvcs-small.svg", "16x16/actions/rabbitvcs-push.png", ] rabbitvcs_icon_path = get_icon_path() for rel_icon_path in rabbitvcs_icons: icon_path = "%s/%s" % (rabbitvcs_icon_path, rel_icon_path) file = os.path.basename(rel_icon_path) (root, ext) = os.path.splitext(file) pixbuf = GdkPixbuf.Pixbuf.new_from_file(icon_path) iconset = Gtk.IconSet.new_from_pixbuf(pixbuf) factory.add(root, iconset) factory.add_default() # Create a global client we can use to do VCS related stuff self.vcs_client = VCS() self.status_checker = StatusChecker() self.status_checker.assert_version(EXT_VERSION) self.items_cache = {} # Keep track of the emblems that we changed, to prevent double update requests self.emblem_mod_cache = {} def get_columns(self): """ Return all the columns we support. """ return ( Nautilus.Column( name="RabbitVCS::status_column", attribute="status", label=_("RVCS Status"), description="", ), Nautilus.Column( name="RabbitVCS::revision_column", attribute="revision", label=_("RVCS Revision"), description="", ), Nautilus.Column( name="RabbitVCS::author_column", attribute="author", label=_("RVCS Author"), description="", ), Nautilus.Column( name="RabbitVCS::age_column", attribute="age", label=_("RVCS Age"), description="", ), ) def update_file_info(self, item): """ C{update_file_info} is called only when: - When you enter a directory (once for each item but only when the item was modified since the last time it was listed) - When you refresh (once for each item visible) - When an item viewable from the current window is created or modified This is insufficient for our purpose because: - You're not notified about items you don't see (which is needed to keep the emblem for the directories above the item up-to-date) @type item: NautilusVFSFile @param item: """ enable_emblems = bool(int(settings.get("general", "enable_emblems"))) enable_attrs = bool(int(settings.get("general", "enable_attributes"))) if not (enable_emblems or enable_attrs): return Nautilus.OperationResult.COMPLETE if not self.valid_uri(item.get_uri()): return Nautilus.OperationResult.FAILED path = self.get_local_path(item) # log.debug("update_file_info() called for %s" % path) invalidate = False if path in self.VFSFile_table: invalidate = True # Always replace the item in the table with the one we receive, because # for example if an item is deleted and recreated the NautilusVFSFile # we had before will be invalid (think pointers and such). self.VFSFile_table[path] = item # This check should be pretty obvious :-) # TODO: how come the statuses for a few directories are incorrect # when we remove this line (detected as working copies, even though # they are not)? That shouldn't happen. is_in_a_or_a_working_copy = self.vcs_client.is_in_a_or_a_working_copy(path) if not is_in_a_or_a_working_copy: return Nautilus.OperationResult.COMPLETE # Do our magic... # I have added extra logic in cb_status, using a list # (paths_from_callback) that should allow us to work around this for # now. But it'd be good to have an actual status monitor. found = False status = None # Could replace with (st for st in self.... if st.path ...).next() # Need to catch exception for idx in range(len(self.statuses_from_callback)): found = (self.statuses_from_callback[idx].path) == path if found: break if found: # We're here because we were triggered by a callback status = self.statuses_from_callback[idx] del self.statuses_from_callback[idx] # Don't bother the checker if we already have the info from a callback if not found: status = self.status_checker.check_status( path, recurse=True, summary=True, callback=self.cb_status, invalidate=invalidate, ) # FIXME: when did this get disabled? if enable_attrs: self.update_columns(item, path, status) if enable_emblems: self.update_status(item, path, status) return Nautilus.OperationResult.COMPLETE def update_columns(self, item, path, status): """ Update the columns (attributes) for a given Nautilus item, filling them in with information from the version control server. """ revision = "" if status.revision: revision = str(status.revision) age = "" if status.date: age = pretty_timedelta( datetime.datetime.fromtimestamp(status.date), datetime.datetime.now() ) author = "" if status.author: author = str(status.author) values = { "status": status.simple_content_status(), "revision": revision, "author": author, "age": age, } for key, value in list(values.items()): item.add_string_attribute(key, value) def update_status(self, item, path, status): if status.summary in rabbitvcs.ui.STATUS_EMBLEMS: # log.error ("Add emblem"+path) self.emblem_mod_cache[path] = True item.add_emblem(rabbitvcs.ui.STATUS_EMBLEMS[status.summary]) # ~ @disable # @timeit # FIXME: this is a bottleneck. See generate_statuses() in # MainContextMenuConditions. def get_file_items_full(self, provider, window, items): """ Menu activated with items selected. Nautilus also calls this function when rendering submenus, even though this is not needed since the entire menu has already been returned. Note that calling C{nautilusVFSFile.invalidate_extension_info()} will also cause get_file_items to be called. @type window: NautilusNavigationWindow @param window: @type items: list of NautilusVFSFile @param items: @rtype: list of MenuItems @return: The context menu entries to add to the menu. """ paths = [] for item in items: if self.valid_uri(item.get_uri()): path = self.get_local_path(item) paths.append(path) self.VFSFile_table[path] = item if len(paths) == 0: return [] # log.debug("get_file_items_full() called") paths_str = "-".join(paths) base_dir = dirname(paths[0]) conditions_dict = None if paths_str in self.items_cache: conditions_dict = self.items_cache[paths_str] if conditions_dict and conditions_dict != "in-progress": conditions = NautilusMenuConditions(conditions_dict) menu = NautilusMainContextMenu( self, base_dir, paths, conditions ).get_menu() return menu if conditions_dict != "in-progress": self.status_checker.generate_menu_conditions_async( provider, base_dir, paths, self.update_file_items ) self.items_cache[path] = "in-progress" return () def update_file_items(self, provider, base_dir, paths, conditions_dict): paths_str = "-".join(paths) self.items_cache[paths_str] = conditions_dict Nautilus.MenuProvider.emit_items_updated_signal(provider) # ~ @disable # This is useful for profiling. Rename it to "get_background_items" and then # rename the real function "get_background_items_real". def get_background_items_profile(self, window, item): import cProfile path = S(gnomevfs.get_local_path_from_uri(item.get_uri())).replace("/", ":") profile_data_file = os.path.join( helper.get_home_folder(), "checkerservice_%s.stats" % path ) prof = cProfile.Profile() retval = prof.runcall(self.get_background_items_real, window, item) prof.dump_stats(profile_data_file) log.debug("Dumped: %s" % profile_data_file) return retval def get_background_items_full(self, provider, window, item): """ Menu activated on entering a directory. Builds context menu for File menu and for window background. @type window: NautilusNavigationWindow @param window: @type item: NautilusVFSFile @param item: @rtype: list of MenuItems @return: The context menu entries to add to the menu. """ if not self.valid_uri(item.get_uri()): return path = self.get_local_path(item) self.VFSFile_table[path] = item # Early exit when we are already waiting for new info on a path if path in self.items_cache and self.items_cache[path] == "in-progress": log.error("Sceduled task already pending, exit early, in progress") return () # Schedule menu conditions computation for directory contents. for file in os.listdir(path): subpath = os.path.join(path, file) if not subpath in self.items_cache: self.items_cache[subpath] = "in-progress" self.status_checker.generate_menu_conditions_async( provider, path, [subpath], self.update_background_items ) conditions_dict = None if path in self.items_cache: conditions_dict = self.items_cache[path] if conditions_dict and conditions_dict != "in-progress": conditions = NautilusMenuConditions(conditions_dict) menu = NautilusMainContextMenu( self, path, [path], conditions ).get_menu() return menu if conditions_dict != "in-progress": self.status_checker.generate_menu_conditions_async( provider, path, [path], self.update_background_items ) self.items_cache[path] = "in-progress" return () def update_background_items(self, provider, base_dir, paths, conditions_dict): paths_str = "-".join(paths) conditions = NautilusMenuConditions(conditions_dict) self.items_cache[paths_str] = conditions_dict Nautilus.MenuProvider.emit_items_updated_signal(provider) # # Helper functions # def valid_uri(self, uri): """ Check whether or not it's a good idea to have RabbitVCS do its magic for this URI. Some examples of URI schemes: x-nautilus-desktop:/// # e.g. mounted devices on the desktop """ if not uri.startswith("file://"): return False return True # # Some methods to help with keeping emblems up-to-date # def rescan_after_process_exit(self, proc, paths): def do_check(): # We'll check the paths first (these were the paths that # were originally passed along to the context menu). # # This is needed among other things for: # # - When a directory is normal and you add files inside it # for path in paths: # We're not interested in the result now, just the callback self.status_checker.check_status( path, recurse=True, invalidate=True, callback=self.cb_status, summary=True, ) self.execute_after_process_exit(proc, do_check) def execute_after_process_exit(self, proc, func=None): def is_process_still_alive(): log.debug("is_process_still_alive() for pid: %i" % proc.pid) # First we need to see if the commit process is still running retval = proc.poll() log.debug("%s" % retval) still_going = retval is None if not still_going and callable(func): func() return still_going # Add our callback function on a 1 second timeout GObject.timeout_add_seconds(1, is_process_still_alive) # # Some other methods # def reload_settings(self, proc): """ Used to re-load settings after the settings dialog has been closed. FIXME: This probably doesn't belong here, ideally the settings manager does this itself and make sure everything is reloaded properly after the settings dialogs saves. """ def do_reload_settings(): globals()["settings"] = SettingsManager() globals()["log"] = reload_log_settings()( "rabbitvcs.util.extensions.nautilus" ) log.debug("Re-scanning settings") self.execute_after_process_exit(proc, do_reload_settings) # # Callbacks # def cb_status(self, status): """ This is the callback that C{StatusMonitor} calls. @type path: string @param path: The path of the item something interesting happened to. @type statuses: list of status objects @param statuses: The statuses """ if status.path in self.VFSFile_table: item = self.VFSFile_table[status.path] # We need to invalidate the extension info for only one reason: # # - Invalidating the extension info will cause Nautilus to remove all # temporary emblems we applied so we don't have overlay problems # (with ourselves, we'd still have some with other extensions). # # After invalidating C{update_file_info} applies the correct emblem. # Since invalidation triggers an "update_file_info" call, we can # tell it NOT to invalidate the status checker path. self.statuses_from_callback.append(status) # NOTE! There is a call to "update_file_info" WITHIN the call to # invalidate_extension_info() - beware recursion! item.invalidate_extension_info() if status.path in self.items_cache: # Prevent invalidating the item_cache because the emblem changed # If we don't do this, all version control items in a directory are double scanned if status.path in self.emblem_mod_cache: del self.emblem_mod_cache[status.path] else: # log.error ("Remove path from cache: "+status.path) del self.items_cache[status.path] else: log.debug("Path [%s] not found in file table" % status.path) def get_property_pages(self, items): paths = [] for item in items: if self.valid_uri(item.get_uri()): path = self.get_local_path(item) if self.vcs_client.is_in_a_or_a_working_copy(path): paths.append(path) self.VFSFile_table[path] = item if len(paths) == 0: return [] label = rabbitvcs.ui.property_page.PropertyPageLabel( claim_domain=False ).get_widget() page = rabbitvcs.ui.property_page.PropertyPage( paths, claim_domain=False ).get_widget() ppage = Nautilus.PropertyPage( name="RabbitVCS::PropertyPage", label=label, page=page ) return [ppage] class NautilusContextMenu(MenuBuilder): """ Provides a standard Nautilus context menu (ie. a list of "Nautilus.MenuItem"s). """ signal = "activate" def make_menu_item(self, item, id_magic): return item.make_nautilus_menu_item(id_magic) def attach_submenu(self, menu_node, submenu_list): submenu = Nautilus.Menu() menu_node.set_submenu(submenu) [submenu.append_item(item) for item in submenu_list] def top_level_menu(self, items): return items class NautilusMenuConditions(ContextMenuConditions): def __init__(self, path_dict): self.path_dict = path_dict class NautilusMainContextMenu(MainContextMenu): def get_menu(self): return NautilusContextMenu(self.structure, self.conditions, self.callbacks).menu rabbitvcs-0.19/clients/nemo/000077500000000000000000000000001445560650400160325ustar00rootroot00000000000000rabbitvcs-0.19/clients/nemo/README000066400000000000000000000014401445560650400167110ustar00rootroot00000000000000RabbitVCS Nemo Extension This extension is meant to be used with the Nemo File Manager (fork of Nautilus v3) Requirements: * nemo * nemo-python * python-dbus (> 0.80) * (all other RabbitVCS requirements) To install: To install for all users, copy RabbitVCS.py to: /usr/share/nemo-python/extensions To install for a single user, copy RabbitVCS.py to: ~/.local/share/nemo-python-extensions In both cases, you may need to create the python/python-extensions folder. Restart nemo with the following commands: $ nemo -q $ pgrep -f service.py | xargs kill $ nohup nemo > /dev/null & Troubleshooting: See the known-issues section of our website: http://wiki.rabbitvcs.org/wiki/support/known-issues rabbitvcs-0.19/clients/nemo/RabbitVCS.py000066400000000000000000000572721445560650400202000ustar00rootroot00000000000000# # This is an extension to the Nemo file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2008 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Our module for everything related to the Nemo extension. """ from __future__ import with_statement from __future__ import absolute_import from rabbitvcs.util.contextmenuitems import * import copy from rabbitvcs.services.checkerservice import StatusCheckerStub as StatusChecker import rabbitvcs.services.service from rabbitvcs.util.settings import SettingsManager from rabbitvcs import version as EXT_VERSION from rabbitvcs import gettext, get_icon_path from rabbitvcs.util.log import Log, reload_log_settings import rabbitvcs.ui.property_page import rabbitvcs.ui from rabbitvcs.util.contextmenu import ( MenuBuilder, MainContextMenu, SEPARATOR, ContextMenuConditions, ) from rabbitvcs.util.decorators import timeit, disable from rabbitvcs.util.strings import S from rabbitvcs.util.helper import pretty_timedelta from rabbitvcs.util.helper import get_home_folder from rabbitvcs.util.helper import get_file_extension, get_common_directory from rabbitvcs.util.helper import launch_ui_window, launch_diff_tool import rabbitvcs.vcs.status from rabbitvcs.vcs import VCS import pysvn from gi.repository import Nemo, GObject, Gtk, GdkPixbuf import gi from rabbitvcs.util import helper import datetime from os.path import isdir, isfile, realpath, basename import os.path import os from six.moves import range import signal signal.signal(signal.SIGINT, signal.SIG_DFL) def log_all_exceptions(type, value, tb): import sys import traceback from rabbitvcs.util.log import Log log = Log("rabbitvcs.util.extensions.Nemo.RabbitVCS") log.exception_info("Error caught by master exception hook!", (type, value, tb)) text = "".join(traceback.format_exception(type, value, tb, limit=None)) try: import rabbitvcs.ui.dialog rabbitvcs.ui.dialog.ErrorNotification(text) except Exception as ex: log.exception( "Additional exception when attempting" " to display error dialog." ) log.exception(ex) raise sys.__excepthook__(type, value, tb) # import sys # sys.excepthook = log_all_exceptions gi.require_version("Nemo", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.util.extensions.Nemo.RabbitVCS") _ = gettext.gettext settings = SettingsManager() class RabbitVCS( Nemo.InfoProvider, Nemo.MenuProvider, Nemo.ColumnProvider, Nemo.PropertyPageProvider, Nemo.NameAndDescProvider, GObject.GObject, ): """ This is the main class that implements all of our awesome features. """ #: This is our lookup table for C{NemoVFSFile}s which we need for attaching #: emblems. This is mostly a workaround for not being able to turn a path/uri #: into a C{VFSFile}. It looks like::: #: #: VFSFile_table = { #: "/foo/bar/baz": #: #: } #: #: Keeping track of C{NemoVFSFile}s is a little bit complicated because #: when an item is moved (renamed) C{update_file_info} doesn't get called. So #: we also add C{NemoVFSFile}s to this table from C{get_file_items} etc. # FIXME: this may be the source of the memory hogging seen in the extension # script itself. VFSFile_table = {} #: This is in case we want to permanently enable invalidation of the status #: checker info. always_invalidate = True #: When we get the statuses from the callback, put them here for further #: use. This is of the form: [("path/to", {...status dict...}), ...] statuses_from_callback = [] def get_local_path(self, item): if item.get_uri_scheme() != "file": return None return item.get_location().get_path() def __init__(self): factory = Gtk.IconFactory() rabbitvcs_icons = [ "scalable/actions/rabbitvcs-cancel.svg", "scalable/actions/rabbitvcs-ok.svg", "scalable/actions/rabbitvcs-no.svg", "scalable/actions/rabbitvcs-yes.svg", "scalable/actions/rabbitvcs-settings.svg", "scalable/actions/rabbitvcs-export.svg", "scalable/actions/rabbitvcs-properties.svg", "scalable/actions/rabbitvcs-editprops.svg", "scalable/actions/rabbitvcs-show_log.svg", "scalable/actions/rabbitvcs-delete.svg", "scalable/actions/rabbitvcs-run.svg", "scalable/actions/rabbitvcs-unlock.svg", "scalable/actions/rabbitvcs-dbus.svg", "scalable/actions/rabbitvcs-rename.svg", "scalable/actions/rabbitvcs-help.svg", "scalable/actions/rabbitvcs-update.svg", "scalable/actions/rabbitvcs-diff.svg", "scalable/actions/rabbitvcs-resolve.svg", "scalable/actions/rabbitvcs-about.svg", "scalable/actions/rabbitvcs-add.svg", "scalable/actions/rabbitvcs-changes.svg", "scalable/actions/rabbitvcs-createpatch.svg", "scalable/actions/rabbitvcs-merge.svg", "scalable/actions/rabbitvcs-drive.svg", "scalable/actions/rabbitvcs-stop.svg", "scalable/actions/rabbitvcs-checkout.svg", "scalable/actions/rabbitvcs-import.svg", "scalable/actions/rabbitvcs-branch.svg", "scalable/actions/rabbitvcs-refresh.svg", "scalable/actions/rabbitvcs-editconflicts.svg", "scalable/actions/rabbitvcs-monkey.svg", "scalable/actions/rabbitvcs-applypatch.svg", "scalable/actions/rabbitvcs-switch.svg", "scalable/actions/rabbitvcs-lock.svg", "scalable/actions/rabbitvcs-annotate.svg", "scalable/actions/rabbitvcs-compare.svg", "scalable/actions/rabbitvcs-revert.svg", "scalable/actions/rabbitvcs-bug.svg", "scalable/actions/rabbitvcs-cleanup.svg", "scalable/actions/rabbitvcs-clear.svg", "scalable/actions/rabbitvcs-unstage.svg", "scalable/actions/rabbitvcs-emblems.svg", "scalable/actions/rabbitvcs-relocate.svg", "scalable/actions/rabbitvcs-reset.svg", "scalable/actions/rabbitvcs-asynchronous.svg", "scalable/actions/rabbitvcs-commit.svg", "scalable/actions/rabbitvcs-checkmods.svg", "scalable/apps/rabbitvcs.svg", "scalable/apps/rabbitvcs-small.svg", "16x16/actions/rabbitvcs-push.png", ] rabbitvcs_icon_path = get_icon_path() for rel_icon_path in rabbitvcs_icons: icon_path = "%s/%s" % (rabbitvcs_icon_path, rel_icon_path) file = os.path.basename(rel_icon_path) (root, ext) = os.path.splitext(file) pixbuf = GdkPixbuf.Pixbuf.new_from_file(icon_path) iconset = Gtk.IconSet.new_from_pixbuf(pixbuf) factory.add(root, iconset) factory.add_default() # Create a global client we can use to do VCS related stuff self.vcs_client = VCS() self.status_checker = StatusChecker() self.status_checker.assert_version(EXT_VERSION) self.items_cache = {} def get_columns(self): """ Return all the columns we support. """ return ( Nemo.Column( name="RabbitVCS::status_column", attribute="status", label=_("RVCS Status"), description="", ), Nemo.Column( name="RabbitVCS::revision_column", attribute="revision", label=_("RVCS Revision"), description="", ), Nemo.Column( name="RabbitVCS::author_column", attribute="author", label=_("RVCS Author"), description="", ), Nemo.Column( name="RabbitVCS::age_column", attribute="age", label=_("RVCS Age"), description="", ), ) def update_file_info(self, item): """ C{update_file_info} is called only when: - When you enter a directory (once for each item but only when the item was modified since the last time it was listed) - When you refresh (once for each item visible) - When an item viewable from the current window is created or modified This is insufficient for our purpose because: - You're not notified about items you don't see (which is needed to keep the emblem for the directories above the item up-to-date) @type item: NemoVFSFile @param item: """ enable_emblems = bool(int(settings.get("general", "enable_emblems"))) enable_attrs = bool(int(settings.get("general", "enable_attributes"))) if not (enable_emblems or enable_attrs): return Nemo.OperationResult.COMPLETE if not self.valid_uri(item.get_uri()): return Nemo.OperationResult.FAILED path = self.get_local_path(item) # log.debug("update_file_info() called for %s" % path) invalidate = False if path in self.VFSFile_table: invalidate = True # Always replace the item in the table with the one we receive, because # for example if an item is deleted and recreated the NemoVFSFile # we had before will be invalid (think pointers and such). self.VFSFile_table[path] = item # This check should be pretty obvious :-) # TODO: how come the statuses for a few directories are incorrect # when we remove this line (detected as working copies, even though # they are not)? That shouldn't happen. is_in_a_or_a_working_copy = self.vcs_client.is_in_a_or_a_working_copy(path) if not is_in_a_or_a_working_copy: return Nemo.OperationResult.COMPLETE # Do our magic... # I have added extra logic in cb_status, using a list # (paths_from_callback) that should allow us to work around this for # now. But it'd be good to have an actual status monitor. found = False status = None # Could replace with (st for st in self.... if st.path ...).next() # Need to catch exception for idx in range(len(self.statuses_from_callback)): found = (self.statuses_from_callback[idx].path) == path if found: break if found: # We're here because we were triggered by a callback status = self.statuses_from_callback[idx] del self.statuses_from_callback[idx] # Don't bother the checker if we already have the info from a callback if not found: status = self.status_checker.check_status( path, recurse=True, summary=True, callback=self.cb_status, invalidate=invalidate, ) # FIXME: when did this get disabled? if enable_attrs: self.update_columns(item, path, status) if enable_emblems: self.update_status(item, path, status) return Nemo.OperationResult.COMPLETE def update_columns(self, item, path, status): """ Update the columns (attributes) for a given Nemo item, filling them in with information from the version control server. """ revision = "" if status.revision: revision = str(status.revision) age = "" if status.date: age = pretty_timedelta( datetime.datetime.fromtimestamp(status.date), datetime.datetime.now() ) author = "" if status.author: author = str(status.author) values = { "status": status.simple_content_status(), "revision": revision, "author": author, "age": age, } for key, value in values.items(): item.add_string_attribute(key, value) def update_status(self, item, path, status): if status.summary in rabbitvcs.ui.STATUS_EMBLEMS: item.add_emblem(rabbitvcs.ui.STATUS_EMBLEMS[status.summary]) # ~ @disable # @timeit # FIXME: this is a bottleneck. See generate_statuses() in # MainContextMenuConditions. def get_file_items_full(self, provider, window, items): """ Menu activated with items selected. Nemo also calls this function when rendering submenus, even though this is not needed since the entire menu has already been returned. Note that calling C{nemoVFSFile.invalidate_extension_info()} will also cause get_file_items to be called. @type window: NemoNavigationWindow @param window: @type items: list of NemoVFSFile @param items: @rtype: list of MenuItems @return: The context menu entries to add to the menu. """ paths = [] for item in items: if self.valid_uri(item.get_uri()): path = self.get_local_path(item) paths.append(path) self.VFSFile_table[path] = item if len(paths) == 0: return [] # log.debug("get_file_items_full() called") paths_str = "-".join(paths) conditions_dict = None if paths_str in self.items_cache: conditions_dict = self.items_cache[paths_str] if ( conditions_dict and conditions_dict != "in-progress" and hasattr(window, "base_dir") ): conditions = NemoMenuConditions(conditions_dict) menu = NemoMainContextMenu( self, window.base_dir, paths, conditions ).get_menu() return menu if conditions_dict != "in-progress" and hasattr(window, "base_dir"): self.status_checker.generate_menu_conditions_async( provider, window.base_dir, paths, self.update_file_items ) self.items_cache[path] = "in-progress" return () def get_file_items(self, window, items): paths = [] for item in items: if self.valid_uri(item.get_uri()): path = self.get_local_path(item) paths.append(path) self.VFSFile_table[path] = item if len(paths) == 0: return [] # log.debug("get_file_items() called") return NemoMainContextMenu(self, window.base_dir, paths).get_menu() def update_file_items(self, provider, base_dir, paths, conditions_dict): paths_str = "-".join(paths) self.items_cache[paths_str] = conditions_dict Nemo.MenuProvider.emit_items_updated_signal(provider) # ~ @disable # This is useful for profiling. Rename it to "get_background_items" and then # rename the real function "get_background_items_real". def get_background_items_profile(self, window, item): import cProfile path = S(gnomevfs.get_local_path_from_uri(item.get_uri())).replace("/", ":") profile_data_file = os.path.join( get_home_folder(), "checkerservice_%s.stats" % path ) prof = cProfile.Profile() retval = prof.runcall(self.get_background_items_real, window, item) prof.dump_stats(profile_data_file) log.debug("Dumped: %s" % profile_data_file) return retval def get_background_items_full(self, provider, window, item): """ Menu activated on entering a directory. Builds context menu for File menu and for window background. @type window: NemoNavigationWindow @param window: @type item: NemoVFSFile @param item: @rtype: list of MenuItems @return: The context menu entries to add to the menu. """ if not self.valid_uri(item.get_uri()): return path = self.get_local_path(item) self.VFSFile_table[path] = item # log.debug("get_background_items_full() called") conditions_dict = None if path in self.items_cache: conditions_dict = self.items_cache[path] if conditions_dict and conditions_dict != "in-progress": conditions = NemoMenuConditions(conditions_dict) menu = NemoMainContextMenu(self, path, [path], conditions).get_menu() return menu window.base_dir = path if conditions_dict != "in-progress": self.status_checker.generate_menu_conditions_async( provider, path, [path], self.update_background_items ) self.items_cache[path] = "in-progress" return () def get_background_items(self, window, item): if not self.valid_uri(item.get_uri()): return path = self.get_local_path(item) self.VFSFile_table[path] = item # log.debug("get_background_items() called") window.base_dir = path return NemoMainContextMenu(self, path, [path]).get_menu() def update_background_items(self, provider, base_dir, paths, conditions_dict): paths_str = "-".join(paths) conditions = NemoMenuConditions(conditions_dict) self.items_cache[paths_str] = conditions_dict Nemo.MenuProvider.emit_items_updated_signal(provider) # # Helper functions # def valid_uri(self, uri): """ Check whether or not it's a good idea to have RabbitVCS do its magic for this URI. Some examples of URI schemes: x-nemo-desktop:/// # e.g. mounted devices on the desktop """ if not uri.startswith("file://"): return False return True # # Some methods to help with keeping emblems up-to-date # def rescan_after_process_exit(self, proc, paths): def do_check(): # We'll check the paths first (these were the paths that # were originally passed along to the context menu). # # This is needed among other things for: # # - When a directory is normal and you add files inside it # for path in paths: # We're not interested in the result now, just the callback self.status_checker.check_status( path, recurse=True, invalidate=True, callback=self.cb_status, summary=True, ) self.execute_after_process_exit(proc, do_check) def execute_after_process_exit(self, proc, func=None): def is_process_still_alive(): log.debug("is_process_still_alive() for pid: %i" % proc.pid) # First we need to see if the commit process is still running retval = proc.poll() log.debug("%s" % retval) still_going = retval is None if not still_going and callable(func): func() return still_going # Add our callback function on a 1 second timeout GObject.timeout_add_seconds(1, is_process_still_alive) # # Some other methods # def reload_settings(self, proc): """ Used to re-load settings after the settings dialog has been closed. FIXME: This probably doesn't belong here, ideally the settings manager does this itself and make sure everything is reloaded properly after the settings dialogs saves. """ def do_reload_settings(): globals()["settings"] = SettingsManager() globals()["log"] = reload_log_settings()("rabbitvcs.util.extensions.nemo") log.debug("Re-scanning settings") self.execute_after_process_exit(proc, do_reload_settings) # # Callbacks # def cb_status(self, status): """ This is the callback that C{StatusMonitor} calls. @type path: string @param path: The path of the item something interesting happened to. @type statuses: list of status objects @param statuses: The statuses """ if status.path in self.VFSFile_table: item = self.VFSFile_table[status.path] # We need to invalidate the extension info for only one reason: # # - Invalidating the extension info will cause Nemo to remove all # temporary emblems we applied so we don't have overlay problems # (with ourselves, we'd still have some with other extensions). # # After invalidating C{update_file_info} applies the correct emblem. # Since invalidation triggers an "update_file_info" call, we can # tell it NOT to invalidate the status checker path. self.statuses_from_callback.append(status) # NOTE! There is a call to "update_file_info" WITHIN the call to # invalidate_extension_info() - beware recursion! item.invalidate_extension_info() if status.path in self.items_cache: del self.items_cache[status.path] else: log.debug("Path [%s] not found in file table" % status.path) def get_property_pages(self, items): paths = [] for item in items: if self.valid_uri(item.get_uri()): path = self.get_local_path(item) if self.vcs_client.is_in_a_or_a_working_copy(path): paths.append(path) self.VFSFile_table[path] = item if len(paths) == 0: return [] label = rabbitvcs.ui.property_page.PropertyPageLabel( claim_domain=False ).get_widget("rabbitvcs-title") page = rabbitvcs.ui.property_page.PropertyPage( paths, claim_domain=False ).get_widget() ppage = Nemo.PropertyPage( name="RabbitVCS::PropertyPage", label=label, page=page ) return [ppage] def get_name_and_desc(self): return [("Nemo RabbitVCS:::Access RabbitVCS from the context menu")] class NemoContextMenu(MenuBuilder): """ Provides a standard Nemo context menu (ie. a list of "Nemo.MenuItem"s). """ signal = "activate" def make_menu_item(self, item, id_magic): identifier = item.make_magic_id(id_magic) menuitem = Nemo.MenuItem( name=identifier, label=item.make_label(), tip=item.tooltip, icon=item.icon ) return menuitem def attach_submenu(self, menu_node, submenu_list): submenu = Nemo.Menu() menu_node.set_submenu(submenu) [submenu.append_item(item) for item in submenu_list] def top_level_menu(self, items): return items class NemoMenuConditions(ContextMenuConditions): def __init__(self, path_dict): self.path_dict = path_dict class NemoMainContextMenu(MainContextMenu): def get_menu(self): return NemoContextMenu(self.structure, self.conditions, self.callbacks).menu rabbitvcs-0.19/clients/osx_finder/000077500000000000000000000000001445560650400172345ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/000077500000000000000000000000001445560650400210575ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Add.workflow/000077500000000000000000000000001445560650400240475ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Add.workflow/Contents/000077500000000000000000000000001445560650400256445ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Add.workflow/Contents/Info.plist000066400000000000000000000011641445560650400276160ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Add NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Add.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400275455ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Add.workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001103751445560650400322050ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëUiCCPICC ProfilexÕYy8U]Û_ûĖŽs Į<ķ,ķ˜yžįšpĖķŒáˆ‚^'øÛ9ūeŗæíŖ÷—đ 00ūmƒ DīöÅĪ9_P˜éîāžŠĀ"á:H3  ôūĒ%/ ĀšXX‚ĀŒCāap›0“˙˛Ķũ‰Á¯v~pģ÷H^°mĖß}ūî ÷ųĮgđ†ņ9îcWˇ;ē(÷€Ôúücąëī×h¤kĨßIoũJ%‹R@é ÔQ(@F1ŖØ$JĨŒŌFiĸÔ` 0¯aĪ~Ƹë?¤Ņ7ölXŧǃ?ŦŨũīž´Āá—uĀßŋ˙c `hšeųĪˆö9ŋ膅ĮGøųG“ĩá7×G‚lę%%A–•–‘ŲU˙ŋ)ģkÖīÁŽÚüZ‹ æádūj¨-€E˙# ˜ öŧ˙Č:āđ fÔ+&2öˇ?Ôî ¯„´p„˛nĀDāį, áĩQ č` ė€3pƒãĮŽÁHA HŲā$8Š@)¸Ē@h- tƒ{`Œ€ 0fÁ°VĀ:؄  !ˆ â!qHR†4 }Č ˛œ!Č …b Dč” åAEPT ]‡Ú nč4 MBsĐ;č ôDŒ.„bBĄ0EØ!ö#üˆDââ,ĸqҌčF &ŗˆ%ÄW$@R#™‘ŧHI¤2Ri‰tAú"#‘‡YČd9˛ŲŽėGŽ!g‘ËČī( ŠEFIÂqj„˛GyĄ"P‡P9¨"TĒՋCÍĄVP?ŅD4'Z­Š6F;ĄũĐqčttú ē Ũ‡ž@ŋA¯c0fŒ0F c„qÆbbr0%˜Lf3ųŠÅbŲ°âXuŦ%–‚ÆĻcĪa¯bī`cß`7pÔ8œ,Îį‚ ÅĨâ p5¸NÜcÜ[Ü&• •*•%•7Uü4~•šššZ…Úš:€ú0õYękÔ÷Šį¨ŋH1‚.a!†p‚PIč"LV‰DĸQ‹čBŒ&ž Vī_7hh¤hŒiŧi’iŠišiĶ|¤Ĩĸ¤ÕĻuŖM - ŊA;LģLGE'D§KGĄ;DWL×F÷”î+=Ŋ Ŋ%}}} ũúE–$DŌ'y“ŌH—HwIķ H~]/†#  } o1ŒÂŒÆŒŒŲŒuŒCŒ+L$&y&ĻLÅLˇ™f™‘ĖBĖÆĖÁĖšĖĖO˜°pąhŗø°d˛ÔŗÆžĮÖaŸCĩÃ7G=Į<ĮY§=NINÎėÎέ.X—+._]õ]ΏžŲ§°/}ߓũÂûėāÆîėv۝֝â~ÃíáčQãąEऔSžz{ž÷\ņŌõ*ôZōÖōÎ÷~įŖî“įķÖWŨ7ĪwŅOŨī´ß;M˙˙åŨ€ĸ€ĪFĨß‚,ƒ*ƒv‚ƒBp!!mĄ¤Đ ĐŪ0î°aŖáâáéáŗĒg"V"M#¯DAQûŖZŖáäp0F$æhĖ\ŦFlqėFœC܍ôB ƋÅgÆŋM0H¸|uĐë`O"obJâ\’vRŲ!čįĄždūä´ä7‡ WĨāS‚RĨJ§æĨŽq<ŌžÆ•v8mū¨áŅÚtšôČô§jĨĮPĮŽ eĘežËü™åõ0[:ģ {+Į+įáq™ãgīœđ=1”Ģ˜{á$ædčÉ'§4OUåŅį%ä͟6?ŨœOÎĪĘ_;ã~æA|Ai!ž0ĻpöŦŲŲÖsįNžÛ*ō/š(Ö)n8Īy>ķüˇī’Į´.ԗr•f—ū¸pņY™aYsšPyÁ%ĖĨØK ũ—•/W_aŋ’}eģ2´rļĘĻǎZŠē熺&ˇQSûîęžĢ#uzu­õ’õe Ė Ų×Āĩ˜kī¯{\ŌhÚØsCųFũMÁ›į›š˛šĄæøæ•˙–ŲVįÖŅ6“ļžvĩöĻ[Rˇ*;x;Šo3ŨÎíÄwĻuîÜI¸ķĩ+ŧkšÛ¯{žĮŊgęŽĶŨņ^ëŪĄ>Ķžû÷ îŨí×îŋs_ũ~ĮÕm•ļ (4* 6=RxÔ4¤8Ô<Ŧ4Ü:ĸ2Ō>ēw´ķąæãî1Ŋą{ãÆãŖOėŸ<{ēīéė3īg‹“Á“ŸŸĮ>ߜ:<žÎzA÷ĸā%įËōŅ™†YÅŲÛszsƒ¯l_MÍ{Í/ŊŽzŊõ&m¸Pđ–įmõĸėbĮ;ƒw#ī]ßŋY _Ú\N˙@˙áüG‘7?i}\qZyķ9ōķǜUļÕĘ5ųĩž¯V__އŦo~ËÚ`Û¨úŽüŊ˙‡ãˇ›q[Ø­ŗÛĸÛí?MNī„ėė„S")ŋr$\#|}øR sg˜;Œ€īúÍ)~YĀt‚m`Œ„ķ_!`į§×Ā7HJƒ&jˆjxŊ€AuŖŨ0Ķ‚=„ŗ âĸÚĀĪP?& Ō<ĸ§["á$͙R˜¯˛ŧ`ceˇāČæâĻį1'įđNđķ ø Ö}Qģ+AÔ—JÜĶ%Ŋ-k('Uგ ˛ĩJ˛jŊڜ:Ŗ†ŧĻ•V’vĩN‡îŪŠĩ!‹¯ą¤‰’ŠŽ™ĩšŗ…ŸeĒÕ9ë:x%xiˇâ™D•]l\#ö%ī?áVåŪé1J™õüâō!ų øÉûëX:y„Ä…&†e„gEäEæFŒ>“›WxātüɄôƒÉ‰1I҇“)‡R SÕČ§IåN§MßÉX=ļœ95Ũ–SwŧųÄėI–S†yņ§KōĪėJŸu;—VTWüĒ„xAŽÔãbNYSųdâ˛ČķʘĒãÕ 5CĩęhëeLŽy^oĖŊQuŗ¯i´yąågm;ī-éÛæwŧģÂēôš›×{ž¯ö^KĪũ;†N , ž~46ty8fD”4:ũ¸aėā¸ÁibæIũ̓ĪL&Ų&_?oĘ˜ļ{!đbķe˙Ė…Ųˆ9ŊW,¯>Í÷ž.}“°`˙Vf‘~ņĮģ'ī;–Ē—OHųû)hÅ˙sĀ— Õøĩœ¯ÕëĪ7ž{ūŨ ūéļŗŗ'0{f‚`/p‡@5˜‚3;Kč4…FœBü@† ßŖbŅt5Æ‹Įā Š‚ņ&Ô{"DfZ.: z5’-CcS%ķ}–u62ģGgW3÷ 2¯Ÿ+Ļ@›āŧ0^DZÔ\,Dü´Ä-ÉįR_ĨeTdåÂå‹šģ•ž)oŠ2¨ņī•S7ŌđԌƒŖáŒN™n•Ū ũ;ƒ†SF‹ÆĢ&ßMˇĖļ-P–´VŦÖÜ6ŧļ"vōöĘŠŽN&ÎĻ.&Žvû÷[šŲ¸ÛxØQ\=ŧėŊ},}ÍüLüu4Ղä‚ÅBøC9ØÃIt‘Ø(DÔVôZĖĮØˇq3&ã'<FĖĪ2ČöÉÉ>~íÄpî‡Sø<…ĶųQgŠ ē įĪĄŠÄ‹-ÎĮ””^č/ũXÆXŽrÉ­"įr˕é*DĩTGmÎÕļē…ēk×Ŗ/ܸųŖyO‹_kA[ī-¨Cęv@g靑nLöŨ”ŪŽžĩ~ūûĘö>ÔPT|¤8¤8Ŧ8"3*öX|Lxœ{‚ũ ãSÂ3ĒIhrûų§Š÷Ķī^ŧ{97ķfvfnîÕėü‹×ķo>,lŧŨy‡{Īž$ĩŦũÁöcø§Ŧ•ĒĪ_>¯ņ|5[OøVˇąđƒs˙Véöâß_ķô0ߒæ0ˎÁGˆr…ķö„â b )ƒĖGnŖBP¯ŅžčEL8f›‹Æ=  Åŗā{¨Ŗ „%b=M4­œGŽŅWŦ…™ Ļ9æ>–JÖ ļ@v;]N!.,×:÷žAr#o1_:¨€ĩ ĻŸ0ZxCdB´YŦDü°„줁YjkĪ3éz™#˛.rbōXų§ W(™+ +ī¨L¨VŠ%ėĩP×@iLi^Ķ:ĻíŖŖ¤K¯ģĸ7¨Ų ŅĐÕHŘɸ“É}Ķ2ŗxs[ KŦå+Ģë›h[c;Aģûg×3ŧœ]č\\Û÷åî÷sĶvgw˙čŅM)ô ķŌ÷æô^õšī[ėė¯ĀīõŊAį‚cC BšC×á}Ŋ>âh¤W”f4o ˆ™í‰+?ī P,‘>q#éåĄŪäēÃįSޤFqKŗ>Ē‘.™Á{Œ!ų#ëSö|ÎŗãŖpüôŸė<Ք×pē1ŋáĖՂŠÂËg/ž+-*/.>_^rņBeéPĒ\ūĨâÄåÎ+KUôÕ*5^ĩĮ¯ļ×-6°^3ųCãMÄf–ČÖúļOˇd;Üžs‡ÔÜ}ë.worßĮ~īûĶĻæš÷8f\˙‰ø3†į‚͆/“g?ΟX}—÷Áúķđ†Ķîü˙>[ÚŨ0ŠœuĀ™ kCrö Ô +"v*!Å ¯=ŌÉũ{˙`ĒđʑJ`ž8Ą ˜†Cų0ߛA`R{Dâ2bņɏ´F&!k“(|‚ā3ą!4­ŒA_BOa˜0V˜lL?‡5ÄÅöãˆ8\nžJ’*šĒĪ„÷Æß ÆRģSˇÂĖ'„pŸ(HĖ&ŽŌ8Ō´ÃlĻ„Ž@wn…>”ū)„´ÂÍđņé$3 s‹K;Ģ)ë [,;žŊ‚C›c’3œ‹ĢÛ™{‹§‚lIūÉ[ÃˇŸŸÄß'įú߄ڄ“E DŠE'Å*Äã%L$E¤ĐR3{ú¤Ģd˛dãä|ä÷)Ø*Z*é+¨ĢZ¨yė PĶHÕ,ĶjĶžÖų¨GŌW1đ3Ė3Ē1žlrŌ4Å,Á<Ü"Ö2Â*ÂÚĮ&Ô6Ė.Ų>Įá¸cĄSŊsË¨ëž7nwuGJĒgš×¤¯ŒŸˇQĀXÖ 9:ÎŲõ3Æ#ļų1>4a$Q!éR2ũáC);G‚Ķ>¤‡d,gúg}Ę ?ž‘›vJ$¯1ßôĖDáĄs†Åv%ÁĨGËZ. _AU)×D\Ŋ\?í†oĶ…–ˇí{;ĸ:‡ģ‰w)}-÷Ą‡ÎƒĨCKŖęc™ˇž‘ž[O§ŧėũ2ĪōÆč­ÍģØĨC’>Å|vYåY[X?ˇ!ņŊr“jËfÛíįá_ë‡ |žUúĀgˆ2†ĸĄRč!´Ž #Ė`_‰G"‘˛H 2Ų3rI”ĒõE렓ĐčL<æ6`õ°™ØĮ8Nœ?Ž•ŠŠĘ…Ē–ę'Ūæž>ÔŨAB áŅ”ØNCĻÉ Y§  }AgM×G¯J›¤@jbPcčf4bereZ`ŽaÁ˛\`Uf}ÂÎNÍ^ÃaÎąÆYÄĨÁĩÄ}Į”gƒ|7‡oŠŋLĀSPXpYčšđaKQ.ŅobCâW$ŽIúJf—ÁČŦÉÎË=–ŋĢĐĨxS NCUUÛÔ:÷ŪS‡YŌ{m”Ž°ž†ū>ƒÃBŖ:ãF“ĶZŗķ6‹~ËQ̧Ö36Ÿí {nIGe'{įh—L×ō}wöĪšc<¸)Ļž^ĮŊoøLûaũ|Īõ  ķ /‰xĸÕbbc¯Į}‰WNˆ8X—øífrúáTâ‹´˛Ŗ_2¤Žee>ÍæÎ‰<>K>uĒį4mžį™žBŪŗEEZÅK%EĨîeLåc9WĖĢĒßÖ6Ôå4x\WēÁys­yēĩ­ũfGIgJ—wkīŪ{ō÷ɉ6†gFûƚ'ĒžfOO™ŧИažũōjüuŨBęĸÃ{îĨĨˇ>e|6_ĨY{¸~fÃüqŗc;ô×ü̧HM` ’ƒ" Fh Ą€8€¸D ‘Į‘OP<¨`T+ƒvDWŖ71˜Ë˜ŦöŽ…{L%OU‚Įâ#áŦŌŽē— Nh%JoĐČĶ´ĐęŌĐšŅ­Ōg‘$Hƒ ąŒŦŒ™’˜Ĩ™įX YmØŲž˛ŸápæäįüÂÕÎ}ŠĮ‹,ĮKÍģĖwŋB C0LČUØLDCTJL\œO‚_’[Jd¤´’Œ‘ŦĢ\˜|ŽBĨâ°Ō7UCĩ¨Ŋuę šÜZû´‹ufô$ô“ ƍ؍ŖMÆĖÍOX,[ŲX_ĩeŗK˛_t4vjsásÍۏsKp_Ĩøz>÷ļõöŗđŋ¨ÔĸÚŽŅī ũąqcņî īã“6’3R8RĶ gxûžu>Göøxnä)B^{žÍ™íÂķįHEąÅS%Vē/*–U_âŽ(ŋ"TYį 7Ž*Õu4h]ëk4ž1×ŲŧۚĐļ}ëômÁÎĒ.ąîĢwĨzîI÷_}@ķ0gúQäĐüˆõčĩ1šņā‰OŸž|2Å:íôâė˧ŗLs6¯2æë_ß}3ĩ°ŗČôŽ˙=ßī2ĪŽlˇ?Ŋ\éü\ōÅUfuuíúאuōúġ˜ ÂFÅwųīw~˜ūx¸Š˛YĩŞ•¸u›iÛsģ~{ķ§áĪ“?'wøw‚wšwį?ĘWNvw÷A>~|šŗŗ*Ÿ_æ°}jggŗ|ggûL2āo ]ÁŋŋWėcā3÷ķ™ģčîõĒŨÛŋ•˙A4zXąî8” IDATxėœUÅõĮĪîŌ;"Ø;(ĸĸbī(öŪ%F%–Xģų'ÖØ’XŖÆ5ƒØbī{EĆ A@Š´]Øōūķå<.—÷vËîcY~ŗŸģsgæĖ™™ß{įwĪĖÜW2zôčŒÉ ! „€B@4KJ›e­T)! „€B@ˆ€Čš:‚B@! š1"kÍøâ¨jB@! „€YSB@! „@3F@d­_UM! „€"kęB@! „€hƈŦ5ã‹ŖĒ ! „€B@dM}@! „€Í‘ĩf|qT5! „€B@´B@4™LÆjjjėë¯ŋļīŋ˙Ū&Ožl­[ˇ6â9p%%%ŅWxŅÄãŽ+ĘŦŦlūŪ{KBS{ôjo[ \Æ8ļˇĩk×zŽžMđOũQ÷ۂ>oĨūŪˇĐBSYĸŸ›ZhØĢāŒ€/ˆÚāÁƒ­mÛļļĶN;Y›6m"I+++kÁ­oŲMãÚúõÅüéD[ŠWg+ ¤ŪūGžŠåā1Å\!ŸYuøWUąą?Lĩîb“žŸj—\ģIč#ĩīÎ>˜Öæjœ˙^ßBûŖËį+ôt=Ķá|yŋh!Āĩöū€ŋ(ô÷E áÂj;¯ƒ…é””XŦH>؆-kģė˛KÖĸƀY;°×ę r ĪÁbQÁƒëĖĩ7ËŦŧÆlFu82Ĩ6#ĩōpTļÆAx~H›üōšŌ^j–îbœŧ™MéŌÎî˙įđšÄÆŧŌËJK­4yĖļūrm^xūYģķÎ;ŗd8äņũPžƒ˜´<•ūۘ÷NsŌĨiĐæt5T—ƒļĒĒ*ƒŦ­ˇŪzV]]÷ęęĒ8"Ã\ūĸ…×Đ¯/×uâôŒMšQe%‘ÜԄkZK\°Ĩag{ų™˙Ų6;îCá’‚— Öĩ`a ~ye‰õßą=~ËvđQ}ŦUĢVąO4öāõ­¯?Rnee•}?ú§`nk5T8ÖÜ!+ŗéͧŲ3Ī9ʓ–L'rQ ĶVpŒs§VflÆŦ`Z ķĨ¨eÂŧ§wŋßlį˙ū8ģäĻîÖÃ-#NA2’ ĘĀØf†ŧ]{vąãKŖ>Č84ļ̝?ļjÕ:‹˙”)SíŨ/Ëm~+،ŠrkÕēŊUÎ*ˇv:؋/nÜ8ģëŽģ˛ĸÉ´ld' ž…¸¤^t™čp™éͧĮsŦ/UU•ŗ*Ģ –‹ę@Ūė)÷–[ną?ü0^sÖļuéŌÅ*Ę+ĸ%îē뮋›j‚åųŦ….„9'ô9œ¯~F/ĪëÛ1ģüd}“õƒŦŨzë­Ųú&õģž¤<ímŽaÚË5ćŦ•WeŦ"\Ī™U56#¯Šā7ez…ŨpŲyą[Ũxųš6yZšÍņČˍ´ gøŽM qe]ÚÛ´i͞}'ŲŊ? :Ô6ŨtĶŦ ņ…8Ī_WtŧÁœcĄRûz\‰ ]iO<ö¨}˙Sk{ũũV>ųG[síulđÛģī ąļíÚ a¨EIģoN˙ô닮%–XÂÖ^kíha^ũõíļÛnŗ>øĀÖ^{íXVėGŋ|×;™ūîģīÚSO=eéúz¸Šî‡ÅYąû{!}zq”‘em>¯zōųÎ;īØįŸĻž‰ZĘËËįŌ†,o' q˙ûßã'Īģ ē\Į‚úÉļŖ‹gįΝŗj›K ÅÜÛ3bÄÛwß}ãâ)D‡įĪÕnžYŗfÅi­8؄peãO|UØpä}åÕWíĐCą~ũúŸá_~?ĻŖ*czUČ[Č^ļNXĨĸdí?†ėÆ 3õåú¨ßĢĄ~‡ĖŽu¨ $…58îŧ|d9ŌõEF›BC˛úŅįųĶúšk¸:äšpMh튨jcŗ‚•Ŧ$Lk֔†)Ōę0āyúū;lÜč‘ÖĻmģā˛ĮīŋÍv=äD ´†ŠÃpˍŦąĘš°ĻŠ}k›9sf$,Ųë3wôįž{΃Ņ'=)?Wb"PW¤ ôGtAvf†ū9ôĶÉÁüŗÍš>ÉŪ~áukŊÄööŪËOÚ~Û¯e“g˜}>|¤ũ0Xn¸á†ļÕV[Ų›ožķ<˙üķ†5)Ļã\OŌ˙÷ŋ˙mčúÍo~ctPųžûîģh%L—sÕUWÅrųË_ÚG}”-‚Ãôã‰'žh¯ŧōJč˛!š˙ú×ŋĸœįMãpĶM7ÅļŌž—_~9Ģ3Y÷|2Ž“ú$ąĨžlļŨvÛy°xlŋũöŅBÁõaúúŦŗÎ˛Ÿ~úÉvŪyg{ä‘Gb;ŧŒtŊ,7Ûlŗˆģ[Õŧ˘1QÖ AÎfÎ  kZˆ#Ū,Qīŧũļ]xá…FߨnģílP8¨dW|ÎŋúęĢXĮmf—]vYvp!´•~CŸēüōËŗō^ųÉģ÷Ū{ۀl‹Í77đņô­ƒžģīž;ö/â3ŠúŊ=ģ~X‘ŠĮˇ_um°ÁąĖC|ô%ëûä“OÆōļ õēũöÛãĩ‰eŲ§Ÿ~:æķÃô(zI;å”SėĻn°vØÁūüį?GŊ'„ž .ôËI“&eÛąāđú.ŦđŦĀ?™Î,SĄŗ‚e-0ށûk×?ũĨ]7ûØö€ãƒ%­ÚĻ™iA~RE؜0ĩŌFM ¸˛ÛîŸ|ŽkøĢ_ũ*ÛĮéĮŧ(î¸ãŽKîÁt_D—Įo}ũҝĪôŸËmō¤ō@ŠZŲĻ;žlĶgX͌‘ÖgumüØYļÁÆÛØļ;ėms‹m¯/žpéoQĪė~D<Íõķ’Ë30ō܋O<ņDŧ¯6 ×ų…^¨M ×÷ŠĐ§×]wŨØ苙įũåĘ+¯´Í‚ĩņĀ´÷ß?æųė“Ol÷ŨwˇŋũíoᅳkZy°pģ<å ĪĶ8 –vŧ÷^6įŅũaI÷8}Ž~Jũ>™­ķúë¯ˇu‚EgSŋ^˙č7“ūØÔ÷Cąú;ũFn˛ŦÍÁĸŪ3z8øaŌ?üđÃm=ö0˛N8!ŽÛøöÛoãMūėŗĪÆuH :÷Ũw_Ė;räČHļČ:vėh7ŪxŖ}ņÅqJĸĀÔTĻØ|ڂ‡NĪž=ãtY‡°n$>Ãáŧķ΋$ ëÖĀ@ÚvŨu×øiˆXĐėSĻLąx æŨ< Ō é|ėT䓚Ęáû`<°’ma}ŽļPlB¸`‰<æĘ X ˙ō—ŋØ[oŊ§H×ŲUŽ^ZÆ˛ožųfŽú°FОIĮĄ‹ķ?üásaãm<ũôĶ#qåē!ĮĄK.šÄöÛo?ãšāō՛´ŗĪ>;bŲˇo_ģų曉ŠeƓđ/ZBŧ@č‰Ģkp<Ôg Ę´ø­ĩ;ôĐÆ)Üa‡íƒÜŦ0]´n\Į6sfEÔ3mÚôHä/žøâ0Xa;…æčcŽŽŸŲ`ƒ ë×ŋūu´wú3!ī´Ų¯ÎÔŖÖŠšÛhŖÂ Âmp‰¤čÕW!ØĨņe€ūĄ‡ –ŌŽ1?ö Úāõcpĸ~Ŧgē4čÚxãģ-åĸŽZ˛^›Įë{ÆgDâŪwžvûˇGŧūyJ´ĸ€ãũ÷ßîÎļK l[oŗM胭môč1ö^<ÁvŲe— ũî9û8Ŧå{ėąĮB]ŅosĩúGĢLüGúlĢ]†ŠDMÂPˆx•ũ0­•uŦE%­Ŧ ëZXˇöûršŗŽzĮ§Gø‡e0ĮŠa騊pšÚˇ qĩøá§qXŪ§–ĸéÜŧŨsĪ=qj—îAōnqKęÍÕ+ÃËÄ´đĖá~`ŖĀ´@nfŋ"´-ôVkÕšŖ÷Ŗ­¸LG[qĨemę´9Ž8ŨYVöį›|ŊDÜwÜîõîáķ$íât?ßäE—ū€UŒRũ-ˇÜj·"^b XßžũöģøėdŊ#z˙ô§ķ#ņcįˆßÚã?a>ō¨}ōé'vūųį‡]ĒwŲĉ“ĸÕĐ í‚Uxp¸Fá:"YÛč%Q–ūuķ͡†iŲÛíĪ—ū9`VëņūûÄ%(oŊõĻtŌIöö[oĮ—–*ėšį^Ą~ĪÛ5×^c]tĄŨpÃMŲūšt4}˙‹]ģ ûwZhTŅû;}FnnDÖæÆŖā@n§všm˛É&Ņ:Ã[ß?˙ųĪđy<>,\‘cēK –7Üī~÷ģHÔ8Į:ŃčÜsĪ¤b‡^×i,AHČOB׉ įå@Ȝ0ĄđˇGÖ琗ēx>Ãâ’ĢIt'ÛBX[…#?V`ÖĸŦąÆļÔRKŲĩ×^›3/íĀ*s衇F‹$‚2’ƒKZĢ 2ų°%2DŌm/ęĖfÖâ(ú“‡O\ž6CâĐÁĘâ-ō‰ŖĸđĪëÃp!„¤ãˆg×`í5 öŲáĒ•QŽö_|lFâÅ@Í´ëŲŪ}÷ˆõë¯ŋ­MÛĸ9ĨÍûėŗOĖęX /3Öú´jU­]´ĸÅuĮŅģtéë#fķ…dũ¨HeØáēJÃî@ō×ę×$ÅŧĄÚX›‰īßŋŒÚrË-ãKƒuũĮ?nŽåA|¸fôQŌ:ę([nšåbžž}×° &DBÁ#>ŲļäyĖP„ņZ1íHĸM¸ž•aÍԆkVv{â×:^#¸úáŌķ?¤2„ƒ Ģ.)ŗļeaiø(Ž÷¤’Îãņqô7w\puīŪŨúôé 2š0qšú# {˙tŨė…ˆ•"VČÎˊŠöãWŸÚŨt—”ĩą­ļŲ-ø acD v•á Ũ\?ŋjëR[Ķ=zÄN^ “õĢŨMZ+Ã Ā’Kö°>Ģ÷ąģîž+ȕ‹ũËą_đ˛Š>vVcaÄ=ũ4ËO2vų—Į0–5úgI¸&<Ž<ō¨īåĄ]ēv‰2oŧņĻ}ųåđØŋ$wđGÄįķ AۇļœgÃ>_ ŠÃėeöß˙x¯ÕÔTĪĩ\%Ųž(ØūÅžSÄūŪ k’&ˆŦ5ÖØyÃMī>ƒĖ˙ūļį‡A“ulėdPÁŌ…Ã$ķ!ųœ0¸BZ°ÎaĨZk­ĩæ‘Ck›įGĶíÛˇĪ–aZmĩÕbHĮ!OY<Ŧ´Ÿ:$Ķ?âHOēt$ y߅šÕōbqĢ _„k׎“õėĩŠĩéĸŊ6ũˆgũĮ=ázņ9\Ūã‘c–€—b^P°sΏé8ãķ‚Äũ—Œįœg÷Îõ#ŸÆ}Qû5¤ÅęīTũ› 9Oôšĸ(ÜÄtb,nÜe—]6Z\°`Až˜*åā!束ƒŽŋJ JK/Ŋt´ļąĻŒ8ŌЉĪŒõ;XÖXûD>‰'F9Î9xÃ&Ÿįõs|ôrPĪįu#õĮ—.–l å$‰Ŗ×ŌÉT;ÖČC<–§d^Ę#oEEElO9𰤎î8gđ§Itĸ+Øzģ“õŸtyīÖ­[Ö ä–3H:™FfŊ dˆüųę•ˇzĻlČĮwÉúG˜\šöÔĶ3Î=Œ<y`’aâ9âŽē0Eūå—_ÆéL,>øQopšæšk"–Ž×Ë }ŦßcĒ]?üđC´&ÔZ˛æ ~^GĪįõö:ö)wtQ_ĻåčO`ƒœ×Šq°‚\ã|ŠęNôaU倔ĄĪËÂ'ĖũÅĩc]!Ö9ú—ˇ{Ãâüŋ)Ώ—ĶĄuY k­Ŧcø‚NŗÎÁRļÁļ{ؤQ_Ú÷ ļq_}l Ú×焸.m[ŲÖÖ!ČvlSŽRkÖŦyŸ‰€%ūyßrŸ>J˙Ãų9>Îu¸lŒLÄ××i¸Ī ëīĘ+fÚĐ×ūiī> ú\üäLģvm9me¯„͡ß|Šũ÷Ū›ÂÎåō@ւE+\ŗ\}ˆ: Ķû>a÷sŋöÆį^dš–Xúš÷ady9æųÂŽtīG<ƒ“ų9§<ŦšôÎ!k<¯ ˙āÄsÆûuâĨŽ0ëę dÜg8ʧŋ“öÚk¯ŲvÛm—m/z‹Õ˙ŧßĢŧb÷÷ļū̓€,kķ@R7+7=k°j°†‚uP/H(–2ĻYW‚EįT?gá7 Ãy3L?t c}b?'Ŧb \,F˙ë_˙ŋÁĩ +Dkk„ˆÚčŧœ¤ĪtD2—ß˙ū÷ąŽlBā;e^ΙgžËa!p]maā`q;ídzlˆŖ.i ƒ`EüJ+­ã‹.ēhL°nA^W\qÅ(ÃtX 3]Öí¸C†6˛&Žļ€ˇ‘?Ķ…L§ąPBČz>äų)(ƒíOכëi8õÔSŖ–ĄŊöÚ+‹ŗ—Ūîëƒė˛ž YÚNHæõē~ÄF‚#FD¨ƒ;/ÛëI<ú(—ÃurÎ:ú ¸Ŗ‹5 ^ēčëL÷ŗ>Ž#?ߝŖ-čđëC_w—ņļŋ6Ÿ°.‘žB}dŠK˛žč,ĻsŦh/ᐴaŊ]Ļ4XĨÃÔp˜ GŠuîĐĶ<ų2ģũOGØ>']^ä– ĶŸאEō•!PVVefĩ˛ÎømЙąŽ#?Į÷spđ0ž‡]ž¸$&žôt$,š~ôGtž5+Ŧ[ SĄ+ö?Ô*~a“~eƏ´Ķ'X—ĖwöĶøąÁšQXÃÖ'XāŽؙ3c^úåŖË_3ŋŽøČøáré0ĪĻī!Fܧŧ@ܐ#ŽY‰äŗéūûīĒ\åR–Yˆ*k„šĪéÃŧ´ņeÍ0/nĄcŸÜąŧÃuĄ˜ĩt9žOXūŅÍA9I9oOKđŊô#Λ˛ŋˇŧšĒ úmĐų@Özø<ˆx¸ņæĪÛĶžtdéXn°ØđÁq3įrŽ7–Œ'/;ᰂQiԁƒx,<$ũĄ‘LįÜuų9ų°nP7¯7åSņ”ÚËķö™lK˛ŽŽÛķ{Ø}ȒįE§ëĨŪXŒ(ßëíi>p°^ ’äņ^×Iū´s|Ę ^.˛ÄC,ũē¸(Q÷äA>đbǚ‡:›FŧÄ“Ÿ˛i#}„ƒëŖ.îŧLsŸ6aáōŠHâY‹G\Ōrâ˜yČąqÄ9>…ôGÖcQí7ū';ėO_Û2Ë­V¤Y˜˛îęĶÆZũSĻN°Vãūm§˙ū<›úņŒĶÃGsÛŌū• ܸGŧFô#ĘĻžŪ÷¨¯×‡sõįđöGŊĶí"į÷ϧ!ëŽöŅ?čGŽžcáåįu‚đŅ^Č+ēņÁœŨŖŦɤ¯%ī‡?ū8žüaQCž{ yoĢ—•Ģū^g¯Ûĸ.f÷k*^æŧZĪ›Ļ˜zāæcĀ䭟0y•›ŲɄߨÄsÎáōÄår.ãičr=ÉŪɈ˚Ÿ,'­‹07wŽ—°—ãeāįk iIŨž=īy 'Ëa Į‘ĮõĈÄ?d<=ëãų“:Ŋ|/ËąIĘđđöx/ãųņ“õĻltĪ5wįå$õ{VPō ”ËÁFš? sîúŊ^a?ˆÃrëēČÃÄ`Kœø„Iķ8ΙĻĮĮy=ņ‘ĄŊ >îŖ^ †É:y~tyŊЁK‡Ņéņšd|#ˇŲdŊĐGĀ ęG]ŨwžĪËjʰ_7ęCũēwîdģ„_…øBt`ŋÔ ÖqΙ˜Z’Æ&„Đœp ,ôƒ`é*oemÂIģ ī„6î˜mģįu?ŨNĘMĮy8_Z]ũ‘>MģpÚˇŗíVü<|û훸`ŋV>7‚ëŅĒŊ;rˆ=öāßaéûģx!ŽíˇŲ/Kz¸FčsŦČëטúqЏüœ#^ŦĀIúëÔÜQž÷c|v GØËÁG×ĪË\ÔÃ~ ‹Ųß{ųs˜ķdž§ŗđŅäy:LZōHĻĪÃ?}C#įqžĮõĪšĮģīév9ŋÉŧ/Ķå’>įîŧ ōģK–AœëôtÃ÷ō=-7īįî{Ųî{<~2.ŠĶËÃįHĘĻķÄĄŽ4FéŧÉüž×erĨĮƒË;#ų)2|”ååņ€Į9Æ\›¤KļÅĶĐí:.YއņŊ<¯qÉsīĢžßĶ’ų’e{~|wîeģū%—d-_¨7OĶp`Aã ē=–ķØ#Ã?Ŧj\fČZM 9eã†Ųrí'Įū’ŽĢ—Oš§ã;&É4—q9ĪO¸žūčX3Å ûÄ5ZXÚčŗ¤ņY˛˛@PgŽ ßļ ë$ˇÜ6öˆž/ļĮĮûļ×Áã {Y´ÃˇËã’mD&voĢë'œŦįžŸt?HKędM÷Ēį‰Ã?6ĩ°‰Ėõ&ũä}ãz=>qIˇ¨…ik˛ÎÅęīIĖt-‚ĄPŧÃēŸ~ĒGr‹ôÖaąļ‹h˛ëŅ×^%šäĀā} „\Æ}ä|`AÎO÷p.tI#ŋ’Čxšø~NŧëãÜķy\ŌįœtœįOĻīaÎq.īņ„ũpFž8ęŒKƓßÛB|1åRží;V†éÂĀŧˆ U 5 ՙM+™ũ9˛Ō 1ĢÚFûÚ>|ęq›<âŖøņė\ĪĮ$WZBuA§õõĮä5 M „“~Ņęg÷tđnžĨ—´*QOރë BœįiÄųĩōv%å=8÷kīadpé˛į;<¯ëu9ęāqĩZ-î.uũ‡Ī‹$Žŧ8üdĐãũ1 ´ Åėī-ļFoŠÖŦ5:¤R¸¸#āët˜bm ’YÃZĻW˜˛ä‹č>ˆšn>øšc郞0î{Â>eáÖŌ°Œųá˛ūÆį@Ūô GŊœŊ~ž—p2Îu‘/Yoō’ĮéČz>qŸÔãēŧ.K™–MÖÕõËKŦI\KĻİœ˛¤€]ÎXĸ¨} >>ôvaŗģ‹¤Ā¯U}ų M/´?Bž˜*e=Sƒ´°“2ށ”Í5 ŊXY3ɚO>ÂM˜2‘Möޝģt"ŪûųHĮ%åbDøįũ$YĪëiø~Īuĸ|Ŋ^Iũœ#‡Ŗmäw‡<锓ē{œp˛,ĪĶRüE­ŋˇÜĶíYK#ĸ°X@xĐķįAÎÁ ÎÆ‚|7d5đ<ü“ƒB]Eû@R—ŒZČpîyđũÜķ“îÎĪŨ÷xĪã~:ŪÅäKËx^ütád™œģŖ‚„G IDAT žŸ'uëœA›Á›uˆ6H8×ÔIZz O׋ļp°F’ˇBˆĐƒ'kčo,WhtĖŠå3H;!į>į~\?}žsׅ\>—ÔUŸŒËÖwŨ“éÉsĪO9œ§ÃéxōĻķ“ĮãņũūMĘåkĮĸŋ¨õ÷EëēęŽ5kuĄŖ4!Đ|0`ĀãĀ2c…;?ÎũmŧP˛Ö€Ē´ø,ÉAˇXõk˜$3>x;YН^¤{ßpËaī;Ųי¯?OŊë돚HIŽvē\Ž´ÆlWsĶÕRÛģ¨õ÷æÖ/Ģ>"k…¤ôū6ʀĸ;âüÍ\dÍQ™?aŽ”ÍÁuæđkÉ5ö띯5ÉŧČCÖč'œŖĢ)\}ũ‘˛Ŋ Ūķĩƒø4öép.™ĻhWsŅ™nsŠWcÕ#Ųg…ūŪXínNz4 ÚœŽ†ę"„€B@Mķ—*DA! „€B@†! ˛Ö0ܔK! „€EA@d­(0Ģ! „€B@4 m0hn1‹hų$×_~›Ž.UüŧÉę̝ˇéˇôŨuá 4! „€B`ūĐƒųÃ+J'wIņۏ|så•WÎģ“‹ŨUß~ûmüÎÖ:ëŦ“-ą)H›×íƒ>ˆ? Îw›šĸœl#xB=ų`ėW_}eũû÷Zšēž”9}úôø‘Úb•Ų@x”M! „@YÖ˛PĖ˙ ß&²ļüōËį%jŽ™QŖFÅīąMįĊķÛnģ-ūžQåC™›nēiüŠ8i…˜¤.ō :4Zō kžVˆō6ĨķēPdŸarâäi…ÖųBd]/erŊę*ŗPčĘįCG>ŨŠB@Å­Ykā5g@æ‹åūÍÎũ æūs$•UĩqūÁId‘!¯Ī9nįwļC9$~o ˛åÎĶ=\Ÿīōî×'ŋ°ŌŊ~îRd9øy›{îš'‹cĄ:\Î}/“đK/Ŋ‰įét—Ëį{žŅ‘Oˇâ…€B`ņF@–ĩ¸ūLob؁œ…_o?|<į'qPKšâ6ÂūÁI/ÖĶ {ZĮŽŖČ Ã‡~§ ų­ž 6Ø ūž ō>ø`´J 2$~TsĀ€ļâŠ+f‰†ë~å•WâīöQOŦXŦÃņ“G¯ŋūēMš4)æßjĢ­â—õ™Bez2]ō›ož‰?Ą´ųæ›gô8*›ũ/— uđāÁqĢ!māwŊ}î˙ũ÷öîģīÆ„ŽŊöÚņ÷QûÃ?Ø[oŊ•%ĮûėŗOԇ•ėá‡6Ļ–{÷îmīŋ˙~Îz÷Ũwöæ›oFÜĢW¯XS/“×Ę=ztlãîģīۙŦ÷†nëM]ČŗÉ&›D]/ŧđ‚õë×/ʧux9ČË ! „€h"k @˜rŗĮ™ēŦ.ĢŽSd Yōøîœ¤3&’ ˆÃÖ[oe!T„÷Ũw_û駟ėwŪą]wŨ5f:ujŒÛk¯Ŋ"ɀ”a™s‡^ˆO÷îŨ#YÂōͧOŸ()ã7 ÷ß˙HåĮ˜s•҃ ũâŋˆyŧŒ¤Ÿ–qœ ~üŽ"å@,ŋøâ [wŨu#.CŲoŧņ†íąĮņ÷˙ûß˙ÚJ+­ Ö̝žIæškŽۃ…˛øøãmĮåĢ7i¯Ŋöš 4(b0lذlš¤Aĸ¨$wšå–ŗĨ—^Ú(‡¸tŊ?˙üs[ũõãIäG¸ų­OtÄ CTp#GŽ´‰'F˛ĐŖG% ™ˇß~;úcĮŽäâ‡ÃĸÃ8ÖÄĄsܸqqÃiŽ Ųøņã 2Č{â!#FŒˆS¯ūS3äÉU–1ĘÃ*õÔSOŲf›m–%'Év ')ƒ˛ĐIdŒōųasŦaŪn|ę ŲûčŖ¨FĖ÷ã?Æ|"ŦčÂ!OũqnąĖWoHeƒ'ųųMÎáÇG>âhžč'.]oęąŪzëÅë¸ŨvÛŲ3Ī<‰%“<žßũXÁđĪ1ō°|! „€ķƒ€ČÚü •’eP†0čs0(§fdpd=Lœę ô8Ļ(!XȰĐ@˛ 7L‹be­v’ĪķāCX\¯[ī% ËÜĶO?ÉŅK,At”§>äĄŪŽ‹´\åyÛoŋ}üL Ķ~Lšöíۗ,Y‡Ü;ėÉ2XĄ Yl$ Ū%œ—éuĻū”KŨŊø]ģvk͐GÖ į^g÷§M›6N¤Ņ~H2į~PĪ—Ŧ‹ëu˜Ž7×Īë~\kōãO~ׁ~OŖ<9! „€ E@ ˆƒ2Žé=H¤€=yxéČâ<¯Ÿ{ ĐĒĢŽגA 8X:wîĶøLÎI–8Î'L˜ë€D]X§ }&ęE–2ˆÄ +Ŧ`LíQņųʃŒ‡r˜Be “ĩ]^ooų]â‰%Ŋ´ËSą´ßëH^ΉĮâæį„ÁŸzģå ũȐF ˇ„sáDŊąîa]cCy™âõúēīXq} hčC6Yop÷zSOĻV!¯Äą†<ėžuŽ7¨B@! ˆ@Ųī˙ûķ˜wąÍæƒ0dud$'b„äH„Y éÂZŅp‡.yž×ļÚjĢÅ4ÖB1UĮZ8â AŌgŸ}×WA`X…n×'Ÿ|­]čĮ†XuëÖ-æAkܐĮÚÄ+Hr¤ŗč‹^Žō (O<ņDœĒ…bYC}8ځūĮ{,ʀ ¤Ž5q.>[š7|Ļ{ąœAjXŋÆkDBFŨ™*…PņĄa,Š|L˜BaŖũäE/ŒēSˆUēېQČĔüŦAÃēyc]ņî¨?ׅiXęN^ZŽzŗ)ƒ:P&8˛Š2qŖ¸Ž•ƒ5Ņ­kŽ“—'_! „@ĄčŖ¸…"•sË d ÅâtîēV&ˆÉ–[n „Ūč‚dppîŽtzHÎå ž÷ˆ› ˆC6I>Čãrč€XB(ĐãÄÄe°N9Ų$Ëu‚Ą‡ƒxd‰Ŗ,c2Í­^SH’;×IO§!į2øāš,×õx|RžúĐ.ôâhåxūūį!KŨŊū”I>Į˜vSG¯S˛Ū^ާš~Įw}íÛˇŸĢL—•/„€B`~КĩųA+%Ëāõ kÖ-é\ŽœÁ?iÍņAyΝhĄƒpڑî„*™†Â.ãiîģڒ.Ķõš y’ÎĶŨwš¤L2.YĪãžįI֋´d:uôôd]ü: #Įå]RqI=.ëžį‘/„€B !ˆŦ5ĩ‡8ML<œTé6i~įÎõā§ €‡ņ“yûŌ’‡ëÆOĘy|RW:ų¤Ë%K:ņ´ĮĶņ=.W™št"Ÿ,/yîex>ŌŧŦtáúōēĪëu÷z“ßËp]î{Ūdų—Ëw…ĘįŌĄ8! „€Ž€Čš#1>=ŽŠ´äÎÎųPŅ"E—Ų85J! „ĀBB`Ρ RTŦB@! „@~DÖōcŖ! „€B@,tDÖú%P„€B@!‘ĩüØ(E! „€ ‘ĩ…~ T! „€B@äG@d-?6JB@! „ĀBG ÕÍ7ßŧĐ+Ą ! ō!Ā/~ 8ĐVYe•(Ō߯ķoč}ûíˇöōË/ĮßÁÍWžâ…€ ’?ū8Ãoķ#Ųü€ĩ?ÄvÅTžB*++mȐ!ņˇu Ĩ!¤-ų|ûāƒėĶO?ĩõ×__ßKĖĸĒ! š<ßxQåwÅųYÉVDpđASōũdRs¨ŧę „Āâ‡ĪĻõÖ[Ī>˙üs›4i’mŗÍ6ņYņšÂæD—ŌW_}5ꂨņSqķŖgņģjąÅF€į‡s´’đf™™9sf´Ēņ#ÜrB@æ€ä*y`aûę̝ŒįÕN;ídü&/ŽĸåDmƌöĖ3ĪD‚ÖģwīhQË> gŋ¸6‡ļĢB@~% #Z|Ą>|x†)PˆV5¨ &! „ĀÂFŸI<Ÿü5jÔ(9r¤í¸ãŽÖŗgĪXÅē›?ĶÆoĪ>ûŦ­°Â ļüōËĮˇV†äį-VN!ĐđgĪ'ĻBKFŒ‘á!čëÕüÁÖ*Ģ:!°ø"Āŗ˛ÆÁķɟS••Õ6nüOöåđĪlË-ˇ´UW]5‚”‹°ųķŒƒļ>̝iŊz.,jĩoŦū暜rX|W˅€h.đ<ãž_(ĮŒÉ5?šKeU! OüY„Qã`tō´™6fÂLk]Vc%UĶėË·Yŋ~ũ,Ŋņ€|î|#AŸžk[ĻU'ĢŦ.ĩez´ĩnÚÆiP†ūpĖEú\—|! „@1H>"Y›0aBƧ’¸bTFe! ō!Āķˆg5–jŒžPao}1Å:ĩŽąNmkŦ[‡jkcŗė‹/>ˇnŨēe7¸> &Nœh}ûö ’mmōŒ2›6ŗÔĻU–ÚĻktąe{´‹S < }1¯į—/„€X˜8a‹ĪĻɓ'G˛ļ0+¤˛…€šđ)ЉSfŲ-ĪM°Ö%UÖ­}ĩ­štĨ-ŅĄv-dî›ož‰XĮÖącG›>}z\ŸÆÂ\ĻIã›i˜R˜8ŖÔ>˙ąĩM*/ŗĘL+;f‡ļD—6ҞĻ5kšŽ€â„€XØD˛6eʔ9ķ ģF*_!0ˇøã_ūđOöõ˜ ëŌŽÚ­>ËVîQ•Ũ…Ž#,é06@ØØHĀ&‚e–YfŽéMz#&´˛†ˇą)eļÚ2íėŦ}–ĖZÕDØÔũ„€hŽhûSsŧ*Ē“‘dÃĐīgŲ[_UŲ”0}šü[­W&’Ģøļ9{'Ķŗ>}úؓO>}'jI9ÎɏôĄũ8­U‹0čŸÍ‘ĩfxQT%! j€\Ũûú4Ģ Ÿ€ŦɔØv}ĒគĨ‰X÷îŨmŗÍ63|ŌŌé2âЃ>ôĸŸ89! „@sE@O¨æzeT/!°#ā›&O¯ļa߇)Ī€Å&ĢTYĮvĩ°\$ˉižžŒķs|ô Ŋč§œ—ú'„€h&ˆŦ5“ Ąj!0/o /0âÃON-ĩĒuNŧœ”Ĩ Z]éŽŖV_iÔO9rB@æŠ@ĢæZ1ÕKÅŦ\#ÆWFڔeÂĻ‚+- ä*l8ĀAČüđÍI˘§9Ą‹™f˙#}čU]Ë!/y䄀Í “ĩōY5aú`– 9ËFūTiSËׯĩ¯´š]_ÕG,Âdlä„ĒX˙níÃĻ‚Ų< ĸ儍Dq­\d-MĀÅĄ¯kĐ;~Z‰ŊôI…}õãOh‹iú'„€XPĘÂCfÉ.ĨÖĢK+ëÕĩĖ6îŨ.„ˤvžÉÚØÉUv_Xûâ°V>KėŦA¨+“ķ…@§vs?kr6HYšŦĨ qĸæņƒŪņĶ,ŦY˄ŖÖŠįiō…€‰/ˆ›¯ŅŪöŨ¤“­ŗRÛŦęäs+™:Š—Ŧņô7Ķ'۟f7=;y.’ÆŦÁRÍē´į 7Ĩ]A! „@# °âeņcˇiUI [:-N5ŌWëeÖēŪ§`Z“ÂB@ú`ļqō ŗIá¨ŨŅnöÚįåņ8rÛŽvčÖ]˛Ję#l%õ}×ÉÚĨM°>%Îvë­hļÍęf}—1kßF,Íq‘/„€B@$ßMČØ+_˜Ŋņ•YÅl#ū u:Ø9ûö˜g G2ŸŸ×KÖŧ÷ĩivĮK?Į<=ƒí×[AŌDĐDųB@! „€¨ÎØ5Ī™ŠĨTvÚîŨm—õ;ԗÍę$k˜å>›Nŋ‹…ˇfËt5ûã^%ÖA–´z•€B@! ŌĖëũ˙īĄŒũÖË23yķqŊâ_r––'œwĩ†ĪŸ>üvĐ\ģÖf§íTjÛ6Edލ¨hđ×ÄYŋŌŽ]ģøŖÍąŌú'„€B@f„<ꘁģôņš¸€M›'īÚ5N‡æ#l9ɚĩņ?WŲ›Ã+bˇčSbKwŗŲĀۍl>åé´tɸ™3gÚŦYŗŦmÛÚ]žæ~˛L?wŸ:ŋcĮŽ1:Wžt]Ķ2Ž?–į’Qū9¤ņJ‡…ßŧ}lzķĻ ŋyŸ5š0q Ķié°úßŧ}ĖąË…đS˙Ķø9ˇąŠ{Ķȑ#m˘16a›6mšuęÔÉzôč¯x…V°öíÛĪÃ'ú-[bë¯Xc~oņëĮ ędíۖÍ#į÷dN˛æ‰ī|U‘ũvÚļk–æ$eé‹įyņĶiép.Û-ˇÜb?ũô“ai+++ŗV­ZeŋĢ88?¯ĒǞ%–XŽ9æ˜,ŅËĨģōŖâŲ˙ŌōépŽ2 Í_YYiß~ûmŧ ÔŨuŋ˙ūûöØcŲzë­g{īŊwR]V&éų’qœßu×]öÍ7ߨĄ‡Ô:ŸŪ|ųŋûîģˆ{¯^ŊŦuë`V .—lޏ(œ=z´}ņÅąãöíÛדŖ_H~ΐK6W\>ų\˛šâ”ŋ46é0Ršâ„ŸđËÕ7rõ•\qę?ę?‹J˙ųņĮíŗĪ>‹dÍû-ūÔŠSã1bÄ5j”­šæšqüKĘp>°oi kĩÖ5–œmÜ'|V#ËKÖ B|S ×:|Ãmå%‹ķËT4HÆöÛoÉÚāÁƒmüøņ‘´‘†ŖnœģĪ9?Üėéu=~ųË_ڛožõđoå•Wļ]wŨÕ~ņ‹_Ø˛Ë.›oĒØ÷Ĩ—^j¯žújdā”ĶĻM{íĩ×"áüę̝ėž{îąōōrÛgŸ}\įŸ>ļsģíļŗÕW_Ũ ÕûˇŋũÍüqûūû@÷ƒˋ/žØ:č ׅkø‡?üÁöŨw_ģâŠ+ŦG…€B@4Ë?øāƒhXĒĢ>XŨĪ7Ø`ƒy[ŋå0‚Õ.ÃoĪ´ÂGsķņ—:ÉÚ¸)ĩä¨{˜U˧ ŽJ6$ +kĪ&MšdĮŧ-ĩÔR‘ÜtčĐ!ZxHs‹~ŌBÖŧ´éĶ§Û‡~h7ÜpCÕÔ˛ōä“OZ˙ūũí°Ã‹§įž{.ļÉëF8O†įˇ^Éŧéķd8Š÷™gž‰XtíÚÕÎ9ᜏvđŲgŸ$8_ždū|įkŦą†yä‘ļîēëÎW›x+šûîģ­K—.vĘ)§äS¯x! „€ECō…E@ÜÚk¯mÆ ›§|GyŒJL‰ēëÖŽ->ĩÆÎP~­N“oŦ‡Ŧ9Ÿ0u6Yë0÷<-ĄĐC°’qšÎͤLæ÷2‰s‹ŽŊöÚheÛ˙ũãŧ01@rqŖl挑÷zä*ßËđŧĮwœmŧņÆö /ØąĮk,HLģ’?_ũŊOOëzë­ˇĸū?ũéOqĒšsĪ=7[føésHV2/įžß}×å–ŗûīŋßū÷ŋ˙kģ–^ziëŲŗgv—(„Ō6yōäx0?Ėæ'zIũšÎcááiX{p3fˈeGŲģ랋Ũ~ûíQ†ô3Ī<3N—~ôŅG1Ž2™>eĒrėØą‘Ül´ŅF Ãb‡CWē|âŪ{īŊyԈwyÎ!’{îš§1•I\>ķāĖõ×_ßļÚj+ģüōËŗ°¤?w?Y†ĮásøÆ :k=Ūķæ ,(“ΚķÎ;ÛK/Ŋeு ×ûėŗĪŽf_°Ā’HüUW]•Õ™”…Ŧ‚Ũ;ė`/ŋür”ųá‡ė‚ . čˆų_ũõl~¯“ûÔ­ķt› ɓ”Qūšût›B΅ŸđKŪĢ…ô™¤ŒúúOsč?ŦÃvĮxųÉ'ŸČåT8|ÂÄ'-n䛧ūŗÕĖæ]NØfGgŊy,kžRKØf‡f“5OKúXĸX4>tčĐdô\įũúõËVpŽ„T€2Ũ:ƎPŦe’›nē)Ë8!eČ:ąs5i˛æņų|ä˙õ¯Åä-ļØÂ˜jÅąŖƒņŦ•s`aÅÄA截|ÂŦ7ûÕ¯~76`áCŠõYšÜ{ė-†Lš>účšTQWoƒ'¤ÃŋÛnģÅiP,lln Ž´Åm‡œŌáVZi%Ã:ÉúB5:yۓ /ŧ0ž/ˇÜr1ūįŸŽņ;/Ûe!d\püúë¯í„N01¤keAÔ!…Ë,ŗL6ŋ×IžB@b"ā͟^&5'hîCԒ–6dÉįc įĩZ;CāĩëņŗņŠ“œd­–¨ÍYVSv+$ĻS:Ŧ[ˇnņĀŌ•v ´ ēō{Ŧ9NÖ<ÎëB¤ Ÿƒ¸‘Ž\]e!‡ƒü`Ŋđ`]ģčĸ‹˛ųŧęâē<Ÿë÷xˆã^{í§ ī¸ãģōĘ+ŖĨ Ë\.šĸĖÛnģÍ|đÁh=cúëÎËĻn˙ū÷ŋŖÉ”‹ycSrXü¸čB„† ˙ũīãîOô¤ëëz!F^wä’nå•Wļüãvúé§GrÅtčá‡ÐręLY+ޏb܄āSÆč@§—É3Ŧ­>7ŸĢl—…čC Á‚Č.Tōnžų摠ąŲĶ1íôrâ‰ū ! „€XđyŽ´Kļ\D yōĨĮߚ¸ÚŦ–ą9ߙ‡Đ…ŧ9ÉJÉūsĻCk‚EŠö{k1"Įŋå—_>NI&“X§†5‹L!ŽF@&p%'h>°Ķ€ÚzՒÎ=<œŖÃ?5A\Úš~,w|2âÄfŦx^O'øįų¨q8ų SÄAZqčô|éō ŗqkãe—]­w'Ÿ|r´ŒņšH RĻčqË*ÂtܧŸ~jäu‡ĩĘËM××õ‚ĢËxž¤5‹Eũ—\r‰aaģķÎ;ãĩ8í´Ķ˛åB¤Ā!íŧLvÜrmŧœ\eģė Aƒ˛XŽŗÎ:‘ŦAJÁÂË@ÖuĨËTX! „@1ĀÅ8ŸtI‹šO‰Ļ-käKeÕ5í‚ÖĘĪų,YR¯Ÿį\ŗæ‰ŗšZ6X× ¤%ũé ĻÁ˜Ū*ÔAļ8h ÔIų‰wĸæŊë%žƒx—ņ´|ūI'dW_}uü–؍7Ū§ķÉ6Eü6Ûlc÷Ū{oüm{úé§ .y–+ĮGaxā\äĩ`…)AŽÛß˙ū÷Ŧ•Ž5g”éä‰kŨŽīéáŧœĻ(C:…€B@,n˜qIĸAàâ„ÍeđĶų’iΡōq˜œd-Ÿđ\ŠsøĖ†“3$T_áJO…&uxŨ𝴐îaOOæÉwÎē̃>8ZŗÎ?˙üŦUΧ÷ØD€cjŽ‰í¸pŦ•Ã1íY¨[uÕUŖ(+HgōHīē-TgZ+ĻOåō,‰ĢŦ˛JÃōÕÎb2í‰s iú Ļ)ʖN! „€… Āō.wŦÅöÍnIK6ŌŨ%ķy\Ą~ŪiĐB$å 9Ŧg‚Ø@„rÍģ&åĶį/d ̚O{ωrīŧI—ÖŸ+Ė‚|,GĻ˙°P1‡cW+V$v;:ËĨc~âX@Ī9>g1nܸ¸ö‹üL-ę8‏pöÎNJĻ!–´šN˜ Õįrlä`Ũá†nøûæ ž ĮNQ>Ą‚5M§žzj ŗvKģ9â°jbQãÚôđf3Žë@˜é^,āÆ´ēœB@……ã_āøndpßëaƒ¨yD ĸ†‡ŗBœ”AĖ’V3G/įū œĪƒ„üöˇŋ5,k,Žį“ÖąaA‚ȝqÆq܇˜ IDAT3!CæGuNYˆkÁøI- ė!A˜Q uŦaƒä°0ŸŖˆrŖBõšÄë‘G‰ˆÃ2Ęæ ~Æ ‡åôú믏ëŲØĀ1üŨī~×`˛Æn×ŗÎ:+N{ĶwØláĻbŦŗi:=ŋ€Āub᭜B@……kŪ™áâ Ė<9!K×Įãá'Čûīž§å —„Ī@ĖŲör0ØģĨęė{&Ų§ŖkŦwĪj;uģē7RX}2v=bMtĨ-sNDÜâæéÄ3ũĮZ'Š/šä’õUP:V&v66ÖÔĸ:qâDã7Å`Ų\ÄqLOŌY RaũcŊ o ´Ų§=sÕKĶ“ē†āÃ&‹wß}׎šæÛd“MâîVÚā×4Y&×+$eåJOĘę\! „@1āķ^Ė41fæsŒķĩ|S WŋØÎž_fũ–-ĩËí /Œå鹎Ņ-kų*\H<ÄKÖĩtEĶųĶé čX—”ü$Ëq O2Ž1ÎŲ…ĘŅŽMū‰ŒÆĐ‡5 kW}ŽīŊq4†ãēņáã|Žk ‘“B@!Đ\€€aĐa|‚¸aāÁāÁ8  ˛ļ 5okŗ"k°ÉôŽR¯¨ü–…SÍūų”–Õ2ĩF! ĮVß(åhJ×ŦČZS6Tē›LƒĘ ! „€õ#ķĶõg“„B@! „@1Y+Ę*C! „€ D@d­Ā)›B@! Ё@AkÖ&L˜>ŪúR1ęŖ2„€B@!°X 0Ą|ÛĐÎúíŠ ˛ÆĪ˙œqä‹pj¤B@! ЁĀiwŒĩIßÍŦˇ(MƒÖ ‘„€B@!°đY[xØĢd! „€B@ԋ€ČZŊI@! „€ ‘ĩ…‡ŊJB@! „@ŊˆŦÕ ‘„€B@!°đY[xØĢd! „€B@ԋ€ČZŊI@! „€ ‘ĩ…‡ŊJB@! „@ŊˆŦÕ ‘„€B@!°đ(č ^õŦ䚚ûüķĪmøđáÆOfĩnŨÚ2™L<Đ\RR NᖁĮ헗ZYŲüŊƒ”„ËßséŽ6hĮ•ė—'¯míÚĩŽũA˙„€€ÆĨæ?î6Įq¤Å’5nˆ§Ÿ~ÚJKKmīŊ÷ļļmÛ6ö='}́Õ7o+/ÕÅJ‡‹‡˙ą–™ZĪ f¸@Ųi7Ģ˙ĒĒ36ö‡ŠöĀ]CėÔ_ŋh×Ü>(ô—{kÔ ˙B@KE‡ŧA6ĮqdūL jöÂÉôÉ'ŸØĖ™3m×]wĩ6mÚÄJ`IĢÄČk…į`Ņđ7ËŦlĩÕVļŒ/†ŧāvÔQGÅ%9û„¯%tĐA‘FūÆ0ũõ¯Íę?4Ė”1æ’ÆrĻ;™bŧf<ŋũöÛíûî‹3i;î¸cßW§L™¯ÔS~û[=zt˟oÜd\ŧ<ŒoŒcƒļŨ6ö ŒĖd c(3uq&)ÔÁĮí\í÷öú¸ÚĐpsGͲļņÆÛqĮg[oŊĩuÖYöûß˙>~6ƒŪ 9ûúë¯íŨ@.X{v_¸¸§Ÿ~zŧ ÜDŧaēūã˙oĒēzüE]”]W—ŸėĀ*RQQHÛĖxm$ŅRÂgXŊföíˆomŠĨ–ФnV vX™†m,0/žđĸ]}ÍÕvá…ڍ7ŪdãĮiS§Ną‰'Ų;Ą=ũ×]7X枰sÎ9×î 7‹wô?ņÄä ĶųxPüõ¯ąōō ;øāƒc'\sÍž‘¤°˙aa‚ŇËá‡˙ʖYziûË_ūbGũkÛ~ûŖUoÚ´iQ?mŋ+En–gŸ}ÆŽšæ°ū€˜ß˯m/’sÚ[ûĘŌrÃ?L –ąq•Ąī…Ö‡W˛\†ąĀsãÛ˙°ŦfŨÚÔō[ō´o´Ûđ儀˜ƒ8Īśnē)æDŸrĘ)qz”—õ#ÃėħŧŧÜ.žøâøōŋä’KƁYˆŅ°aÃ"yČ5[‚ ŗIƒĀwß}Ÿ“<ōH$$<+y‰Fîũ÷ߡC=Ô>ūøãHÂ.¸ā‚8>UTTÄĖŨ¤I“Â÷ÛŲ2Ë,Į7–θeĩҌ]…¸BÆĨ#~u„­žÆęq“Üi§fģíē›UĖŦˆdæ•W^ĩK,žW5aiPí¸’|Î˙*ä]cõ÷ãĄFŪ]C^Ō1¤ŧōĘ+öĐC[—Ν#q›6mĒ=õÔĶöchįqŋ9.|‹ô§@˛ĻÚ¸qãâ8čú!Z´Ÿ0įŒã,múá‡QÆ8Ų~ꊧâRĸøŽáŊ÷Ũk:u ŸĪz&Œ7ØwÜa'tbãæ 'fæŪ´ëŽŊ.ŽcĪ=÷lŧ.O<ūOéЊ°œ%Ô/Ų^Į{\kŽãHŖYÖč¨˙÷˙g>ø`ŧ1`Ū°[dƒĩ­oßžņ‚Ī.n¸ķÎ;/.ę‡Ŋs“ÔåÖXc ë:[}ގ7Ŧ}Üøņ|v¸´”pŠ•†&ŋũöÛgÃŧž={†ˇŦƒŦ}‡övĀØë¯ŋęÉ&…ÚÍ ä‡ wöŲg[ĮŽâ›$ōH§cņæČۇ—G~ô-ˇÜōÖģwīHĘĶ ˙0ú‡ø0ĄŽãÆ]Ą~ŧYžwŪė˙{ÔZĩn•ĐoSę°Æ}#‰DŪË÷ö-ná6ģYWV—DŋŠķ0ĩéĮĖpN\Uô-ėZ0ÂŲĖpT—”YېŋDÅ­īöRēhXÅ Ė$øĻŗÕš€¨A€œdĩoß>>ųF&/ķ<ĮpO#váã" é~īŊ÷lƒ 6Ȇ‘!/:\†8ŨĮC s?4(Īë͍›ôŌK/5Ļky+tĮ‡~ŅŁnōāģŖ=‹[¸}›ëÔļˆh„=wŋ}2øŅÚpˆīŊá °ûQņ}­&ˇęę°{4<,ĻĪŦļ˛mBųB@4"|`ĩÕVËjÄâÃԘ3Ī<3>ហáKØ?˙ųĪhųÂpÄGDÂÅŗõĒĢŽŠŗŦ7fZ}ÎĮ äķ0‡į%ĪŪäķ9-ŗ at×5.AV øãΟëŦébZ”Ų›3Î8#ÎːîĪyōîŗĪ>Á‚uR6/呎ã{Ŗf‰žßĮ&|pr8§„“įÉ0ņäķļA¨÷Úk¯ÚåEĄ|ÆOä9ō›^ގ"ÍLЍz|Ĩ¯)x}cŖÂŋĻ7Įq¤ŅČ;ų´oD\ü•VZ)2c5í3˙δč7ŪIK:=W˜i@ŋđšŌ=ŽŽÉEOv2ŌčT8æí1…/ˇÜr1ĖEGž€XɈ‡ ayŖƒ‘F‡Jvļd‡%ÍÃt˛wŪ9ĻĘũæ›oĸĖüŧMbqdz•š|N´7;æÚ)‡]°<Ė ĩY׏>Îũ@7ō8oíYÜÂZ‡nģڇŠ›Ácƒm÷°×îũ‹M›đŖĩëØÍ:ëīÖ9XЀ¨2l.¨ ģ‚KKkŦc›p ĩf-öũM3 XĨ°Ö0%Éŗ_sôë_˙:ÆXãŽdį#/¸<7GŒ§ä !kųځž‘#GF̐?ŗ‘]"L5bLĀ}ņÅÆg—˜ĸÅąaŒņÁufFĸWŸĢo\bŠ‘Y֓ą4ŨŒ+>KEäËØG]>ĻĸG<Ž4ÂL3SϏ]Žį°Ÿãö1•0ĶŨ?ũôSVK’ˆcŠ™5mC‡ĩuÃ˛#ooSŽsÍqi4˛ÆâÄ?üáq $öY”ßäĖį`Ë|î+ß›8qbü‰¨|ōÄŗŸut†ēo ŪŠđ9p~9įAōDįMŪÜX¨Š)—ˇAâŊ3rŽ>tåę¨čÁėËôާG~H-7ŲG}-ŠZíaŊo,ʤ˜ĒYøI>ČÛ9įœ“ÕįeŖßۖ,+*] ˙ul[,km"fáō„kŽ€Cį=íĀ“/ŗÛ˙t„ísë— ë>j×ĒąÃÂVVVefĩ˛ÎæX‚CÕd!P4xĄŊâŠ+â¸éâāšÉøĄXuÕUãú)vŽâx&2ÎĪ3‘ g ę˜ĩ€Az襨Žz@d ’l>`Ŧr‡‘ī\˛9áļ°Øž5tl@`ĶA}Žžq ‹“ü5īTŲ˛Ŋ†Ąû…e…ŅšOGôWØGŸĶÃũ_KØÂŌʰ14ė­˛o~˜l?}ūŠ]~ØĘņáåØÕjŌ! š60 30E׹cĮX ĪrHDŌ1p#…mAÖ$6`9BĪúôũîõĘUV BĮŦų—Ĩ\Æđ`\ęXũp^×ô8Āx–Œá`é_fČ' ŖČ)ú8ˆgŒJ럟0c×+‰m}ų™iWęK^ÚÃĩÎW˙úô5$Ŋ˜ãČiwŒĩĄßÍ´~˖Úe‡v„ÔIm˛ß5*Må­!š!YP]įŠB;}]zHã‚ŌąYÜĪurĶŗ_l÷ąčaÅō°_TßĀĀtĢëÄ÷ô´|:ĖÔ%æ_,tÉüI}Ô1­/™N^O÷›ÍÃéōŽeeāĶŊsø‚îaG kĄ+ÔļŲ¤kqÄ9g† YKŌž‘đb΃žkÖļŧ•ĩ ']§}úĐZŲ~/ĸū !Đd@.pŒîŌDx^v”¨š~÷Ŋ|ģŸ/žôųŗxF:.ņãųOžä8@xųå—ĪŽ ųžûÉq„zæ7ūķŸ˙ÄĪs`šc',›˜bLĘSßd8_yšô“/Wũ ŅĮŒœįĮ÷ņ¯!å“ŋŽúåKoŽãHŖ’5Ū7;74ëÃXwææZŋØ^ĮôvëtzCÃ|+-—k¨>×Ĩü Ö@ɅÆŲnŦša×s`UKžGs2¤-AÖjx ũųK[žgÕ\†ã/_–ƒDÅŋßVŒV:.åzŽ%ë×é,¯Ų.,Ŋaę—)_,9îCŋëÂ_õ5Įq¤E’5:kÛØ¸Ā÷ŨX—†•-ųƖėL:o9´īvsԜ`-ƒER6ģyÉķ’đų\YiøƒYÕ6vøHûüålúŸÚ!aŊLōá5;ģ}ú<åՕ–^}õÕíƒ>HFÅķųm–7OrD´Ėr4ką‰:ãŒ3b6mډßÃũôĶO-YĢ+-0Ë/ŋŧuīŪŨzõęeK-ĩTVdčĐĄļ÷Ū{Û¨QŖėˆ#ްßüæ7Ų4ˇ˜ 0 ÖÁÃ.O§§ËB@š(*Yã ũ駟ļC9$[‹wŪyĮ6ß|sëŲŗ§­ĩÖZöß˙ū7Ļ]{íĩļÆkØ=÷Üc[mĩ•mąÅvīŊ÷Æ4ˆĶE]dX€.¸ā‚x<ōČ#Y~’.oÖŦYļÎ:ëØškŽ­ĸŋ˙ũī1 Sl”`PÚyįã€GB—.]Ŧ}ûööä“OÆMÔįžûî‹yęJC`đāÁŅ*A}ËËËcū5´ -ĪëqöŲgGŌ¸á†ZŽŠÕE3H֟}öŲ'bŧ˙ūûĮđŽģîÃX57Ûl3ëĐĄƒ­ģîēļãŽ;ÚįŸĶ^xáÛi§ rA˙Øk¯Ŋb|}˙ōõ]ōåĶÉu _÷īßßf˘aXύ÷…^X_qņzåęŸd„œíšįžļūúëÛ­ˇŪjmÛļÍūÖi]iõzŨu×E=ūퟭk׎Yņ[nšÅļŪzk{öŲgíÅ_´sÎ9'›vėąĮÚ AƒlōäÉvôŅGÛĻ›nšMã$ŸÎš„B@9L™2%“<~ūųįL°3ãÆËuÕ™MĪø,sėõßdÂ`Gx`‡Muģ0 eūöˇŋe…ÆŽ› S"™ģîē+3sæĖĖķĪ?Ÿ ođ™@"ĸLx2O<ņDæÎ;īĖ,ˇÜr™Ī>û,Ļc2`eŅĘÜtĶMņxųå—ŗzũ$]ņ°ez÷îŲrË-3a@ÍŌ” V‚˜eȐ!™?ü0SSS“šūúë3ŋũío]U&XĀ2m´QĖķŸ˙ü'ŗŌJ+e ĶëJC`ęÔŠ™@đ2_~ųeV߂´Ą!åQpØFœ ¤7Ŧ!ķ@J˛õņ“E3Žë +ŦáâĀ|å•WŽ>ũ™~uÅWÄ~ˆ}&ėâÉŧúęĢQ–ëĻōâ9}mˇŨv‹įuũ̝īÖĨ“ōéד&Mʀ÷yį— –âēŠ‹iuõĪ@øbû)Í~øá™p‡g~üņĮ˜¯Ž´z Í#đūûīGL>øāėũš}ôŅG3;wŽíã~’B@,ę|ûíˇqü„ņü†Á]ÂrĻø į9fbœ¨>ŪD:ü žßB/ã<,ÉË8ˇtDS‘ĩ`EČ‹B<ũ‚AĀ IwōÉ'g8p’§žz*›|Ųe—ŁĀYqÅŗié“\åšLX?–ųâ‹/<˜õ?účŖLXĶ“ ˜HŽ‚õ)›–ŽË_ūō—L°&ÄôēŌ\Áį"kÄ7´ -/ŦĖKeŦäō›t‹:f_|qæĖ3ΌMĸoũîwŋ‹į<đ@$GÉļB& \¸` ĘK[&X3Ä‹PR4įy}}ˇ>\îˆUĄ._˙äåf›mļÉĒ ĶŸ™Ž;fƌ‰Tž´l†ž€÷d°DGĸčj‚9A|ķÍ73ĢŽējæë¯ŋö$ųB@E…I֊6 zĮwØ`:uƚõ˜\rÉ%ŗaN'§ ™uĮēžs⎎ÅųšĘķ|øéõcĄ÷Øa‡foŧqœîüë_˙ה%ķ¤ëōņĮg“ëJË å8ihZ^°vÄZđ˜’’’šj´¨cƔ[°zZ°äi>ūøãcûrõ3Ļ éO8ŽuxA°˛˛2ģũöÛmûíˇņuũËĨ3ŲwëĶŲŖGøĻĶkēr•[W˙ [ Ä;›){ŋÎuĨe34ā$Xí[ˇnvÖYgY°ˆÛÍ7ߜÕŌŽ];ģûîģãô'×#ŧTeĶt"„€ķ@QČ›n¸á ͊sÕ0X›âƒŪ׍?>>䓃å•W^wŖAŌnŧņF Ķ.QĸcM Žu9,zÆå+/&æųόâ‚}÷Ũ7J™´ S¸X" YČ@˛žuĨĨõxxAÚАōŧÜ\~KŒĩ†›l˛I$_•0Ũ›,KqŊ×{īŊÃaŠÔN9åûæ›o˛éÁZiÁ2gÁ ×B˛žŦ.W_ßĨĖ|:Y?ĮZK>šČzŽ_ũęW‘`ÖU^]ũâÉZPÖABęnģíļØGŅWWZ]å՗Ļ”íĀ´|ĐØĩŦ ķ?IDAT’ū 6×Į:@úšœB@4ĸ5ˆƒ—[2ŧē,´æ ũ„Nˆ› X Ž5„AĀ0Ŧ]lØoŋũâBpOcQ3 ĩÃTK´Š…9䘔¯<k61@üČׯ_ŋ¸8šLË,ŗŒmˇŨvļÚjĢYXûO60œ~úéqđûä“Oĸ%Šú ͎oßø Æ|ičĨŨ”Ãbt6-pūØc‘ŨüļĄĄåŊũöÛqS–ŠŠŠhüņŒõh ˜Ņ^Î=÷Üh)‹ ˙ÂúÂx ŲDĀ}6´°ŸxŸž`ķ› āėVf#B]Žžž›OįÃ?‰MXn7­`ŨdŗĘI'TWquöO,\—^zi$fË.ģlė_ôa°¨+­ÎëIŧúęĢcyėåž!,'„€Mƒ@I\¸–Đ͛9VĻfΞg’}:ēÆú¯ÔÖŽ:rÎļũ„xö2~ģöDvtBZØ˛ŸĪ1x%w›!ĮŽÅ°f-î͗žÉéÕBĘ˧K]XrɄń1šÁ>íęJKË&à mCCËK–íį-3o 3|Ú1=Šõ6ų døÄ×ōĘ ĶĄķãrõŨՙ¯üēú'íÃō AKģēŌŌ˛…†iã;ė`amZĄY$'„€XdĀĐã?3å~]?7å3 u5ø´;ÆÚĐīfZŋeKí˛CģĮ™Æ ô2ĨĸĖOzčĄuÕ5ĻĨ‰Ÿ8=z´1Ũvõåũ.ŋÍőt…”—”Ožįč’éšHš§×•æ2šü†ļĄĄååĒCKĀĖە‹¨‘ÆoˇĨ‰ņNôąŽ6ÄĨûncčĖWēú'í˗^WZž˛ę‹ĮúČtޜB@4-E!k i č}j…oĄÉ b"ĀÂ˙#<2o‘ásqz>¯Ābä{urB@!Đ´4[˛Æš09!°0ā'‘Âg<FŅ*S! „Ā\eƒÁ\%* „€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0"kC%A! „€B@‘ĩâcŽ…€B@!P0­ –,@đĨ—^*@J"B@! „€…"Đhdm“M6)´LÉ ! „€B@ˆ€ĻA JbB@! „€XˆŦ- ÔUĻB@!  D@d­@ $&„€B@…€ČÚÂ@]e ! „€B @DÖ JbB@! „€XˆŦũ{įcU•Æņ: "ÔE#YAÅnVaEcŲU×ŪbL$ļ¨Q×c,ąÄŠKė]ēö‚QcīČŽ;4*Ea€ĄėüÎã>ۜ7īS`æ’7÷Üī|įœ{~÷>îŸīœ{_[PWŸ" " " "P!‰ĩ AÉMD@D@D@ڂ€ÄZ[PWŸ" " " "P!Š^Š;eĘģė˛;+lRn" " " " åLŠŨšŪe@97ĢHŦõíÛ×Fī0Ú:uę´Tƒ‹-jd[ĘĄ~Į}|ËsļXNŪ}|ËsļXŽúâį׈oãõ‘ŗÅr]?ē~üņmŧ>rļXŽëG׏_#ž×GÎËuũtŒëįŗWzÛ´_‹Ī|ãũŠÄZuuĩõėŲŗqí`Šä Ē_^ø6‚ â'~Å˙™ —GŲŦŽ]?ē~–F”ũŌ}ôũYŪīúĒ’TĄX̞ŪŊ{§öâEéyßâāyßF[Š|Î7gSũ%|#‹̜-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æĢĢëØ-›*kUUÕÖŊ{÷4åY|ôāŠŌËØzĸĖ÷=ũU_üâõā׈ޟČÃķ‘—ž?úūÄëÁ¯}ôũņt˙-č˙nÄī‹3bÛVúĨĒja}ī 8„&SEb|€ž6īÁË|[l/ŽSƝ”]õ—œ‡bq_ü–žÎˆųdûâ‹/’sĘëiˆčĩ6_į ­ˆ€ˆ@û'0{ölëŅŖĮ2 tĨˆŦ1ĸīŋ˙Ūîģī>ģįž{lذaFԈÄÍ‘sķÍ7ÛvÛmgW]uUZoÆMú†n°Aƒ%šGˏéû:.ĻYúé§ėĩũ÷ß?‰Ļåˆz‘üq{õÕWíÚk¯Mâoë­ˇNö?ûÂņmšå– Q4ĸiėc÷H"ĮúÔSO%ûčŅŖ ‚˜>|xâ‚ā€ÁZk­•„ūķæÍKųķÎ;/‰S"”ûėŗŨu×]öä“OĻC‡Q<Äː˜Ō.ŠĨƜ_ü‡ķĀx›đfĖžnīŠ+ŽHĸ•sĖŧņãĮ§Z¸ŸūŲyäÇ1“˜JFā"ZYˆ'ņq~‡v˜­ŗÎ: 6\z9Ü[‹o:8ũh÷¸ąÔjYĶJ#ֈž ,DĈƐ^zéĨyâ‰'RkŠˆ ‰ãæũâ‹/ÚÕW_ŊÔ4B€)æ“!üņĩ_]ģvm¨?¨^üQ‡cx÷ŨwmĀ€ōŋéš,™EŦ|\Ĩé›hÚ{ėaGuTZÛÆqÔÔÔ¤õ‰†ų[‘}œˆAĸqDÖ\sMÛ{īŊ­K—.F”ŌĶę̝žĸiLERī—_~IE-5fīˇx‹`#q_ũõ$6YĪĮųį#\ $"­?ūøcŠšQî/n&¸Á$FLą:4ų3&>DāvŨuWëßŋŖķOykķM§?" " íšŗ>5îŨ˚VąF”ƒˆ"Äא!p˜Æ$*ƒLá~úé†č 1åGt…Ķ[ß|ķMG ”•ÜąÃ´+"ŠÃË/ŋŧĄÍ?“ˆ5Ļ#ID^{íĩ%ŠĶ­L‰"P&Nœ˜D…—q\D˜(+Nˆ=քŠb[^”cšÔRcö~9ˇL?ž˙ūûIü~đÁiíŪ†nh[ląErãÜ1ÕģíļÛĻČ!FÖéąĪt7į.\øÁŽéjÚfĒ4ĻR"Í}Z›¯÷Ģ­ˆ€ˆ@û#Āēī(ÔĐ'ž.ūÁ§Å“…nn´mōƒ^Ũ jmúėÅ­5ĒŪēn˛ŧRãŲgŸMO†˛v×Z :|Mž$dŠ‹ŠJD7ōwŪ9 ÚØsĪ=“Øâĩ„#=z• ëÖXÅ/ÖFąŠé8ĻH},ŪoŽÄqņÔ'ŅÃĶN;͘ze\ˆ‘“N:iŠ.Ķ\ ŅDÖW‘˜žäaÖcQÎ4§'ĸf´ĪÚ;Š rÄ+Q|=—ûåļ-5f8?üđtžˆžņĐCd-åđ įqĘT&B›)oÆļÉ&›įŠtâ‰'Ļ5ˆU†7{Ę3‡+_|ų°ĪÔeôMģŧŒzÅĶlŠ“åüÃąpDšxįũŅĮɇĩjŧÆĮ1Á†ņ’8.X9cė$ļ”sNYĪFû\<~ä8Đ.;įÍû nŦO9[kķå8”D@D@ځJ„ÚW?×&K“ūŊ âŦX¤9‘ŦXsįĄ;[ˇ.smN}@녏įĩ™XķƒíH[CqâŧđĻ}ĸAJÍO@|›ŸŠZŽF€Y ^+æ´\D &ĪM*Ėö1{9bpVŽ5 +9IʍĢ{M•m7¤ öŪūržMūnIĒĄeZ•ĶŧūJ‘Ví¸ƒt&žäDk˜" "Đf•ĩĻ-°—ūWk#ūbÖŋwãŠĪxxYą†PķĪŪÃĢ­kįB”įēgkmÖÜÆŸØ ō-K qkŲ;VëâÛąÎˇF+" ÍE 8‚Vŧīũ Ŗ.ž0;ÍZÖ¯ÖļŨ†„šë.÷‹ÛėܰX'Äú)Ö =ũA­ŨųzA× ė[e˙ūG[ģoaQxlLy<f( |ũ4Ŗđ{ß˙žĐößĻ{š1cŊš?\€p‹)+Öp@ŦบEÜļq/ˎˇž.´nõKĻū6´Æū>ŦƯ.ҁ*/" " " N vŪĸô&k˙YRæiä ų6vT—$Ôx€Žõčˆ5RYą†‘5žä‰Aĸk.ØÆŋˇĀū3‰ÅíK_—úvy?HߞŌ+>¨¯$" " " īŠ:}ĄųËoáÁŌ˛}ū:×FmÚšA¨ņ–Ū^Ā+ĩŠ…uEÖ0"Ö|*”č¯>@°ņ!„7ņĶÎ6yj—úLj6ę)‰€ˆ€ˆ€ˆ€4&ĐĩzĄX¯ÎÆ ­ŗĩúÕ¤×QQC¨yT­Ôēĩ’ĪŠR…‡Ō#ĘÆˇé:f˜gŋü^k˙ũąŗũ6Ģ“MĢ­˛™sĒ–RŽSčgõ¨Ydz-°õû/°!ZĪnŧ\ŋ& 4Ö¨šH+QsR%ÅQ°!ÔĸmęēúGMԋ¸Âb{yrŌčā AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx add "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID AFE7E851-18EF-4A7D-8B08-8F9C64823033 Keywords Shell Script Command Run Unix OutputUUID 8D14C1FA-264D-4E60-99AF-82B291989742 UUID 7477CE01-28C1-4749-9A53-8D6F445B5ECD UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{191, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Annotate.workflow/000077500000000000000000000000001445560650400251305ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Annotate.workflow/Contents/000077500000000000000000000000001445560650400267255ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Annotate.workflow/Contents/Info.plist000066400000000000000000000011711445560650400306750ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Annotate NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Annotate.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400306265ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Annotate.workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001110341445560650400332570ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëViCCPICC ProfilexÕYy8U]Û_ûĖį8ĮpĖķ1Ī2™įyž Į<ĪCD"‘Ą”D‘D*C(eLB¤"’(¤¤¨I!ßVĪķŧī{}×ûß÷Ύ¯k¯ũÛ÷ē×ŊîŊ×Ŋ×ēkĀžLˆAĐek¤KqvqĨ`§pČ@„ęĄcmmßũ—cũ€vĢFĨvmũĨ˙&fđņö˛†ŧ|ĸŊCa| „ŽwDT Č Xū$>&ƨ0fŠ‚„ņô.ö˙ƒWvą×oŒFũÖąˇÕÍŽHĨFų@„å”8oØI 9Ė'0 FgkzP}`? ëH†††īâ^‹zũ›˙ÃTĒ×?6ŠT˙đŸg[ÂëFG„P~ßü_Ą!ąđûú}á’bš;6,đščCÕ7ƒ¯\đų+"ä÷˜Á:‡o˜ƒ,ÛŒa^–VaMŋ(C[Ãm!ëˆŨ] ŋ3Č/"ÆÚū/ųĄÄ=Kayo´Áßv.QMwĮŒ–7FÅÚ:ĀXÆ]Ņqv0†# z“`īô—ʏ¯ū_rÂ/ĐĐ䏂c˛Û<æüÁáfģ>Ā}!”€ž DÁeæ@č˙UJ?@…kâāēh ` ˇ‡Û„Øō—žŪ˙’ūnįˇûO‹ā ëÆūĶįŸŪ(pŸÛ >0ū[N…ûØ­Ûõ.Ú#0í_}ū­ąkīˇ72ĩ2īeļūö %Œ’C)ĸtQ(M”*  XP@ Ĩ€RAé ´Pęp*0o`Ëūû¸k?´Ņ/îlx‚šc\ģûė^×Įßځ˙Ü˙/@āĐrËōßã{ūĐ Hˆ ôˆĄčĀ_ޝ$Å$Ė[Z’"'#+ģ[ũ˙æØŗū8ģjû{.‚X†˙% P@},ú_˛Āj?Āįø/™`ūâԌxĮFÅũą‡ÚŊ ĐÁĘx€…ßŗPę@S`ė p‡ã'ŽÁ(’@*Č9ā$8ŠA¸Ē@h- tƒû`<ã` Ė‚ˇ` Ŧ€u° A"AŒ;Ä A¤iB9d š@ž?ÅBIĐ(ʇŠĄr¨ēĩAŨĐChš„æ ÷ĐWč'‰ "˜ÜaÄ„ Ba†°GėGø#"‰ˆtÄ ÄYDâĸŅ@Œ#fKˆoH€¤A˛ ųRH¤Ō éŠôCF!!ŗ‘…Č d=˛ŲEÎ"—‘?P#Š‚’‚ãÔå€ōFEĸĄrQŨ*T3Ē5ŠšC­ ~ĄIh.´Z m‚vFûŖãŅčBôtē=Ž~‹^Į`0,Œ2Æ゠ÂÄäbJ1 ˜.Ėfķ ‹Å˛c%°X+,ƒÍĀžÃ^ÃŪÅ>ÅžÅnāhpŧ89œ!ΆKÃâjp¸§¸w¸M<=^¯†ˇÂûāđyøJ|;~˙ŋI` ˆ4ö„ B*á,ĄžĐG˜&ŦŌĐĐđ͍ԨĐŌĻ9KsæÍÍ"™(NÔ#î#ÆO¯ģˆ“ÄU‰$LŌ&š’bH'HÕ¤{¤W¤ ZFZiZZÚÚÚfÚ§´ŸčđtBt:tît‰t…t7é†é–éņôÂôzôTúCô%ômôôßdŦBrj2,’ąda˛Ų‡œNžDžGžgD2 0ę1z3aŦdėc|˄aa2a bĘaĒcbZa&3+0;2`.ažÃ<˂df1a aÉcidyÆō“•›U‡Õ—5‹ĩžõ)ëw6N6m6_ļlļļqļŸėvö`öSė-ė/9Pâ6ņ8ú8–9™8Õ9Ŋ9ŗ99_p!¸Äšlšr]âäúÆÍÃmÄÁ}Žû÷2 6OOO'Ī{^F^MŪ@ŪŪģŧ(ĖJå,Ĩ—˛ÂĮÅgĖËWÎ7ġÉ/ÂīŸÆßĀ˙R€  "ā'P Đ#°"Č+h!˜$X+øB/¤" T$Ô/ô]XDØI8S¸ExQ„MÄD$Q¤VdZ”$Ē%)Z!:&†S +{"ŽW/–@H(IJ”JŒHĸ%U%Ã$+$'¤ˆR:RqRĩRsŌ,ŌæŌiŌ-ԟöîqŨsjO˙ž_2Š2!2•2S˛dYSŲ4ŲvŲ¯rârŪr%rcō$yCųųVų/  ž ž+2*Z(f*ö(n+)+E)Õ+ŊWTöT>¯<ĄÂ¤b­’Ģō@­Ē̚ĸÚĄúCMI-F­Qíŗē”z°zúâ^‘Ŋž{+÷ÎkđkP5Ę5f5)šžš5gĩø´¨ZZ¯ĩ´}´¯hŋĶĶ ŌšĻķIWF7JˇI÷ģžš^˛^—>RßH?[Ȁlā`PlđʐßĐß°ÖpÅHŅč Q—1ÚØĖø”ņ„ ˇ‰ˇIĩɊОi˛i¯ŅĖÎŦØėĩš¸y”yģÂÂÔâ´Å´Ĩe˜e‹°2ą:mõŌZÄ:Ōúļ ÆÆÚĻÄfÁVÖ6ÉļߎŅÎÃŽÆnŨ^×>Ī~ĘAÔ!ÖĄĮ‘ÎqŸcĩãw'}§|§Yį=ÎÉÎ...­ŽXWG×+ŽßÜ ÜθŊŨ§¸/cßŗũ"ûėčÎáâ~ĮƒÎƒęqĶíéäYãšEĩĸVPŋy™x÷ZņÖķ.ō^ōŅö)đyīĢá›īûÎOÃ/ßoŅ_Ã˙´˙û­€Â€å@ŊĀâĀ/AÆAeA߃­‚¯ī„8…4„âB=CÛÂČaÁaŊá<áÂG"$"2"f#Õ"ĪDŽD™E]‰†ĸ÷GˇÆ0ÁÉá`ŦhėŅØš8͸’¸xĮø›„LOČJx—h˜xų ę ÷Áž$ž¤Ô¤šdäōCĐ!¯C=))é)oŽJ%¤§>N“IËO[;ât¤=;ũpúüQŖŖĩ´Q™ę™eĮPĮ eÉgËú•í“ũ(G&§0g+×;÷ŅqŲãgīœđ;1”§”wá$ædØÉg§´NUå3ä'æĪŸļ8Ũ\@)Č.X;ãqæaĄBaYĄ(ļhöŦųŲÖs‚įNžÛ*(/Ņ-i8Īu>ëü÷RŸŌ§´/ԗq—å”ũŧxņyšQys…pEá%ĖĨ¸K •Ž•ũ—U.W_ḒseûjØÕŲ*ÛĒŪjåęęޚŧZDmlíûkûŽ=ŠĶ¯k­—Ē/o`iČšŽĮ^˙pÃķÆŗFŗÆž›*7ëo Ũ:ßÄØ”Ũ 5'4¯´´Ėļē´Ž´™ļõ´Ģˇ7Ũ–ž}ĩƒ¯ŖäķŧNBgzįÎŨÄģßē"ē–ģũģį{÷yž82ųåE܋ͩÃĶčéė—ô/ _qŊǘ›i˜UšŊ3§?7øÚîõÔŧ÷üŌ›č7[oĶH …īxßU/Ę-vŧ7|˙äƒÛ‡ˇKK›Ë>ž˙$úéÖgí΃+Î+oŋD}ŲųšģĘžzuMa­į›õˇWëĄë›ßŗ7Ø7Ē~¨üč˙éôķŨfüvëėļØvû/ŗ_Ķ;Ą;;Ô(ęī\ —??ž^…9„ Ėž@ ũÃ)~kĀt‚u`Œ„ķ_a` į§×ÁwH J‡&ęˆjxŊ€EuŖŨ1Ķ‚=„ŗÄsã734O‰¤G´éÆč—Č8F)& æT–kŦ/ŲŲ8,9s¸†xx-(š|ã|‚ūB5Â_DÕÅâÄīIĨ ¤“ötÉlËÉĮ+\Sü¨,¤bŖšĸV¯>§Á¤Š e­ŦS­ÛĄ7¤ŋbHcÄjĖg"eĒlĻgncábéo•f}ÎĻž ^Ų¯8'g1W[ˇČ})ûO¸WytzŽPgŊžú |É~‚ū z–AÎÁž!ĄņaIá™Ų‘ųQyŅ'cÎÄæĮÄ8p21ã`JRlrĖĄ ęaįTŖ4# éRGy2č2v2W-gMgä´åÖo>1{’õ”Q~ÂéŌ‚Á3;E2gŨĪĨוŧ.%]/ķŧ˜[ŪT1Y‰¸,zÅâjlÕņꆚĄÚutõ˛ Ļ×Ŋn$4æŨŦēÕ×4ŌŧØōĢŽīļL‡æ‹NĮģ>]áŨzŽÜËī=ßW{ŋĨŋįÁŨ‡CÆß<ē<ûÄ`„<2ũ´aôā˜á8y|æYũÄÁįĻ“ė“o^´NeNÛŋ|šųĒæÂläœūkÖןį{ߔŊM\px'ģȰøķũŗKÕ˧?Ļ~Šûŧđ%đkđjÂZîˇęõŒ?ŧ~Žl…ürßŲŲ€ƒķE!°¸‚C LÁ™t šBČ N!~"C‘Pqh"ēc‡%`pEø‚)Íĸ(‰—–…Ž›^’AlĮɔË|•åë:;…Ø3˜+Ÿģ™į%ΧĖī&%Ø&4/B•ŗ•8-y[ę…ô7&YU9ų…bÅ&Ĩnåį*[jŒę{å5Œ5Ŋ´âáh8Ŗ[ŽWĨĶāŽá Ņ”ņĸÉĒéŗ-ķmK”5› -Ÿ¨Ŋ‚ƒŠŖ’“ĻŗŠ‹™ĢŠ›ũ>§ũÖîļļžöT7/Go'_+?sĶŨ@Í õ`ųņP0Žp–r$}6Ŋŗû)î]üˁɄ§‰ŪOęIn;Ԟrķp}ęÕ´ō#ĶĢŽöe,#eIdæøææŋ~b8īã)BžâiĮ‚č3Ņ]EķįPÅ%–įcKË.ô—}*gĒPŊä^™{šåĘtĸZ篺6÷Z[ŨBũuÍŅnÜúŲŧ§Åŋĩ°­÷6Ô!}'°ŗėî“nLÎŊÔŪŽžĩ~*÷>ŌPTzŦ4¤4ŦôDvDüŠÄ¨ČĪ8Į3Ļ âsü$4šũâķԇé÷/ßŋš›y;;37÷zvūå›ųˇ6ŪíŧĮ}āX’^Öųh÷)âsöJ՗¯_Öxŋ™¯'~¯ÛXø)°šĢl{q‡˙¯ņĮ˜o) ˜æƒ;āÄšÁyû Bq1Š”E ˇQĄ¨7h/ô"&ŗÍÉāâÃŦ„šĸ$q‰TOC§ᑪ •äDFk&fˆyŽĨõ*[&{‡=§—07–{į-ī Ĩ‘¯„?C LĐFHK˜_-˛!:.Ö,^*qXŌCĘPš"ŊĩįšLŊė9WyqŦ„âĨĘ*"*;ĒãjUę‰{-5$4QšSZ×ĩéøę*ë1č­č\6L2r3V5a6ųlúĀŦÜ<ÁÂÎRÖ kõÚēÃĻĐ6ÆÎÄ^Č~Įášãu§,go%Wzסö}yûũŨu<8<>yvS‹ŧÂŊ |¸|V}ø•ø‡hrĀk}o𚐸PÃ0ž°ux]¯<å­Ã bgãzâ+¤&ø$ObHÚH~u¨7ĨîđųÔ#iQGÜĶmŽjfHeōcĖBgũĖūœ3Ÿûüø?ũ';O5å7œn,h8s­°˛čōŲ‹įƊ+JJÎW”^ŧpĩl¨UĄp‰Zyârį•Ĩ*†jÕīÚã×ÚëØŽ›ūŽĄą&RŗnKTk}ÛįÛrîÜŊKî éž}§7ĨīSŋ΃éGÎĶķ<š˙4vĖā™ÄsÆBĶF¯Rf?͟X{Ÿ˙ŅæËđ†ķîø˙Ų[Ú]0JœõĀ…#r÷ Ü+köĒ!Í o=ŌÍûgũ`jđĖ‘Jaž8Ą Q˜F@0ߛA`ŌD2â2â âRiƒLFÖ 'Q8x!fbCh$ZŠž„žÂ0cŦ19˜~,k„=ŠíĮ‘pޏbÜ<^ ƒī%0|7i°44­0ķ %> ‘rHĢ´N´í0›)Ĩ'Ō¤_acøH%¯0Æ0ū`:ÂLd>ÉÂĘRÉ*ÍÚÎfÆ6ÃĮAā¨äÔáœäŠāfänãqáŲâ­¤XQ~ņÕđī ô &Úūwá6‘QC1ąIņJ‰IS)Qi´ôĖž>™*Ųlšxy_…}ŠvJVĘ*†Ē&j–ęž{5â5Ķ´ĘĩÛtĻu?é“ T ũōkL.›ž4K5O´ˆ°ŒŗŠ´Ž´ņĩ ŗ ˇOqČu<îTä\īŌã:âļ°oĮĮCÃ͉šæUáũĐé'ëīP8 BtC…=‰āŒ ŒjŠūë×|€”–ø$I1ųR ÃáCŠ;GBŌ?f„f.gd΍8ž‘—~J4ŋąĀėĖxŅĄsF%öĨ!eGË[. _AUŠÔD^ģ\?ƒũĻ_Ķ…–wí{;ĸ;‡ģI÷¨}- G.ƒeCK#ŖYãˇŸ“_ØL§žęũ:ĪúÖøíû¸ĨC“?Į~q]å][X?ˇ!ųãę&~ËvÛũ×áßķ‡,ŧŋUúĀˆ2b 2č´Ž  Ėa1†D"åTd>˛fäR(OT!ę1‹ÖE'Ŗ;Đ?1ǘĖ,Āęcŗ°Oq\¸\+wÅ×âœ7`îëKĶM"Ļ_“ĖHí´ÚLÚuē@ē—ô6ô} j wȊä&FuÆn&cĻf7æ–XV,ë6ļgė45œœk\ÅܚÜK<xÍx7(×ų‚øyų§ĘŊ„D„–…¯‹ĩãû.>$qEō˜”Ÿ´ŅYŒėšÜŧüS…{Š]Jˇ”á4TĩQ­MŊsī}1˜%}ĐAéŌę‰čkė3L4*2Ž3i4­1Ģ5o°hŗėˇąž°™ąũb9đ8J9Š8;¸Ä¸fšUėģģÎãÉC5ķ ō>îsĶwÚ čt.¸'äk˜x¸wDiäãhŖw#ūk‚JbäÁē¤ī‡´R2¤‘ŽXĻ—ũš)},;k"‡'7ęø@ådôŠžĶt^gzŠøÎk—,•—y”3WŒVæ^ą¨Ŧ~WÛP—ÛāyCų&×­ĩæéÖļö[ĨŠ]>=nŊ{ī+< Ÿ+w|,/ę1ŋŊĀöĖvŅųsä⸒ŠRë Ũ•ĘĢ/ņTV\žZį 7¯)×u4h_īk4š9×ÕŧۚØļ}ûôĄÎĒ.ņîk÷¤{îËô_{Hû(wæqÔĐü›‘ëŖ´c!ã'„žž|6Å6íüōė̉Yæ9ÛיķõoîŊZØYd~/đ‰o™÷#÷'öO۟_­t~)ũ°*ģēēvã[č:e}ü{ėqŖō‡Âģ?Í~>ÚTŨŦÚbŨJÚz°Íŧíĩ]ŋŊųËč×É_“;;!;Íģãí'/ˇģzˆ¨ o?žÚŲY†÷/ķØ>ĩŗŗYąŗŗ} &đ?Ž?˙+v•1đžûųŦ]tīFÕîå?Ž˙Sßy‡x>a IDATxėœEöĮßî’3"(& AEÁœĖ9gī0ŸzzzfŊû›ĪpÁxę™sē3ဠsDD@@É9ŗËĻų×÷힥ifv†ewgY^í§ˇēĒ^ŊĒúuuÕ¯_U÷äMž<9!îGĀpGĀpę%ųõ˛V^)GĀpGĀpEĀɚwGĀpGĀpę1NÖęņÅņĒ9Ž€#ā8Ž€#ādÍû€#ā8Ž€#ā8õ'kõøâxÕGĀpGĀp˛æ}ĀpGĀpzŒ€“ĩz|qŧjŽ€#ā8Ž€#ā8Yķ>ā8Ž€#ā8Ž@=FĀÉZ=ž8^5GĀpGĀp9Ž€#P{$ )//—_~ųE~ûí7™;wŽ4nÜXˆįĀåååŠīáU‡o)‚‚{îÍ MíĐŠšėÚ¯ŗuFWiÖŦņ2}AĩđĪûŖßo+;ŪŦJũŊnĄœŠĖķŸ›Ęö^pFˆDmđāÁŌ´iSŲgŸ}¤I“&JŌ pëv͏ļv}ņ˜-]:ĩ–ü@ēáŨáŋđDˆ.ä ųDĘÂŋŌ˛„L›´@ž{lˆĖųmÜpĮöĄT<;ÛdZ‘Ģfū[}ŗí&ŸŽtŌãõŒ‡ĶåõøU ŽĩõüUĄŋ¯ZgWÛ{ĖN§K9Ģ5ҁmÔ¨QjYÛoŋũ’5&ˊ‰ŊbRg’ķđR,V<¸Î\ËéÅ"…å"‹ËÂ‘Č—ÅŦ†Ŗ(°5‹ņCÚĸā–į‡ô|iąv9ęŧe~›fōė#Ŗ–™kōĒN,ČĪ—üčQiũåÚ zīyôŅG“d8äņíđūŧ 0ixŦ*ũŊ&īú¤Ë—AëĶÕđē4ØJKK˛ļÕV[IYY™LîeeĨ:"Ã@îūĒ…×ĐŽ/×uöĸ„ĖY\*yJnĘÃ5­ .ØŌ°ŗ}øö+˛ûŪi(\ō@đÁē,lÁ/,ɓŪ{w“×øLŽ;Ĩ›4jÔHûDMßVßLũ‘rKJJåˇÉ3ƒ¸Š”Sa­šBV ‹-”ˇß~WŽ:æ8™>}fčĮ˜C{ĘĘĨ]ģļa9¸ÂbėũēáÜ×Ģb§74įd­ŽčŧyķdņâÅŌšsįĐæ*V&ĸiĶĻÉ /ŧ gu–fg˛¨MG™S§N•_|1e™¤—””¨åĨS§N¸•éQ+.)Vļ&:)3.X°@ž~úi6l˜œ~úé˛Å[$Ûpã7ĒūļmÛ& žĩË&ÄÚ WU?,/´‡O}ĸõÖoʔ)ōß˙ūWÎ;ī<•'-šNäĒĻ­āį/(IČââ`Z ëų¨%Âē§uŋŋ,W_xĻÜpo{éŊÍ.ŠSTT,qKBŪļÛČøéųǞ5í2õĮF'ņŸ?|=ēPļčĩž,.*”F›KIqĄ4kŅBŪôŽœpŌÉŌˇĪ2Q‰,)*•–-[Ȉ#”¨ĩhŅûė3™1c†|đÁËá´˛ú=Ágœáą*ö÷Š4Ŧ˙ž ZëIįĩãÜsĪ•ãŽ;N'Ų~ũú%ãI_Qg:ņ¨“›Å­¨ŽÚ’ˇúāoēéĻ2qâÄd›kĢĖtz­.¤OŸ>]{ėą¤h4-YÅ “o6.Ē—I#^&:LfŅĸEzŽõĨ´´¤ō(•Ō`š( äÉžrīŋ˙~ųūûīõšŗˇ­M›6RTX¤–¸;īŧS_J(– ä“ēæœüę×p8]ũ VžÕGÛQY~´žŅúAÖxād}ŖúM_TžöÖ×0íåâCÖ KRŽį’ŌrYČWQđ‰›ŋ¨HîžéJíV÷Ü|…Ė]X(‹C<2‹K$Č%$đYü‚6Íeá…ɾí‹ÖŸ†*;ė°CR†ølœå¯Ē?Ū`Î1~Vžü2=OFM.‘×_}Y~›ŲX>ũvŧΝ*=7ßBöŖ|ũÕiÚŦy°†Zä5 ų–öOģžčZc5dķÍ6W sŸ>}äÁ”īžûN6ß|s-KûQĀ/ŨõŽĻũõ×ōæ›oJŧžŽ­ûauÖ_×ũ=›>Ŋ:ʸem¯zt€üę̝däȑaYāmÕRXX¸Œ6dy:ŠŽû÷ŋ˙­{œ,īĘč2+ëGێ.ÎÖ­['Õ֗:f‹šĩgüøņrøá‡ëbÉF‡åOÕn&žââb]ÖŌÉ&„Ã,Ģ<ņĨabÑ÷Ŗ?–Ž?^zõęĨqŖF“ËQ%š^ō–˛—ŦV)•ŦøĮ”]“a–žLõû8ÔīøĘúQ‡’@R؃cÎĘG–#^_ôi´)4$Š}–?ޝž†ËA.ׄ6ŅžĸŌ&RÖ5ķ²fy~X"- Kžˇž}XĻOž Mš6 ūDyíŲe˙ãĪ‘ HkX: Įâ’r)){šš7–%K–(aI^į˜™ŖŧûîģTŸô¨ü2‰‘@Uũ‘6ĐŅŲYúįĐsƒxž/š#_úT¯ą§|ķárĞ›ÉÜÅ"#GMysgËF›np(“ŗ—Čšíķ+öe†ruVh—Õ˙égž–Ž]ģVÔ(\sđûāƒ*úEˆÕŪn‘x ŋõΕĐ?z?žĒ?V04ũ•ŽÄ;K<ę˛ŋÛ5syܲļ<&YÅ0p`æĮ˛ôĶO?é ×ŦY3œHģíļÛdˇŨv“OņÄ*gyã8Ü{īŊÚVÚķá‡&uFëžNÆtRŸ(ļTĀōƒÍ{ėą6=÷ÜS-\–¯/ŊôR™9sĻėģīžōŌK/i;ŦŒxŊ™,wÜqGÅŨŦjVĻfŒÔ‰…=Hŗ%KAÚ∡KÔW_~)×^{­Đ7ú÷ī/ÂAŊ ¸ōās>fĖ­ãîŗ›nē)9š mĨßЧnžųæ¤ŧ•A~ōzčĄŌˇo_Ųy§|,}ˇ īņĮ×ūE|"Vŋ/+뇙zŒûåÕĩõÖ[k™ī‡@_L„8ë/˙ûßeĮ`m<účŖåÛoŋÕĸ´L= ˙Ô2ę`}BO\QØûƒcP/”…ú­ĩr9á„u…îĩמAŽ8,mŠûؖ,)R= .R"ũõׇÉz ė&˜ĶN?M? ˛õÖÛÖŠ§ž&íŊ‚ūDČģ°ōŅ™zTXą wÛnģmx@x0î!JŠ>ū‚¯Lô/ŧđ|°”ļÕüØ3hƒÕÉ‰úąŸéÆ kģíļ ėÁ@–P]dŊ"Õ÷â‹/VâŪŖ{yčá‡īyķæĢŸ}ö™p´–ũaÛm÷ŨCl,“'O‘oÂä ļëŦĶ9ôģwåĮ°—īÕW_ uEŋ,Ķ>ę¯VũGzĨÕŽÃTĸ<a( DŧT&-l$mgkQ^#)Åēö­…÷}šÜIGŊuô˙°ŦÆâ¸ ŧF:­(\ŽæB\~øqG–ˇđŠ%•#û‡ĸ'Ÿ|R—y¸áÄ!oˇ¨ŪTũą$Šk}Ѝŗx|ũÍÜ5×\#íÛˇ—nŨē)!B&&Ļ#UtëŸĻ›7B!bˆ•˛ŗ¤hL3B¤;¯ ‰ėēûÁgú/FbWÚÍõŗ{Ąĸ.5íĐĄƒ>pōP­_ÅÛ¤2ŦŦšféļi7yėņĮ‚\~°Ø¨ũ‚‡Uôņf5FÜ[oąũ$!7ßrŗ†ąŦŅ?ķÂ5aü9ųäS4ŪĘC:Ú´mŖ2Ÿ}öšŒ=Jû‚¤ãžôX~|^ÁBL_"Ė5Üx㍓eGõĐF"°´qĐØģ… ŽüĻ_#ÂŋÚƒ'ŽrĀŖy“đÍ´pj#šĢU-&ūŪ}V†~Yéō]ˇ }ŽûĒļkH;ęĒŋ+¨ūo–ŽčËD{ ,¸‰éÄLXܸëŦŗŽZ\°`AžX*å`ŗNĪAĮß(Ĩĩ×^[­mė)#Ž4tâ3€ąË{ŸˆÃĮĸ1{öl•㜃'lōY^;ĮG/uą|V7ōQ,pņr aŅļPN”8Z}!,uđÆyˆĮōÍKyä-**Ō6@Đø”ƒ%u4Į9“?íŒĘ ŨXÉĀÖÚ­øÄÛČĶxģví’V ŗœA:ĐÉ22û!CäOWo,¨<ÕŗdC>öؘ‹ÖŸ8ÂāĘĩį ž6™qnaääm‚‰†‰įĐ7ęÂųčŅŖu9KŖM~Ô\nŋũvÅŌôZ´ũ{,UĸkŌ¤IjM¨°d-üŦŽ–Īęmu lKîčĸž,ËҟĀ9Ģ;Kã`šÆŲ32ԝ<čÃĒĘ)CŸ•…O˜û‹kĮžBŦsô/k÷†ÄŲ9~m† +§Eã‚@ÖIËđ ­*ÖÁRļõɜ‰ŖåˇËô1?ĘÖ—6!žMĶÆAļą´˛-›„#_…=kÖg°Č?ë[æĶGé8;ĮĮ™“ÕČH|ĻūHÛĀŊ8ėŋ+,Z"C?yDž~īN5ô]ũäLŗfM9m$…— ēīFųßĶ÷†7— Y ­pÍRõ!ę€NëOø„-ŪÎíÚ[Ÿ{‘íXbéįև‘åá˜ņ…ˇŌ­1GķsNyXsé;œCÖ¯ ˙āÄ8cũ:ņPG˜}u2î3åĶßIûä“O¤˙ūÉöĸˇŽúŸõģē*¯Žûģ‚í˙–CĀ-kËA’9‚›•ƒ›žŊ@X5ØCÁ>(ˆ$ƒ K˃ė+Á"‚ŗÕÎŲøÍÆpž ãƒ.aŦOlâgpÂ*ÆÄÅfôūķŸú Žõ×__­ėęׯjÕY9QŸåˆh>,.^xĄÖ•—øN™•sÉ%—h9lŽĒ-Lln§,€ qÔ%ŽdŦˆīŌĨ‹NÆ×]wŨr˜`Ũ‚ŧn°Á*ÃrX 3^öí˜C†6˛'Žļ€ĩ‘ŸåB–ĶØ( !d?ōü›ŽÁ‚öĮëÍõƒ4œūų*‡ečCIâlåãƒˇ9&rp!s@0"L<“ŠäE&:é ÃKė|ūųįĩ.0Č.ûɐĨíôh^Ģ ųčGŧH0~üxŁ:˜ŗ˛­žÄŖr9L'įėãĄ¯€;ēØÉÄaeĄ‹žÎr?{™đčã8ōķŨ9ڂģ>ô5p7kû‡áåö%ŌW¨“,u‰Öué +ÚË9$­EØo—ČVé°4ÖÑ/­[t”ŖĪģIēj öĮëƒÜēaų3āōąIž$ JĨUq#iŨŠß]ĸÍ0 Ø9žƒƒ…ņ-lōÄE1ą|¤Įû#q`ÉõŖ?ĸ‹pqqØˇ–B7č}‚Í/sæM”Y3&ČâEŗ¤MâW™9cZ°pnö°u ¸đFė’ŋ֚—~Eųč2g×ĖŽ+>2v˜\<ˏÂō=Ĉû”‡ˆrÄą*›ž}öYUez(—˛°ĖBTŲ#Ė}NæĄq”=ÃaųG7åDåŦ= Áˇ6Ō8¯ÍūŪđĒ­6øoƒŽ˛6čá31¸ņäĪĶ˞tdéXn°Ø0Č⏙S9ĶO‹Æ“—7ᰂQiԁƒx, ’6hDĶ97]vN>ŦÔÍęMų”C<åpnō<}FÛ­Ģéļü6˛dyŅizŠ7#ʡz[šMėW‚$YŧÕĮt’?îLŸ2hŖ•‹,ņKģ.&OKw†G´ ō›ãšƒĩMJÔ=zŧXĒfPįĨk'ņä§lÚHáāz⍋9+Ķâ˧MX¸l)’xöâĩœfVrŧ¸ž´ŅôSõˇ6YųÔÉęČšÉ[=¸6ÖO,žĨ#oXĄgu2úšYÕ w“3YęÁÃ(Îņ6ÄëW[aÄk áâ—vŌepOŌÆüđĸ@ kÖŽæË˙šE:íø[¸ÎĩpÃXXE o–ĘØIseę°Ąrū€Ļē׊ky;XŲũ@˜gZ;)Ķđ!ÎđÉĻ?˛‹2hĪô3åÄĢ~‘Îëv ;Ō$,Yˇ õi"‚ūų fIŖéOÉE^)‹C?^ŧxQøhn“@ÚĮHŋí:č5ĸQ6õ´žG}­>œã¨?‡ĩ‡8ęoéŒܛ–†Ŧ9ÚG˙ ø†…•KœÕ ÂG{!¯čÆsŪeO&}-z?üøãúđ‡E yî5ä­­VVĒú[­nĢZ¸.ûģ]S÷—G`éŖõōi“n>&LžúšŖYš™L؍J<į&O\*g2–†.ĶŊፌ˜œųŅrâē3¸™3Ŋ„­+?][H‹ęļ<čąxËK8Z=Ž<ĻG#"˙ąôH´ÖĮōGuZųV–a•ađļx+cųņŖõĻltĪ57gåDõ[VPy&&Ęå`#ÍAœ›~̃•AØâ°Üš.ō01Ųg“>aŌ,Žs–éņqVO|dh/“9䨓a´N–]V/tāâatZ|*{‘Āڃl´^čŖā… õŖŽæ›NËgeÕfØŽõĄ~í[ˇ”Öm¯ÂG|!:°_jPá^~IĻ‚¤ņBhN¸úA°t6’&á¤ŲŦ¯B÷NļŨōšo'åÆã,œ.­ĒūHŸĻ]¸͛I˙ F†oŋÕ ûå°Ęđš\‡FMäë CäÕį˙K[íŧÅ qmžûIŌÃ5BŸaE^ģÆÔƒ~dįŅ:[œĩšč˜DzÔAní!ËōP–õâ,žúpŽL÷haiŖĪ’Æg= A]2!|Û.ė“Üeí3=Ûl6†õm̃Åļ˛h‡9k—ÅEۈL4l2ÖVĶO8ZÎ-/>évÕɞ8îUËŖÃ?^já%2ĶõŖ÷éĩ|øÄEŨĒĻ­Ņ:×Ubæį:´8 Ų"`Öüø`”­—[= °‹Ŋ]|@“ˇmīUtĸ‰N Öˇ@ČdĖGÎ&äė°t §B—4ōÛ$‰Œ•‹oįě>Î-ŸÅE}ÎIĮYūh:ņægōOØĶaaä‰ŖÎ¸h<ų­-Ä×ĨŖ\ʡŖy˒°\˜qĄĒĄfĄ:•!RąŧĘĪyä‰â2™0ėųūÍ×dîøôãŲŠÆÃ$UZDuV§™úcôš„ĻÂIŋ€čõ•ũ|„›oéE­Jԓë`:¨įÄYqv­Ŧ]QyK'ÎâíÚ[\ŧ,ÂéËkzMŽ:X\…VҎKMŋÅáķ ‰#/?ÚôXTô¯.û{‚­Æ›â{ÖjRW¸ē#`ûtXbo ’ŲÃ^–WX˛ä‹č6‰™n6‘Øšai“žM0æ[ÂļdaÖŌ°ŒŲa˛6ãs ozŖ^LÎV?ËK8gēČ­7yÉcŽtd-Ÿ8‹ę1]V“ĨŽ,ËFëjúëĘKŦI\K–İœ˛Ĩ€ˇœąDQ?ú@&>ôŪÂæíf,ZģV™ōg›žm„|ąTĘ~,–ia#e\;(›k@{ąŗg’=Ÿ|„›0e"í\_sņ>Dŧõō‘Ž‹ĘiDøgũ$ZËkiøvĪtĸ|­^Qũœ#‡Ŗmä7‡<锜{œp´,ËĶPüU­ŋ7Üãíp˛GÄÎĀJ"Ā@ĪÎ@ÎÁ$ÎƆ|&7&d&5x˙č¤PUŅ6‘T%c“2œ[|;ˇü¤›ŗsķ-Ūō˜ˇp6ųâ2–?žF8Z&į&ƒoįQuuΤÍäÍ>DH$œkj$->ŅĮëE[8Ø#ÉĮ[!DčA‡‘5ôהËĻûH IDATļ?æÔō™¤Ā‡3Ÿsģϟ>Ī9‡éB.‹ęĘ$c˛™Ž{4=znų)‡ķx8OŪx~ōX<žŨŋQštíX•ãWĩūž*c]UŨ}ĪZUčxš#P l2`ÂãĀ2c…Ás{Ī–ŦUŖ* >KtŌ­ĢÆÚ5Œ’›ŧŦdĒéÖ7ĖrEØúNMļÅtĻëÄSīLũ1)IÕN“K•V“íĒoēj{Wĩū^ßúEMÕĮÉZM!ézö4ʄn““ĸ9âėÉÜɚĄ˛b~.'GĘæā:sØĩäÛõNךh^ä!kôÎŅU.S¤lkƒõĮtí >Ž}<œJĻ6ÚU_tÆÛ__ęUSõˆöŲUĄŋ×Tģë“_­OWÃëâ8Ž€#ā8Ž@ ÚyŒ‹âAGĀpGĀpę!ād­z¸y.GĀpGĀpę'kuŗâ8Ž€#ā8Ž@õđ LJ›æb-Ÿd=z´ū6]UĒøy“M7ŨT_Ķoč›QĢÂÁĶGĀpG`Åđ V /•Žž%Åo?ōAĖ 7Ü0í›\ŧ]5nÜ8ũÎÖ[l‘,ą6H›ÕíģīžĶįģMĩQN˛Õ<Ąž|0v˘1ŌģwoÕRÛõ¤ĖE‹éGjëĒĖjÂãŲGĀp$nYKBąâ'|›ËÚz뭗–¨™Vd&Nœ¨ß3â5yœ+Î|đAũ}=>ĸʇ2wØaũŠ8iؐ˜¨.ō :T-y5KËFykĶY](˛ÆĪ0q˛´lë‰|6˛Ļ—2š^U•™­NtĨs5Ą#nwGĀXũđ=kÕŧæLČ|ąÜž9Ú}ÁÜ~ޤ¤´"Î>8‰,2äĩƒâ9ĮíģīžrüņĮë÷– [æ,Ũ™|“7?“|ŽŌ­~ægSd9øy›'Ÿ|2‰cļ:LÎ|+“đ| DŽķxēÉĨķ-ĪĘčH§ÛãGĀpVoܲļןåM,;ŗđëÍᇏ—ū$jIŗIÂFØ>8iÅZ:aKkŲ˛ĨZ€Œ0|˙ũ÷ē\ČoõmŊõÖú{‚Č?˙üķj•2dˆ~Tŗoßž˛Á$‰†éūčŖôwû¨'V,öÎáøÉŖO?ũTæĖ™ŖųwŨuWũ˛>K¨,OÆËƒ@Ž;VBi§vJūčą*Ģü—J‚:xđ`]ÆjHøDkŸųŋũö›|ũõ×ú‘ĐÍ7ß\/ĩ“&M’/žø"IŽ;ė0Շ•ėÅ_––ģví*ß~ûmĘz˙úë¯ōųįŸ+ îÔŠ“ÖÔĘ$ĀuA†ō'OžŦm<đĀĩŅzoŗÍ6ZoęBžíˇß^u 4HzõęĨōqVōîGĀpę ād­¨1s@Žøō8K—eeUj‚Ŧ!K›Ā-ƒ‘´)SĻ(Ų€8ėļÛn* Ą"|øá‡ËĖ™3å̝ž’ũ÷ß_ŗ.X°@ã9ä%2,sæĐËņißžŊ’%,?ŨēuSHŋIxä‘G*AB–cNUD2tėąĮj+#ęĮe 'ˆŋŖH9˟ūYļÜrKÅÁd(ûŗĪ>“ƒ:Hņ˙ûŸtéŌE ÖĮŦ$ŗgĪžÚ,”Å×^{Mh;.]ŊIûä“OdĀ€ŠÁ°aÒå’‰ĸÜu×]WÖ^{mĄââõ9r¤ôéĶGH"?ÂÍo}ĸƒ|ä‰ëp’ĘîGĀpV'kÕDĪH†ũîcUjÅ!kųl' QÁM˜0AfĪž­dĄC‡% ™/ŋüRũiĶĻ)9„øá°č°Ž=qčœ>}ēžđ@šéÆB6cÆ  ˛ÁžxČãøņãuéÕ~j†<ŠĘÃ2FyXĨŪ|ķMŲqĮ“ä$ÚôDe°ĸQ:IƒŒQ>?lŽ5ĖڍOŊ!{?üđÕĐ|S§NÕ|"ŦčÂ!OũqfąLWoHeƒ'ųųMÎQŖFŠHq´ßô¯7õØjĢ­ô:öīß_Ū~ûm%–LōX~ķĩ‚áŸada÷GĀpAĀÉڊ “eR†0és0)Į'fdpd-LœMęLô8–(!XȰĐ@˛ 7,‹beÂmŪ:%ŸåÁ‡°˜^ŗŪ!K–šˇŪzKÉŅkŦA´ĘSōPoĶEZĒōŦŒ=÷ÜS?S²KŽ=zô KŌ!ˇ×^{)B+$‹ ¨7D geZŠ?åRwk'~ÛļmuoōČAãÜęlū… —É4ÚIæÜę`ųĸu1ŊFãõæúYĀkM~|âÉo:Đoi”įÎpG.ū‚A5‘cRÆąŧÉā€0ĄG‹#Yœåĩs ãcÚxãu/„‚ƒÕŠuë֚ÆgBpF°Äq>kÖ,­rtq`‚ôAš¨iXĘ ë¯ŋž°´G9ħ+2BĘa •%LövYŊ­ä7ˆ'–<ôŌ,{,ÅŌ>|Ģ#y9'‹›;|ęm–3ô#Cu‚ÜN…õÆē‡uČ˯Õ×|ÊëAC˛Ņzƒģ՛z˛´ y%Ž=läáāí[Ķazĩ@˙į8Ž€#āT‚ /ŧđęjæ]mŗŲ$ Y`Ɉ!za6ÃCē°A4ĖĄ‹Ižīĩm˛É&šÆ^(–ęØ G$rAú駟t†ũWč†p >\­]čĮ†Xĩk×Nķ =nČcmb$9ŌŲôE/Uy”×_]—j!†X֐GŽv ˙ÕW_UpÔą'ÂÅgKØķ†Īr/–3H ōģwīŽ„ŒēŗT ĄâCÃXų˜0„ÂFûɋ^u§ĢxŊ!Ŗ'ˆ)ų؃†uōÆž4âÍQŽ Ë°Ôŧ´TõæĨ ę@™āČKqˆũĀtlŦ‰f]3œŦ<÷GĀplđâf‹TDÎ,/)H›Ķ™¸ĢrX™ &ģ랋›ŧŅÉāāÜéLôœÉA,īsĪ=§/‡l”|ĮäĐą„P Įˆ‰É`2˛I–%ę)BņČGYÆhšYŊ ϐ$sĻ“: OCÎdđÁ5ZŽéąø¨<õĄ]čÅŅ>Ęąüūg!KŨ­ū”I>ØvSGĢS´ŪVŽĨ™~‹Į7}͛7_ĻL“ußpGĀX|Īڊ “eōĮz…ĩë“t*ĮÎäĩæØ¤Ž<įF´ĐA8îH7BMC˛b.ž×ęd2ņrH7h˛øVúĸ:­ČpDĶŦČX:qœã°\™ŧųÄ[:qF´ĸ2Ņx+ßĘ2=ÔÛōG>äŦũÕmqø8È0ÎęĪS‘ē”[:ųŖå™œûŽ€#ā8Ž@upËZ5P‹[aØĪ ņF*=æą|ÄQw“‹Į“fé¤QÚbåEå97=øvNqyK3;7?š/znéøvnú‘ÃQg#eČXē]Wd,Žs\Táhz<°ac>qîGĀpę °Ô$SÜĢy›”Ų3……'Ųĸ890Øl'gaÎ!æ8ĻY<{šp–†oį&%g2æ›+Įʎë#l2–fžé -ņ2MŸÉ'ę,Ũ|“‹ĘDãĸõ°<æ[žhŊH‹ĻSGKÖÅŽ:âyLŪôGõÕc˛æ[÷GĀpę ād­:¨… ĀøÆƒ*ŋ+ÎĪJ6"‚ƒš’î'“ęCåŊŽ€#°ú!ĀØ´ÕV[Éȑ#eΜ9˛ûîģëXņZÂfD‡Ō?ūXuAÔøŠ¸Ņŗú]oą#āÔ5Œ{ÆŅō“ebɒ%jUãG¸Ũ9Ž€#P€\E,lcƌÆĢ}öŲGøM^\6DˈÚâŋåíˇßV‚ÖĩkWĩ¨%ÃĘ×úĐv¯ƒ#ā8üJF4} 5jT‚%PˆV5Ô&GĀpr€IŒO6FMœ8Q&L˜ {īŊˇtėØQĢXaŗ1mƌōÎ;īČúë¯/ë­ˇž>ĩ2rŸ§XwŽ€#āÔlLb|b)4oüøņ AÛ¯f[}¨Ŧ×ÁpV_‹ kŒO6N•””Éô3eô¨Ÿd—]v‘7ŪXAJEØl<ãE‚ÁƒKˇM{J§Žk‹ZÅĢ=šF—V_ÄŊ厀#P_`<ãžĻ”SĻLQ˛Æ fG}ŠŦ×ÃpVOl,‡¨q° :wá™2k‰4.(—ŧŌ…2zä0éÕĢ—Ä_< Ÿ9{‘ [Í%ҍ•””åKįMĨ]ĢĻē Ę`Čaƒc*ŌgēÜwG .ˆŽGJÖf͚•°Ĩ†čW•ņ2GĀH‡ãc5ļjLžU$_ü<_Z5.—VMËĨ]‹2i"ÅōķĪ#Ĩ]ģvÉL fĪž-=zô’MeîâY¸$_–äËŨÛČ:šéƒĄmæĩüî;Ž€#KŒ°éØ4wî\%kšŦ—í8Ž@*l töübš˙ŨYŌ8¯TÚ5/“žk—Č-*öØBæÆŽĢ/°­e˖˛hŅ"ŨŸÆÆ\–IõÉ4,)Ė^œ/#§6–9…R’h$§īÕAÖhĶD-kžg-Õđ8GĀČ5JֿΟŋtŊ ×5ōōGDĀ,ūø7ŋ8S~™R$mš•É€M‹eÃĨÉĸ°Āq„-ÂË6^$ā%‚Ν;/ŗŧÉ 7~V#4ljĖ/*M:7“K[3iUsÂæŨĪpę#ūúS}ŧ*^'GĀP’ C+–/ƔĘü°|šŪ Ų¤SBɕ>mVžÅÉrÄŦ[ˇnōÆo¨oD-*Į9ų҃>ôĸį{Õ˙į8õ'kõđĸx•G ČÕ͟.”Ōđ ČōDžôīVļŒ,NÄÚˇo/;î¸Ŗā“O‡‡ôĄũÄšsG ž"ā#T}Ŋ2^/G`5FĀ^všģ¨L†ũ–<ÛoT*-›UXĀR‘0#b¤Yz4ÎÎņ҃>ôĸŸrpVŽüŸ#ā8õ'kõäBx5G`yžU,`㟜ZjUáŒx)‹´ĒŌMG…ž|ÕO9îG¯4ǝķz9ŽĀęVŽņ3J„&‰đRAšäįr^8ĀAČė°—ĸ–1K3B§™*˙‡>ô—åi9ä%;GĀpęÕ&k…Ååaų X†M(– 3KdAaøŌ¸ŋWZߎ¯×ĮX…HȄYĨZ˙vÍÃK•< ĸe„Dq­Td-NĀÅĄ¯mĐ;caž|0ŧHÆL‰6MķŽ€#āŦ,aYŗMžtjĶH:ĩ-íē6 á‚jŠ]a˛6mnŠ<6äž?lą;;ĢęžÉpVV͖kR6HYœŦÅ 1ĸfņ­ƒŪ %ėYK„ŖÂŠgiî;Ž€#P“đ€¸S÷ærøö­d‹.M“ĒŖãV22v’‘Ŧ1ړéëß.”{ߙģ IcÕ`­Ö"mšķ„ĶîAGĀpj Ö(ЏŨÆUE-lņ´x8NÔHߤ“HãŒŖ`\“‡GĀČŒĢs‹Ė GÅí"ŸŒ,Ôãä=ÚĘ ģĩI*ÉDØō2}×Čڍ/Ė’A?†+ŨVˆėžŠHÎ"͛8K3\ÜwGĀpG ŠĀ¯ŗōŅĪ"Ÿ)Ē4âØĸ…\~x‡åļpDķŲyF˛†ā͟,”‡?˜§y:+ÚŠģBԜ ˆî;Ž€#ā8Ž€# Šķrûģ"S*(•\p`{Ų¯O‹LŲ¤J˛†YîĮđÁEąņV¤s[‘˙;$OZ¸%-#°.ā8Ž€#ā8Ž@Åaŋ˙__HČ˰_–•ÉûÎė¤/ ؖŗ¸<á´ģ5lũôÅ/ƒļāš5š`Ÿ|iŲ´ö,jü sQQQĩŋ&Îū•f͚é6kĨũŸ#ā8Ž€#ā8õxÔéũrãkåú/mžˇ[]MGØR’5#j3æ•Ę᪊´‰;w˓ĩÛ.}ŲĀڍl:åņ´xҏ%K–Hqqą4mZņ–„Ĩ™-ĶÎͧäÅoŲ˛ĨF§Ę¯k\ÆôáĮĶâáT2ž)qŧâaĮoų>ļŊåĶŋåĮšT˜†ņ´xØûßō}˰K…ãįũĪįĪeUܘ&L˜ SĻL‘YŗfÉ… ĨUĢVŌĄCũŊâõ×__š7ožŸčĩNžôŲ \ž˙Môë§h%͛,'g÷dJ˛f‰_)J~;mžų)IYüâY^üxZ<œJÂv˙ũ÷ËĖ™3K[AA4jÔ(ų]%ĀáĀŲyiiŠŦąÆrúé§'‰^*ŨŲ”¯Š+˙ÅåãáTed›ŋ¤¤Dƍ§”ē›îoŋũV^}õUŲjĢ­äĐCĒKĘD#-_4ŽķĮ{LƎ+'œp‚ū¨u:Ŋéō˙ú믊{§N¤qã`V .•lĒ8ŽČOžų¤Ęa‡Víjŧ÷Ū{ÚÎūũûËĻ›n*Ųęũ×ŋū%¯Ŋöšüö[ ûÁåõ×_/ĮsLĩëÂ5üË_ū"‡~¸ÜrË-ÕÖãGĀpú€sųwß}§†ĨĒęƒÕų|ë­ˇ^ްõZ#Xyā2üFņŲ6|47Š’ŦMŸ_AŽÚ‡UÅt ĒĒduŌ°’ą÷lΜ9rÖYgÉZk­ĨäĻE‹já!Í,jøQ— Yŗvôë×O-Z$ß˙ŊÜ}÷Ũ 8$Ēļdå7ېŪŊ{ˉ'ž¨§wß}WÛduŖœGÃ+Z¯hŪøy4ÕûöÛo+mÛļ•Ë/ŋ\÷žķÎ;J‚Ķ剿OwŪŊ{w9ųä“eË-ˇ\Ą6ņTōøãK›6mäOúS:õī8Ž€#āԐ/,jŦâ6ß|s6lØrå[ņŅs“ŗøhØâėúYŋúę+;âˆ#tI™øSN9%Ĩ^+Ëü¨Îø9O}ûöUŨöĪō™ĪC<ÖĀGyDvÛm7˖ô-ŸųŠō[ģĸ2ĻĀâĖ÷üËöŸt¸8~>æ{˙ņū“M_đû§aÜ?XËlõ BÆĘū3ĪtčĐhô2įŊzõJVp™„X€2Í:ÆĄXË %÷Ū{o’qBĘ85bgjâdÍâĶųČ?ņÄšŧķÎ; K­8Ūč`C<{å XX1q:â(Ÿ0ûÍ~˙ûßë‹ XøĐbV*wĐAŠÅ%×QŖFér#oÄxbíÛd“M„å@Hā(­[ˇ–đĢĒ"ac)÷žûîSB{Úi§-ŖŠēZ,!ļø8@—Aą°ņru¤-æh;ä”×ĨKÁ:ÉūB5:yړk¯ŊVĪ×]w]Ÿ7ožÆCîŦl“…qĀņ—_~‘ŗĪ>[ ĐZŦq”Q‡vîÜ9™ßęäž#ā8Ž€#P—Øō§•‰EÍšųĩ¨Ĩ YōŲhyĨÂÎ8EÅ~üd|ė$%YĢ jK÷ƒ•—…ˇ"ˏ1ŌŽ];=°tÅ-$¨Ēü–kŽ‘5‹ŗē)Hį n¤#WUYČá ?Xo +‡ē˜.Ëgú-âxČ!‡čráÃ?,˙ûßÕŌ„e.•ƒ\Qæƒ>(Ī?˙ŧZĪX~Åz†ŗ˛ŠÛSO=Ĩ&S.>䍗ÃâĮE‡B˜ 4ŧņŋ˙ũOßūDOŧžĻbduG.ę6ÜpCųĪū#]t‘’+–C÷ģßiRN)kƒ 6ЗlÉč´2Ųc†ĩÕÖæS•m˛}H!8By •ŧ;í´“4^vĀtL;­=ņŽ€#ā8Ž@āķq%lЈōä‹ĪŋåēÛŦ‚ąßYŽĐ…ŧ)ÉJÉūs–C˃EŠâ{k‘âßzë­§K’Ņ$öŠa Á"“Ŗ DÉšMė4 ĸ^d„sK#įč°OMwĻËŸĖ€8ņ˛V<̧‘ |‹ŗ|ԉ8œ|)â ­8tZžxų„yqkãM7Ũ¤ÖģķÎ;O-c|ŽŌ‚ƒ”)zĖō†…Š07bÄ!¯9ŦUVnŧžĻ\MÆōE}ŦYlęŋá† ÛŖ>Ē×₠.H– ‘‡¸ŗ2yã–kcå¤*Ûd Är‹-ļP˛) +YĶ/Ķ΀#ā8Ž@]"€Šy>ęĸ5[[ÖČŸËĘʛ5ė•_úY˛¨^;OšgÍ+šZ2XÕ ¤%ūé –ÁXŪĘÖAļ8h ÔHų‰7ĸfŊé%žƒx“ą´tū˙øGšíļÛô[b÷Üs.5Ļ“­øŨwß]ž~úiũm{ë­ˇ˛.y–+ĮåčŖ^†ŧf­0&Čuû÷ŋ˙´ŌąįŒ2ŒkFķ­N6ˆšÅ“geæ¯%kTkQ׎]“Ÿ°ŠgãC´ jXpø0+ÉHÄ,j5ŗxôrnŋ`ĀųŠ8HČšįž+XÖØ\Ī') 'ėc‘ģøâ‹õe€!C†Ŧˆę”˛ö‚ņ“Z86ØC‚0ŖfëØÃÉac>oŒr@x ĘQŒ˛%Ðŧ IDATÕgr¯—^zI_T Ë(/Ođ3^8,§wŨu—îgã%ˆáŸ˙üįj“5ŪvŊôŌKuŲ›žÃËf*Æ: ™ĻĶķ \'Ūŧuį8Ž€#āä öŧŗÂÅ Xy2B¯ÅÃOˇß=ËeÎ ŸXúÚgČÁdo–Ē˞œ##&—K׎er~˙Ē_0ČϰL2ŪzĚéŠ[挈˜ÅÍŌ‰gųŊNlR_sÍ53•U:V&ŪlŦŠĨE+töėŲÂoŠÁ˛šˆ+ãXž¤ŗ@¤jÂúĮ~Ažhŗ-{ĻĒ–<–'!tÕÁ‡—,žūúkšũöÛeûíˇ×ˇ[iƒ]Ķh™\_Ŧ”•*=*ëįŽ€#ā8Ž@] ĀįŊXibÎLį˜į!jé–@o{ŋ™Œ™Q ŊÖɗ›Nh¯†æōø\Wã–ĩtÎ&â‚Ĩ ëZŧĸņüņt&tŦK+K~ĸ嘅'Wįŧ…ĘQŽ— ė5ĄkÖŽLŽīŊqԄãēņáãtŽk ‘sį8Ž€#āÔ `t˜Ÿ nx0x0ÂH‡Ŧ­ŒEÍÚZ¯Čl2ūFŠUÔũ†…KÍöų”†Õ2o#ā8ŽĀę‚ķ؆áĨĩéęYĢ͆ēîú…Ë îGĀpG 3)?Ũ‘9›K8Ž€#ā8Ž€#āÔNÖęe/ÃpGĀpj"ād­šĀy6GĀpGĀpęŦöŦ͚5+|ŧõƒē¨—á8Ž€#ā8ŽĀjĀŦÂ=B;3˙ÚSVdŸ˙šøä‹W āŧ‘Ž€#ā8Ž€#āÔ</Õ˙yˇ>Î# –ŦqCŧõÖ[’ŸŸ/‡z¨4mÚ´Ļī9×WØtĮ˛áZm$?q¸xø¯ĩLTx1ÃĘHģHYøWZ–i“Čs ‘ķO}_nh@č/ öÖ¨Ā˙;Ž@#āķRC^­ëã<˛b&ˆj5;7™†.K–,‘ũ÷ß_š4iĸ•Ā’V1‰3‘W^ŠECĀgząHa"_—įÉbü@Ö ÃQØáÅø!mQđ ËķCzž´XģuŪŽ2ģE#yė??æĻĶzŠŽ€#Đ đyi՘wëã<Ō Íeee2tčPŲb‹-„s[æĖΧŖäkbBŧû ‡Ų‹2§°L¯k¸ÜęWŒū˜ÔōäÃˇ_‘Ũ÷>(ØÕ‚u-ü+/OëZ°°ŋ°$OzīŨMžč 9åœŪa9ĩ AOŪ8G;|^ZuæÛú8Ô8Y›;wŽ,^ŧXÖYgŊ ĻL™"Ī>ûŦœūųYßņ<ûÛßäœsΑļmÛfĨƒ›ĸ¤¤D:uę$ĨĨLÜåáY™ŧųĢ$jĻ,ž:uĒ<÷ÜsrŪyįYr•ōEķW~úé§ĨW¯^˛ÕV[% dUō¤áR铺Ī>[1I•n5]ū†šž $!‹‚uõÎüp­Á¯\•ŋ,W_xĻÜpo{éŊÍ.z ʃhy`m%e"KBŪļÛȨА¸r'ktwŽ€#P#ŦĖŧD|œ¯0,ØÅ¨M<ęãsĻjH 2D6ÛlŗjäĖ> ãëŠē—ĸķHC§Ķĩ§´”ųēb^Îeûëãų¤ŧ˙ūûōƒ&WCĀ í¯ķHYÖØßķÛoŋ)aā-Zā%7%O; ‰'&ãoēé&éͧ~øáōŨwß%ãĶ}ôŅ1Ėä kÅÅŁ,‡‰7$ˆXåÁSGĸ2üÉ'ŸČN;í¤a{bēëŽģd‹Í7—“N:I~úé'•˙oXĨžČwđĘã?.}ûö•ũöÛO&†öÛĶ2ƒÂ Ũŋ•×ō‘œ4i’pĀÚæ‡2Lūîģī–}÷ŲGvÜqGšâŠ+’õcP80”ŗķÎ;Ë-7ߜ”įæ˙öë¯Ĩ_ŋ~˛íļÛĘ|leiyiÚÛĶ‹ƒuŦ°˜ĨĐrõ‹ãčwär×[ŖåÎĘcŖÎ –´˛ —…Áē6§¨\Ļ/(‘‰ķĶ d͝#āÔ|BŠgĪž2zôh-āŒ3ΐŨwß]Įą'žx"Y(+Ä3?0âģN?ũtŲe—]¤wīŪ2oŪŧ¤ŧđŠĻ#<Ō‚˛ũöÛËk¯ŊĻc(y 8Æđ}˜K9Ũēu“c=VãHûōË/—Ņņ÷ŋ˙]åØĸsà 7Č Aƒ´cƌ‘?ūXN<ņD˛etŲĖKį„í-ķŸzęŠä¸ÎœDüĄ=ā‘jgkĖŪ‘ŧ6ėēëŽļĖī‡ŧāvĘ)§č–œÃÂ׎9æH#O˜‹ūųĪ&õŸVʘsIc;ĶÁL1_3Ÿ?ôĐCōÜ3ĪčJÚŪ{ī­ķķęüųķõ:aAũĶšįĘäɓ5ēy“yņæ0ŋ1 Øcí5XÉæPVęt%)ÔÁæíTíˇöÚŧZŨp}œGj˞ļŨvÛəgž)ģíļ›\zéĨrá…ęg3čŊŗ_~ųEžä‚ŊgĪ„‹{ŅEéá&â)Ķõ˙ũß˙éMUUŋîēë’ûáĒ’ã“XEŠŠ i[ĸįj#QK Ÿm`÷šČ¸ņãd­ĩÖRRWˆA–a› ĖûƒŪ—ÛnŋMŽŊöZšįž{eƌšļ`Á|™={Ž|ÚĶ{Ë-ƒeîušüō+äÉpcŅšx@˙ë¯ŋޘ O˜ÎĮ@ņĪūC ‹ä¸ãŽĶNØŗg%iGyTؘ :¸üîwŋ—Îk¯-˙øĮ?ä´ĶN•=÷Ü[­z .Tũ´ũą@šYŪyįmšũöÛĨoŸžšßƝh/’KÛ[ņČŌpÓËØô’Đ÷BëÃ#Y*ÃXāšú´Æ?,k„؎\Ļ…<Íkėļ|wŽ€#P‰“8ãâŊ÷ŪĢ“9Ņú͟ty”‡õ“Ãęħ°°PŽŋūz}ø_sÍ5uĸGb4lØ0%ŠVKa5#jøõ×_uœ|éĨ—”0VōÜˇß~+'œp‚üøãJÂŽšæŸŠŠŠbfnΜ9áû‹Í¤sįÎ:ŋąuÆ,kėfîĘÆe3/ üũ@Ų´ûĻú’Ü\ ė€-)R2ķŅGK‡5ÖãUyØT1¯DĮų߇ŧŨ7 y*äŨ?ä%CĘG}$/ŧđĸ´iŨZ‰Û… äÍ7ß’ŠĄgūáĖđ-Ō™d-éͧë=č õãÉōĘ+˙"¯ŧō˛4jÜ(ĸ_SęĐŊ{%‘Č[ųÖžÕ-Ü$`WˆqIYžúĨœ‡ĨM;–„sâJ՗Ÿ/Á'KÂQ–W MCū<˙(nĻÛË́j!€U ŌĀJ‚Ŋtļi 5‘ŦæÍ›ëøČ72y˜gÃ1žB&~÷ģߊ‡15‡Ĩˆą‹„Ãsē bDæÛĻb2™ü6mÚmČÆe3/uíÖU )í†02Ž3w˛‚sōÉåû!ßë6›Wĸã~7ōϘ‘׿ęÆžėvíÚĒžˇß~[:čā@¨Z åm¸á†a~Ģø xtžŗŒÛäC*ļ…ō™?‘įH7oZšÖ^ˆ4+Q{^Ôã+ |MÁęĢ ˙j#\į‘#kŧņȧ5x"âÂāwéŌE™ą÷YgYôž{îQŌOOfĐ.|Ēt‹ŖcrŅŖŒ4:Žu{LáëŽģކščČķ& V2â!HXŪč`¤ŅĄĸ-ÚaIŗ0lß}÷M†)€rĮŽĢz0ķķ4‰Å‘åUÖōœhOvŦĩSoÁ2˜Aj!ŗĻ}œÛnäqÖ>Úŗē…[4nŗŠAÅĖÆāąõÉ'O˙CΚ*ÍZļ“c.ũˇ´4 * /”†ˇ‚ķķËĨe“p }Κö˙įÔ6Ŧ,`•ÂZÒ$c+2ļįčÔSOÕÉkÜĀ@ÖyĀeÜ?~ŧ.ÉeCÖŌĩ}&LP̐ŲČŽ–1&ā~ūųgáŗK,ŅâxaŒųÁufEĸ—Éeš—Xbd•…ũdl B7튭ROƒAœķ–ĖxĶÖō"cŽ`Ž@žũelGÂRÉū<Ęb5Œô:(ļœŋüōˇ|™ûŖËæTôáˆĮ‘ÆA˜efęŽÉ1Û9>a›S ŗÜ=sæĖ¤>ļ$Į3{چ*[†mGÖŪڜįęãí[‡_!höy˛ēBaĢ$m\‹—_.dI īŒ„“pü0ŽIĶÂFŌ$œ´]øCčC›%û…^D˙į8ĩ†äĮ\Āa.NԈįawe‰šé7ßʡ°ųéâI_‘9‹1:Ûy‰qŒņŸ<Ņy€đz뭗œŌûŅy„zϚ7ūûß˙ęį9°Üņ&,/ °Ä•§žŅpēōRé'_ĒúgŖ9ˏoķ_uĘ'UõK—^į‘%k4ŧ>8nvnhö‡ąīĖĖĩvą­Žņ×­ãéÕ ķ­´TŽēúL—į°ŽJ*<0Îļ dÍ ģ–ĢZô\ÍɐļY+į)tŪhY¯cé2†áīž#ā4 *öũļēhUļķRĒq-ZŋšHg{M˙°õ†Ĩ_–|ąä˜Ģ ũĻ UÔWį‘IÖčxėmãÅžīÆž4ŦlŅ'ļhgōķ†ƒ@ķ–ámNšŦe2%e•Í‹žį…Īwā ōÃ/—É´Qd䇃dҤr|Ø/ŧ*ŗģį8 æž›VWŽžÍKX-ÍrÉrŖģĨÔĮy¤A’5˜<ĻT^^āģo|ĄÚ;ãŌŽčgË#€%–û¸Đgč;ņ§ÁåsxŒ#ā8Ų#āķRöX­Ē’ĩ94H˛Æ…4öĪņg^Áæ ĖļvŊĒv¯wí Ā ĘĻŨĩÃ/Fđ´íD­vpv­ŽĀꎀĪK ˇÔö<Ō`É]đxš€o”ŲĻņÛUŧe+ƒ}ÅIÚĘ čyG |^ĘĨUSĻ6į‘MÖėr×&€V†ûŽ€#ā8Ž@ļøŧ”-R.Ų ÍņrGĀpGsœŦÕ9ä^ #ā8Ž€#ā8Ų#ād-{Ŧ\ŌpGĀp:GĀÉZCî:Ž€#ā8Ž€#=5ö‚ÁūķŸėKuIGĀpGĀp0gžyfĩŽÆČ?†žĮ{ÔXÅ\‘#ā8Ž€#ā8õņãĮëˇ8ų$ßäÄįį,ų~Žīš–…ūôĶOk´Úž ZŖpē2GĀpGĀpjœĩĪ>ûŦf[‘A[]——Ē:0í•q+چē.oeږ.īĘļ!^wĨĨĨÚķkĸmĻËüšĐé:G úÔ9YûíˇßäœsΊ~#9KJJ"ĄÔ§5QŪŗĪ>+ĮsŒ,Z´hšBĒJ‹ oēéĻōŨwßEŖô|EÛ°˛å-W ŗÍō¨j M˙LĨļēųRéō¸Ēā§ŌfĪž-Ũēu“QŖF-'|Ę)§Č¯ŋūē\|U™tV•×ĶG æ¨s˛vë­ˇĘųįŸŋŌ-Áę˛õÖ[gÔSåíˇß~2lذ”d­Ē´h厞újŲhŖĸQēŽŊĸmX™ō–)ŧŠ@CĀŦŠæyR–d{ÅÕU7_\‡ŗC`Ŋõ֓öíÛK§Nd­ĩÖJf:t¨zčĄ2qâD8p üáHĻ™ÅŦoßž˛páBą° ¤Ķiéî;Ž@Ũ"P§d§ŋˇŪzKŽ?ūød+ŋúę+Ųi§¤cĮޞŲf›É˙ū÷?MģãŽ;¤{÷îōä“OĘŽģî*;īŧŗ<ũô͚qēîēë Đ5×\ŖĮK/Ŋ”Ôi'ņōŠ‹‹e‹-ļž={ę“&ćAîß˙ūˇfaŠ‘%đöŨw_1b„ÆˇiĶFš7o.oŧņ†žDA}žy晌i ũ™~uË-ˇhŋÄ>ŪâI|üņĮ*Ëu ËDzN_;ā€ôŧĒ™únU:)Ÿ~=gΜx_y啉`ĒĒ8MĢĒVumĶĨUՆLũ3]]ĒĘĮØHZ",åk{ŅČEâ‡~ČØöęÔFŸoƒéØÃø=žūúk­bēë^U]ȘîU§Ũ–įÛoŋÕ~ÜqĮ%ĮTKÃųå—­[ˇÖ>ȘįÎpĒF`ܸq:ŋáEp—°íCĮ4Æņ`ĨÖ88Q&ŪD:ü žßB/ķce”—q^cŸîČD/ą*a%ûæ›o’ĸXŲ°rtŌIĮ“ŪąĮĢV+Ŧ ŧ {ũõ×Ģ• )SĻČO<Ąq,)Ū|ķÍš¤žčIĒōHįu[ô>øāƒÂ>˛¨ã‡uŠãŲgŸ­¯ãF-aȅ‰Uú÷ī¯YØōøã Oŗ™ŌZĩj%*g˙°ĻTˇ Õ)<ŧbLÛéUœŖOÚ¤¯Ę˜q]é O=õ”ZÎ^xá9üđÃėšÖ6_|ņÅ4S-gÄaáÂâ$§Ÿ~ēZÖčwôL.Sß­J'–ģp“Ē5cûíˇ—đ ’Š8M¯ĒVumĶĨUՆÛoŋŊĘū™Ž.Uõk,HäÃ"Ú´MáĄG­íXĶ9ú%÷YF—Á*Ųšsį´ioŧq÷ °Ä:wŧKwŨĢęŸäKwHĢŽÃRüã?ĘÃ?,Xœ/ŧđBą{ ¨¨H.ēč"ĩēp Â^îG ~"PgË  Gu”NžƒđškŽiAõ GIËŖæØ“ÁwNĖUĩ‰9Uy–?žŒ‰āÄO”íļÛN—;˙ųĪꞲhžx]ÍU•f2ŠüęļĄēå…'i­“gԭ꘹œ Vá#Ígu–6/U?;øāƒu\ëķÎ;O õC=${îšg–”įŠtFûn&:tĐ–ãû…R˜M˙ŦęÚĻJËÔę‘ĒfS—TųØE=Øŧn˃G}tĒ&'ãĐ,WËáiSë—. 5Ũ'f͚Ĩ/ ąŦ=&L˜ õ­ęē§Ģ‹54Õ5˛´ęøaÅBÚĩk'—^zаL{ß}÷%Õ4kÖL6YūäžŲ`ƒ ’i~â8õ¸Š­6–A1 †ũh –]ĸ.ėJ´lŲR—6‰ĮžĖu™„0Ë}á-ĖD ˜Ybxíĩ×HRö‘Š)’ĀđáÓË)w>•]IDATéĘĢȕH‹š.‡ZōäɉđdŠĻĖ09$¨.U™ u {íÔ<,|ēœxÛmˇirUi–ŋ_ŋ~Ë,ƒZ|uÚPŨōÂ[¸‰W^yŊN„MÄÉ톀 –Y]î {ВmcéŠ~fKUôų@Îŋüō‹Ę D‚kŠÃ¤Í’)æéĒ\Ļž[•N–§‚OûR°kŋĘ´ šŠVumĶĨejíOÕ?3Õ%]>îaŽÃØącZ–Ū>účŖD =Ž­uÕ'¨UםôTu!>Ũ5"­ēŽ1—­ap"X!Áz\]UžĪpŒal#ĘÅ2¨ÔY /$Âō[ʋ6'Â/čä6Ŋ/ŗ§ R6Ä'6Ųd“D=7Ũt“Ž ›"öû°O)XɔXŲžĩtå1Y÷ęÕK÷+Ą/,Áę4Ķž|uŸĶÚk¯K‰`ũP˙H„'ŅDX*Đ=va$qꊧj]ĒJCoØāĢ吇vPf”0­hĒ[Ū_|ĄíĄü`QI\rÉ%‰°ô’øë_˙ĒÍo˜ŅđÕhm{Īĸ.ŧĸ×.ŧ\Ø|ķ͕ŒCPq\göˇ…7įtoaXr‹fM{^UßM§3,Ī&ÂK"ÚŲĮtà 7$²|"XĶ–c éúgU×ļĒ4ôVÕŌĶõĪtu!.]žįž{N1fī$÷Y°bęžŅŠ\ĩķŋ.ûDēën-KU—L×Čōލ˙îģī&ÂvD°ø&Âö‘Œ +ĒßåÕ \’ĩ<ČZÔāĀ×åŋ0‘ÉeOΑ“ËĨw—ĻrëÉK_ ĘÛų—_~™öįĻØ´ûîģ ¯ƒ§sÁĸˇĖ›LČņÆâ›ožŠoŠĻË&<á`o’šlĘ3Ų¸ĪÛQáé_—¨âi„ƒåEŖ›6mē\rUiË G"Ēۆę–):yÚ0ŗÆËMĘũ7,Î˜1c™Ī‡å9ŽųÔŠSui4žŋĐôĻķSõŨ•Õ™ŽŦLũ3]žLņŠÚ`yRõOŌ2Õ%]>ōrXöc9Ž.\]õ‰lŽ{ēēÔÔg¯Ŋö’Ī?˙ŧ6ÔģNG`ĩB€mXl!ĘöįĻØ“œÉ]đđ4úëéĩNžÜtB{ŨŋĘßĻT'd-SeSĨŗ™Ҟņ5X=jėCēŠĘō8GĀp"< °_OÕ¸s•C —d­ÎŪ]QˆØ@ö„i6ž…æÎ¨KØøōÉ'§-2|nC_FI+ā Ž@=@€7ߝ¨Õƒ áUpVzKÖž2ápįäŪV ߥĘEŅ^Ļ#ā8Ž€#° uöéŽeJõ€#ā8Ž€#ā8Ž@V8YË &rGĀpG 78YË î^Ē#ā8Ž€#ā8Y!ād-+˜\ČpGĀpÜ ād-7¸{ŠŽ€#ā8Ž€#ād…€“ĩŦ`r!GĀpGĀprƒ€“ĩÜāîĨ:Ž€#ā8Ž€#NÖ˛‚É…GĀpGĀČ NÖrƒģ—ę8Ž€#ā8Ž@V8YË &rGĀpG 78YË î^Ē#ā8Ž€#ā8Y!ād-+˜\ČpGĀpÜ ād-7¸{ŠŽ€#ā8Ž€#ād…€“ĩŦ`r!GĀpGĀprƒ€“ĩÜāîĨ:Ž€#ā8Ž€#NÖ˛‚É…GĀpGĀČ NÖrƒģ—ę8Ž€#ā8Ž@V8YË &rGĀpG 78YË î^Ē#ā8Ž€#ā8Y!ād-+˜\ČpGĀpÜ ād-7¸{ŠŽ€#ā8Ž€#ād…€“ĩŦ`r!GĀpGĀprƒ€“ĩÜāîĨ:Ž€#ā8Ž€#NÖ˛‚É…GĀpGĀČ NÖrƒģ—ę8Ž€#ā8Ž@V8YË &rGĀpG 78YË î^Ē#ā8Ž€#ā8Y!ād-+˜\ČpGĀpÜ ād-7¸{ŠŽ€#ā8Ž€#ād…€“ĩŦ`r!GĀpGĀprƒ€“ĩÜāîĨ:Ž€#ā8Ž€#NÖ˛‚É…GĀpGĀČ NÖrƒģ—ę8Ž€#ā8Ž@V8YË &rGĀpG 78YË î^Ē#ā8Ž€#ā8Y!ād-+˜\ČpGĀpÜ ād-7¸{ŠŽ€#ā8Ž€#ād…€“ĩŦ`r!GĀpGĀprƒ€“ĩÜāîĨ:Ž€#ā8Ž€#NÖ˛‚É…GĀpGĀČ NÖrƒģ—ę8Ž€#ā8Ž@V8YË &rGĀpG 78YË î^Ē#ā8Ž€#ā8Y!ād-+˜\ČpGĀpÜ ād-7¸{ŠŽ€#ā8Ž€#ād…€“ĩŦ`r!GĀpGĀprƒ€“ĩÜāîĨ:Ž€#ā8Ž€#NÖ˛‚É…GĀpGĀČ NÖrƒģ—ę8Ž€#ā8Ž@V8YË &rGĀpG 78YË î^Ē#ā8Ž€#ā8Y!ād-+˜\č˙Û;ĢĒuĖ CGADŊ¨x#OPÁžĢđ,ąŧ§&>{‹1‘ØĸF}öcÉUc/ąD¯ŊÆōė^1jėyO •ĸ0ĀPŪüÖá>ÎŦsæ ́™˙JÎėĩŋõ­ĩöúí}Øžĩö>" " " "Đ9$Ö:‡ģzŠHŦU„IN" " " "Đ9$Ö:‡ģzŠÔUäUĄĶäɓ+ô”›ˆ€ˆ€ˆ€ˆ@%ÚMŦ?ž’ūä#" " " "Đšm,šŠ€ˆ€ˆ€ˆ@ĩ HŦU›¸ú6Xk,šŠ€ˆ€ˆ€ˆ@ĩ HŦU›¸ú6Xk,šŠ€ˆ€ˆ€ˆ@ĩ HŦU›¸ú6Xk,šŠ€ˆ€ˆ€ˆ@ĩ HŦU›¸ú6¨čĨ¸ĶĻMŗüãŸmhVŽ" " " " åLkØŠŠxh9—TV‘X4hMÜ~ĸõčŅcš—,YŌÂļœCĶŽûø6–įląœŧûø6–įlą\õÅΝ߯ë#g‹åē~tũø5âÛx}älą\׏ŽŋF|¯œ-–ëúé×Īg¯ °ŋŸų–û‰ĩÚÚZëׯ_ËÚÁRɅÜ[dUŋuáÛZ0ˆŸø˙g*\­fuũčúŅõŗ|0ĸÕ/MpĐ÷Gߟũū ¯*IŠĩ0`@j/^”ž÷-ž÷m´•Ęį|s6Õ_Æ7˛ČąĘŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ubžļļ‘ŨVSEb­ĻĻÖúôé“Ļ<‹‚\Qz[O”ųžįŖŋę‹_ŧüŅõS yx>ōŌ÷Gߟx=ø5ĸīž?ūoƒîŋ=âߍø}qFl;KŋÔÔ,nę}‡P6U$ÖhÁčÛhķŧˎÅöâ:ĨüJŲUŲy(f÷ÅoųéŒČŖT^ü–][‘QäR.ËT_×׃§x=”ĘãëežUũČŖT^üVũëĮ¯÷R[ŊēŖŲE@D@D@D`% ąVtŪ{ī=ģíļÛŦĄĄĄ¨¤zģķįĪ7^—2oŪŧ?Õéīŋ˙nŒgƌĒŽ\ų‡~HŒ.\ØæaŠo›‘Š‚ˆ€ˆĀ ¨xtÚn—*Ė#īžûîÍm 6ĖvØa;âˆ#šm홙:uĒ=øāƒļīžûĻuz´hęŨģw{v“mkÖŦYvũõ×ÛË/ŋluuuÖØØh[oŊĩüņļÆkdë™Ŧ/$}ųå—væ™gĻĪŽ;îXėēRėŸzęŠöņĮ7ËZk­ecĮŽĩ#<ŌØlī¨Ė /ŧ`÷ÜsŨwß}ļúę̎ÚÍĒÆˇÕÉAD@D`Ĩ'°JDÖjjjl¯Ŋö˛oŧŅÖ_}ģ˙ūûí̝žę¸ô×tĐAvÅWtH_ō^tŅEöÆoØĨ—^jĪ?˙ŧ]}õÕ6eĘ;˙üķmņb!–O—\rI9îĩŲf›Ųc=fÛmˇ›Vē-ŧl<đ€ŨtĶMļëŽģÚ3ĪûėŗÄjˇŨvŗ<ĐL_|qō§„Ķzë­ggœq†ņBäŽŗŗĄÄ‘­‘#GÚ×_m¯ŧōJb "œ‹ß~û-ą!Į{˙>ųäģũöÛíĶO?Mûįž{ŽmŧņÆ6gÎģå–[ĸĸ[mĩUŠ.>ōČ#öøãÛÁlwŨu—|ōÉöÅ_$į”×ĶŅĢ6_į ­ˆ€ˆ@×'0wî\ëÛˇo›ēJDÖŅ÷ßo÷Ū{¯Ũ}÷Ũ6zôh#jDâæ‹Čšųæ›mÛmˇĩ+¯ŧ2­7ã&}à 7ØđáÓÍ#fÜô}ĶŦ?ũôSvÚūûīŸDĶrDŊHO<ņ„ŊúęĢvÍ5×$ņ7~üød˙ŗ(ߖ[nŲE#šÆ>v$rŦO?ũt˛Oœ8Ņ ˆ™1cÆ$.ŦŗÎ:I¸áŋ`Á‚”?īŧķ’8%BšĪ>û؝wŪiO=õT:txÅCŧp‰)í’:jĖŠņĨ8Œą oÆėëö.ŋüō$Z9ĮŦÁ{ôŅGS-ÜĪ?˙l?ü°áØIL%#p­Ŧ?Dˆ“ø‚8ŋÃ;ĖÖ]wŨf›G.ŊîÕâ›ND@D@ē<îC,ĩjkZeÄŅ„ĸ‚ˆŅŌK/Ŋ”""O>ųd*cM$"qÜŧ_|ņEģęĒĢ–›æBđ!Å|2„?žöĢW¯^Íõ‡7‰?ęp īžûŽ Úúoz…&Kf+$W)Gú&šļĮ{ØQG•ÖļqõõõéC}ĸaūVd'bhQŖĩ×^ÛöŪ{oëŲŗ§Ĩô´æškĻhS‘Ôûå—_RQGŲû-Ū"ØHœÃ×_=‰MÖķqūųß׉Hë?ū˜ĸf”û‹›‰0n¸á†‰SŦŖFJūŒ‰¸]vŲņ ŌâüS^mžéāôGD@D K`ÖĄÆŊģ­i•kD9ˆ!B| ‡iLĸ"Hk÷6Úh#Ûb‹-’įŽŠŪmļŲ&E1˛N}Ļģ9įpášĀvLWĶ6SĨ1•iîSmžŪ¯ļ" " ]ëžŖPCŸxZŧôŸ–NēšÅļėũ{ÔÚĖšK[kQŊēn˛ŧRãšįžKO†˛v×Z :|Mž$dŠ‹ŠJD7ōvÚ) ÚØsĪ=“Øâĩ„#=z• ëÖXÅ/ÖFąŠé8ĻH},ŪoÄqņÔ'ŅÃĶN;͘ze\ˆ‘“N:iš.Ķ\ ŅDÖW‘˜žäaÖcQÎ4§'ĸf´ĪÚ;Š rÄ+Q|=—ûåļ5f8?üđtžˆžņĐCd-åđ įqĘT&B›)oÆļéĻ›įŠtâ‰'Ļ5ˆė3ĩF}Ķ.īŖ^ņ4[ęd˙p,‘&Ū9FôÁqōa­¯1AĀqL°aŧ$Ž DÎ;‰-åœSÖŗŅ>OS˛īL¨įLŠ™wä˜éž$#Įęį;å7ëY—Æqr܌-ž¯sĸŽÚbŦ0`|üÜŌv´u_ŽCID@D k(jč‚>.Üí]=Ë›VcíģUO;âī“ÎāžĮ},Ϟ‘ĩMūRPz„éĻL[hã6\Љtt>Ū\鋛pL.V¸AĮ_ Ī šaķņäyˆ#OØÜŽÍë"ÔH^æb Ûņ‹'Ļ4>ļØĸ;c‹åØaÃąš€Œė°QŽ@ŠcĻíØûą^GŽš¸_ú.NœÎ%âĖŋrh—‹ķæ}P7Ö§œ­Ú|9%ŽC ĄöÕĪM‰ĨŌdH˙‚8+iN$+ÖÜyÔ°:ëŨsžÍk hũëã&Öü`ģĶÁPœ8/ŧiŸhRûßögĒE@D ģ`ˆ×Šy-QƒÉķS ŗ}Ė^Ž‘•cÍčJN’rãęS_cێ,¨Ŋˇŋ\hSŋ[jnA™Ē`š×_)RՎģIgâÛMN´†)" @aV‰PûaÆ"{é˙ bmė_͆ h9õ/+ÖjūŲ{L­õĒ+DyŽ}ŽÁæĖoņ‰ *ßąrˇŽíą{ĩ.žŨë|k´" "Đ^Š#hÅûŪ:ęâĮæĻYËĻÕÚļÛč‚PsŨå~q›}Ā€ë„X?ÅZĄg>h°ž^ĐuÃÕØ˙G_ûË Âĸđؘō" " " " yĖPøúiVá÷ž˙sĖbÛë>iƌõæūpÂ-ĻŦXÃąÆâkq#ØŽ˙×B{ëë‚@ëŨ´dęīŖęíßG×ۈ5%Ú"PåE@D@D@DĀ 4,X’Ōdí?KĘ<žĐ&M虄ĐąąFjUŦáDd'ybčš ļGß[d˙3…ÅíË_ĪĻvy?Č ~=Ō+>¨¯$" " " ŨīŠ>sąųËoáÁŌ˛}ūmžMø[]ŗPã- ŧŊ€Wj 5괈ŦaDŦųT(Ņ5^}€`ãCoō§u6uzĪĻΗ‰6ę)‰€ˆ€ˆ€ˆ€´$ĐĢvą]ŋŅvÕhë ŽO¯Ŗ"ĸ†Pķ¨ZŠuk%ŸĨ ĨG”îoëšm4tũō{ƒũīuöۜ6ŖĄÆfĪĢYN9ļ AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx annotate --vcs=svn "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 7B0D7627-FCF6-4B19-8E80-E78B97E72B6C Keywords Shell Script Command Run Unix OutputUUID 89C40097-B2EF-40B4-AF00-209D547885FE UUID D9F8C5A0-2CF6-44AD-BB94-8F63EDF48639 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{191, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Branch.workflow/000077500000000000000000000000001445560650400245545ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Branch.workflow/Contents/000077500000000000000000000000001445560650400263515ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Branch.workflow/Contents/Info.plist000066400000000000000000000011671445560650400303260ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Branch NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Branch.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400302525ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Branch.workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001107041445560650400327060ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëViCCPICC ProfilexÕYy8U]Û_ûĖį8ĮpĖķ1Ī2™įyž Į<ĪCD"‘Ą”D‘D*C(eLB¤"’(¤¤¨I!ßVĪķŧī{}×ûß÷Ύ¯k¯ũÛ÷ē×ŊîŊ×Ŋ×ēkĀžLˆAĐek¤KqvqĨ`§pČ@„ęĄcmmßũ—cũ€vĢFĨvmũĨ˙&fđņö˛†ŧ|ĸŊCa| „ŽwDT Č Xū$>&ƨ0fŠ‚„ņô.ö˙ƒWvą×oŒFũÖąˇÕÍŽHĨFų@„å”8oØI 9Ė'0 FgkzP}`? ëH†††īâ^‹zũ›˙ÃTĒ×?6ŠT˙đŸg[ÂëFG„P~ßü_Ą!ąđûú}á’bš;6,đščCÕ7ƒ¯\đų+"ä÷˜Á:‡o˜ƒ,ÛŒa^–VaMŋ(C[Ãm!ëˆŨ] ŋ3Č/"ÆÚū/ųĄÄ=Kayo´Áßv.QMwĮŒ–7FÅÚ:ĀXÆ]Ņqv0†# z“`īô—ʏ¯ū_rÂ/ĐĐ䏂c˛Û<æüÁáfģ>Ā}!”€ž DÁeæ@č˙UJ?@…kâāēh ` ˇ‡Û„Øō—žŪ˙’ūnįˇûO‹ā ëÆūĶįŸŪ(pŸÛ >0ū[N…ûØ­Ûõ.Ú#0í_}ū­ąkīˇ72ĩ2īeļūö %Œ’C)ĸtQ(M”*  XP@ Ĩ€RAé ´Pęp*0o`Ëūû¸k?´Ņ/îlx‚šc\ģûė^×Įßځ˙Ü˙/@āĐrËōßã{ūĐ Hˆ ôˆĄčĀ_ޝ$Å$Ė[Z’"'#+ģ[ũ˙æØŗū8ģjû{.‚X†˙% P@},ú_˛Āj?Āįø/™`ūâԌxĮFÅũą‡ÚŊ ĐÁĘx€…ßŗPę@S`ė p‡ã'ŽÁ(’@*Č9ā$8ŠA¸Ē@h- tƒû`<ã` Ė‚ˇ` Ŧ€u° A"AŒ;Ä A¤iB9d š@ž?ÅBIĐ(ʇŠĄr¨ēĩAŨĐChš„æ ÷ĐWč'‰ "˜ÜaÄ„ Ba†°GėGø#"‰ˆtÄ ÄYDâĸŅ@Œ#fKˆoH€¤A˛ ųRH¤Ō éŠôCF!!ŗ‘…Č d=˛ŲEÎ"—‘?P#Š‚’‚ãÔå€ōFEĸĄrQŨ*T3Ē5ŠšC­ ~ĄIh.´Z m‚vFûŖãŅčBôtē=Ž~‹^Į`0,Œ2Æ゠ÂÄäbJ1 ˜.Ėfķ ‹Å˛c%°X+,ƒÍĀžÃ^ÃŪÅ>ÅžÅnāhpŧ89œ!ΆKÃâjp¸§¸w¸M<=^¯†ˇÂûāđyøJ|;~˙ŋI` ˆ4ö„ B*á,ĄžĐG˜&ŦŌĐĐđ͍ԨĐŌĻ9KsæÍÍ"™(NÔ#î#ÆO¯ģˆ“ÄU‰$LŌ&š’bH'HÕ¤{¤W¤ ZFZiZZÚÚÚfÚ§´ŸčđtBt:tît‰t…t7é†é–éņôÂôzôTúCô%ômôôßdŦBrj2,’ąda˛Ų‡œNžDžGžgD2 0ę1z3aŦdėc|˄aa2a bĘaĒcbZa&3+0;2`.ažÃ<˂df1a aÉcidyÆō“•›U‡Õ—5‹ĩžõ)ëw6N6m6_ļlļļqļŸėvö`öSė-ė/9Pâ6ņ8ú8–9™8Õ9Ŋ9ŗ99_p!¸Äšlšr]âäúÆÍÃmÄÁ}Žû÷2 6OOO'Ī{^F^MŪ@ŪŪģŧ(ĖJå,Ĩ—˛ÂĮÅgĖËWÎ7ġÉ/ÂīŸÆßĀ˙R€  "ā'P Đ#°"Č+h!˜$X+øB/¤" T$Ô/ô]XDØI8S¸ExQ„MÄD$Q¤VdZ”$Ē%)Z!:&†S +{"ŽW/–@H(IJ”JŒHĸ%U%Ã$+$'¤ˆR:RqRĩRsŌ,ŌæŌiŌ-ԟöîqŨsjO˙ž_2Š2!2•2S˛dYSŲ4ŲvŲ¯rârŪr%rcō$yCųųVų/  ž ž+2*Z(f*ö(n+)+E)Õ+ŊWTöT>¯<ĄÂ¤b­’Ģō@­Ē̚ĸÚĄúCMI-F­Qíŗē”z°zúâ^‘Ŋž{+÷ÎkđkP5Ę5f5)šžš5gĩø´¨ZZ¯ĩ´}´¯hŋĶĶ ŌšĻķIWF7JˇI÷ģžš^˛^—>RßH?[Ȁlā`PlđʐßĐß°ÖpÅHŅč Q—1ÚØĖø”ņ„ ˇ‰ˇIĩɊОi˛i¯ŅĖÎŦØėĩš¸y”yģÂÂÔâ´Å´Ĩe˜e‹°2ą:mõŌZÄ:Ōúļ ÆÆÚĻÄfÁVÖ6ÉļߎŅÎÃŽÆnŨ^×>Ī~ĘAÔ!ÖĄĮ‘ÎqŸcĩãw'}§|§Yį=ÎÉÎ...­ŽXWG×+ŽßÜ ÜθŊŨ§¸/cßŗũ"ûėčÎáâ~ĮƒÎƒęqĶíéäYãšEĩĸVPŋy™x÷ZņÖķ.ō^ōŅö)đyīĢá›īûÎOÃ/ßoŅ_Ã˙´˙û­€Â€å@ŊĀâĀ/AÆAeA߃­‚¯ī„8…4„âB=CÛÂČaÁaŊá<áÂG"$"2"f#Õ"ĪDŽD™E]‰†ĸ÷GˇÆ0ÁÉá`ŦhėŅØš8͸’¸xĮø›„LOČJx—h˜xų ę ÷Áž$ž¤Ô¤šdäōCĐ!¯C=))é)oŽJ%¤§>N“IËO[;ât¤=;ũpúüQŖŖĩ´Q™ę™eĮPĮ eÉgËú•í“ũ(G&§0g+×;÷ŅqŲãgīœđ;1”§”wá$ædØÉg§´NUå3ä'æĪŸļ8Ũ\@)Č.X;ãqæaĄBaYĄ(ļhöŦųŲÖs‚įNžÛ*(/Ņ-i8Īu>ëü÷RŸŌ§´/ԗq—å”ũŧxņyšQys…pEá%ĖĨ¸K •Ž•ũ—U.W_ḒseûjØÕŲ*ÛĒŪjåęęޚŧZDmlíûkûŽ=ŠĶ¯k­—Ē/o`iČšŽĮ^˙pÃķÆŗFŗÆž›*7ëo Ũ:ßÄØ”Ũ 5'4¯´´Ėļē´Ž´™ļõ´Ģˇ7Ũ–ž}ĩƒ¯ŖäķŧNBgzįÎŨÄģßē"ē–ģũģį{÷yž82ųåE܋ͩÃĶčéė—ô/ _qŊǘ›i˜UšŊ3§?7øÚîõÔŧ÷üŌ›č7[oĶH …īxßU/Ę-vŧ7|˙äƒÛ‡ˇKK›Ë>ž˙$úéÖgí΃+Î+oŋD}ŲųšģĘžzuMa­į›õˇWëĄë›ßŗ7Ø7Ē~¨üč˙éôķŨfüvëėļØvû/ŗ_Ķ;Ą;;Ô(ęī\ —??ž^…9„ Ėž@ ũÃ)~kĀt‚u`Œ„ķ_a` į§×ÁwH J‡&ęˆjxŊ€EuŖŨ1Ķ‚=„ŗÄsã734O‰¤G´éÆč—Č8F)& æT–kŦ/ŲŲ8,9s¸†xx-(š|ã|‚ūB5Â_DÕÅâÄīIĨ ¤“ötÉlËÉĮ+\Sü¨,¤bŖšĸV¯>§Á¤Š e­ŦS­ÛĄ7¤ŋbHcÄjĖg"eĒlĻgncábéo•f}ÎĻž ^Ų¯8'g1W[ˇČ})ûO¸WytzŽPgŊžú |É~‚ū z–AÎÁž!ĄņaIá™Ų‘ųQyŅ'cÎÄæĮÄ8p21ã`JRlrĖĄ ęaįTŖ4# éRGy2č2v2W-gMgä´åÖo>1{’õ”Q~ÂéŌ‚Á3;E2gŨĪĨוŧ.%]/ķŧ˜[ŪT1Y‰¸,zÅâjlÕņꆚĄÚutõ˛ Ļ×Ŋn$4æŨŦēÕ×4ŌŧØōĢŽīļL‡æ‹NĮģ>]áŨzŽÜËī=ßW{ŋĨŋįÁŨ‡CÆß<ē<ûÄ`„<2ũ´aôā˜á8y|æYũÄÁįĻ“ė“o^´NeNÛŋ|šųĒæÂläœūkÖןį{ߔŊM\px'ģȰøķũŗKÕ˧?Ļ~Šûŧđ%đkđjÂZîˇęõŒ?ŧ~Žl…ürßŲŲ€ƒķE!°¸‚C LÁ™t šBČ N!~"C‘Pqh"ēc‡%`pEø‚)Íĸ(‰—–…Ž›^’AlĮɔË|•åë:;…Ø3˜+Ÿģ™į%ΧĖī&%Ø&4/B•ŗ•8-y[ę…ô7&YU9ų…bÅ&Ĩnåį*[jŒę{å5Œ5Ŋ´âáh8Ŗ[ŽWĨĶāŽá Ņ”ņĸÉĒéŗ-ķmK”5› -Ÿ¨Ŋ‚ƒŠŖ’“ĻŗŠ‹™ĢŠ›ũ>§ũÖîļļžöT7/Go'_+?sĶŨ@Í õ`ųņP0Žp–r$}6Ŋŗû)î]üˁɄ§‰ŪOęIn;Ԟrķp}ęÕ´ō#ĶĢŽöe,#eIdæøææŋ~b8īã)BžâiĮ‚č3Ņ]EķįPÅ%–įcKË.ô—}*gĒPŊä^™{šåĘtĸZ篺6÷Z[ŨBũuÍŅnÜúŲŧ§Åŋĩ°­÷6Ô!}'°ŗėî“nLÎŊÔŪŽžĩ~*÷>ŌPTzŦ4¤4ŦôDvDüŠÄ¨ČĪ8Į3Ļ âsü$4šũâķԇé÷/ßŋš›y;;37÷zvūå›ųˇ6ŪíŧĮ}āX’^Öųh÷)âsöJ՗¯_Öxŋ™¯'~¯ÛXø)°šĢl{q‡˙¯ņĮ˜o) ˜æƒ;āÄšÁyû Bq1Š”E ˇQĄ¨7h/ô"&ŗÍÉāâÃŦ„šĸ$q‰TOC§ᑪ •äDFk&fˆyŽĨõ*[&{‡=§—07–{į-ī Ĩ‘¯„?C LĐFHK˜_-˛!:.Ö,^*qXŌCĘPš"ŊĩįšLŊė9WyqŦ„âĨĘ*"*;ĒãjUę‰{-5$4QšSZ×ĩéøę*ë1č­č\6L2r3V5a6ųlúĀŦÜ<ÁÂÎRÖ kõÚēÃĻĐ6ÆÎÄ^Č~Įášãu§,go%Wzסö}yûũŨu<8<>yvS‹ŧÂŊ |¸|V}ø•ø‡hrĀk}o𚐸PÃ0ž°ux]¯<å­Ã bgãzâ+¤&ø$ObHÚH~u¨7ĨîđųÔ#iQGÜĶmŽjfHeōcĖBgũĖūœ3Ÿûüø?ũ';O5å7œn,h8s­°˛čōŲ‹įƊ+JJÎW”^ŧpĩl¨UĄp‰Zyârį•Ĩ*†jÕīÚã×ÚëØŽ›ūŽĄą&RŗnKTk}ÛįÛrîÜŊKî éž}§7ĨīSŋ΃éGÎĶķ<š˙4vĖā™ÄsÆBĶF¯Rf?͟X{Ÿ˙ŅæËđ†ķîø˙Ų[Ú]0JœõĀ…#r÷ Ü+köĒ!Í o=ŌÍûgũ`jđĖ‘Jaž8Ą Q˜F@0ߛA`ŌD2â2â âRiƒLFÖ 'Q8x!fbCh$ZŠž„žÂ0cŦ19˜~,k„=ŠíĮ‘pޏbÜ<^ ƒī%0|7i°44­0ķ %> ‘rHĢ´N´í0›)Ĩ'Ō¤_acøH%¯0Æ0ū`:ÂLd>ÉÂĘRÉ*ÍÚÎfÆ6ÃĮAā¨äÔáœäŠāfänãqáŲâ­¤XQ~ņÕđī ô &Úūwá6‘QC1ąIņJ‰IS)Qi´ôĖž>™*Ųlšxy_…}ŠvJVĘ*†Ē&j–ęž{5â5Ķ´ĘĩÛtĻu?é“ T ũōkL.›ž4K5O´ˆ°ŒŗŠ´Ž´ņĩ ŗ ˇOqČu<îTä\īŌã:âļ°oĮĮCÃ͉šæUáũĐé'ëīP8 BtC…=‰āŒ ŒjŠūë×|€”–ø$I1ųR ÃáCŠ;GBŌ?f„f.gd΍8ž‘—~J4ŋąĀėĖxŅĄsF%öĨ!eGË[. _AUŠÔD^ģ\?ƒũĻ_Ķ…–wí{;ĸ;‡ģI÷¨}- G.ƒeCK#ŖYãˇŸ“_ØL§žęũ:ĪúÖøíû¸ĨC“?Į~q]å][X?ˇ!ųãę&~ËvÛũ×áßķ‡,ŧŋUúĀˆ2b 2č´Ž  Ėa1†D"åTd>˛fäR(OT!ę1‹ÖE'Ŗ;Đ?1ǘĖ,Āęcŗ°Oq\¸\+wÅ×âœ7`îëKĶM"Ļ_“ĖHí´ÚLÚuē@ē—ô6ô} j wȊä&FuÆn&cĻf7æ–XV,ë6ļgė45œœk\ÅܚÜK<xÍx7(×ų‚øyų§ĘŊ„D„–…¯‹ĩãû.>$qEō˜”Ÿ´ŅYŒėšÜŧüS…{Š]Jˇ”á4TĩQ­MŊsī}1˜%}ĐAéŌę‰čkė3L4*2Ž3i4­1Ģ5o°hŗėˇąž°™ąũb9đ8J9Š8;¸Ä¸fšUėģģÎãÉC5ķ ō>îsĶwÚ čt.¸'äk˜x¸wDiäãhŖw#ūk‚JbäÁē¤ī‡´R2¤‘ŽXĻ—ũš)},;k"‡'7ęø@ådôŠžĶt^gzŠøÎk—,•—y”3WŒVæ^ą¨Ŧ~WÛP—ÛāyCų&×­ĩæéÖļö[ĨŠ]>=nŊ{ī+< Ÿ+w|,/ę1ŋŊĀöĖvŅųsä⸒ŠRë Ũ•ĘĢ/ņTV\žZį 7¯)×u4h_īk4š9×ÕŧۚØļ}ûôĄÎĒ.ņîk÷¤{îËô_{Hû(wæqÔĐü›‘ëŖ´c!ã'„žž|6Å6íüōė̉Yæ9ÛיķõoîŊZØYd~/đ‰o™÷#÷'öO۟_­t~)ũ°*ģēēvã[č:e}ü{ėqŖō‡Âģ?Í~>ÚTŨŦÚbŨJÚz°Íŧíĩ]ŋŊųËč×É_“;;!;Íģãí'/ˇģzˆ¨ o?žÚŲY†÷/ķØ>ĩŗŗYąŗŗ} &đ?Ž?˙+v•1đžûųŦ]tīFÕîå?Ž˙Sßy‡x>a IDATxė|UEöĮOzGETPé ö ‚Ŋ7l¨‹}íēvŨũÛëŽkīŊ‹ŽŊaÁ†;" Jī= iī?ßIÎc¸ŧ—÷I^gōš™;3gÎĖüîܙß=3÷žŦéͧĮĜ!`†€!`†@D ģFÖĘ*e†€!`†€!ā0˛fÁ0 CĀ0 Œ€‘ĩ|qŦj†€!`†€!`Yŗ>`†€!`†@ FĀČZ ž8V5CĀ0 CĀ0ŒŦY0 CĀ0 C #`d­_̚!`†€!`FÖŦ†€!`†€!Pƒ0˛Vƒ/ŽUÍ0 CĀ0 :!`TąXLJJJä?ūŋūúK.\(uëÖâ9pYYYŪˇđډĮ“ˇįHNÎę=÷fšĻļjĶPvīÛVœŅQ4¨ģR_đ*øgũŅîˇ5oÖĻū^ˇPÆTfŲĪMe {+¸# Ä ĸ6lØ0Š_ŋžėģīžR¯^=OŌrrrjqëkw͏ļz}ņ‡™/íÛ4•lGēáŨîŋ'āąR.3œËåō‰ģEÅ1™5m‰ŧüĖYđךéž])}vÖÉ´4Wåü×úĻÛU>Yé¤Gë 'Ëkņk\kíøkC_ģN¯ļĢ÷8˜žN“2ÖimܸqŪ˛ļ˙ūûĮ-jL˜Ĩ{é¤Î$gáXŦ-xpš–ŗ DōJDr‹Ũ˖\GÖōܑīØá\|—ļĖųy%Ų.=[mØLœŋŗ,nÖ@?5nĨ ą2o ŠôĮœėlɏ2ë/×fčĮĘĶO?'kÄ!¯‡õįX€ImĀcméī•yīÔ$]ļ Z“ކÕĨÖ ĀĀVTT$ĩmļŲFŠ‹‹ũÁä^\\ä'BdČÍ_ģpāęõåēÎ_“šE’åÉM‰ģĻĨÄ[vļĪ>xKúės°šKî^ĖYל…Íųy…YŌsŸNōÎc_Ëq§t’:uęø>QŲ7‚Ö7U¤ÜÂÂ"ųkú\gŽ/%TØ×\!ˑe˖Ę|$Ž9NfĪžëú1æCמâiŅĸš[.ĩ[ŋŽ=÷õÚØßéĮĩÍYĢ„+ēhŅ"ÉÍ͕ļmÛV‚6Sąē0͚5K^{í59ëŦŗ|v&‹Ēt”9sæLyũõ×–IzaaĄˇŧ´iĶÆˇb?ÁCÔ œ•­žŸ”—,Y"/žøĸŒ5JN?ũtéŅŖGŧ ˇÜr‹×ßŧyķ8ÁĶvé„X•áōę‡å…vâđŠOXß°~3fːW^yEÎ?˙|/OZ˜NäÚĻ­āį/)ŒIn3­šuŠlGÔbnŨSģ߯? “k/>Snz¨ĨôÜn7““ô$¨ĐYâ–ģŧÍ[7“ÉŗŗŊ>Č8TļKÕëÔŠĮņâ%ōũø<éŅ}ÉÍĪ“:uJaAž4hÔH>úĄ <ņdéŨ̇,^V(Ë틤qãF2fĖOÔ5j¯zØ?ˆ\Ķ닎¯ŋūZæĖ™#‡rČ*8­Š~Ë_J0Á§xŦũŊ´ĩëŋ-ƒVāzŌyõ8īŧķä¸ãŽķ“lßž}ãņ¤¯ŽSøƒ ō“›Æ­ŽŽĒ’×úāwîÜYĻNosU•™L¯Ö…ôŲŗgË3Ī< Ķâ‘åœ0ųĻãBŊLŅ2ŅĄ2˖-ķįX_ŠŠ ˎ")r–‹bGۘė)÷ŅG•ŸūŲ_söļ5kÖLōķōŊ%îŪ{īõ/%”8Ëōq  sN~īWr8Yũ ZžÖĮˇŖŦü°žaũ k=öXŧžĄ~ÕĘĶۚĻŊ\C|ČZ^QLōŨõ\^T"šŽ|å;Ÿ¸ÅËōå[¯öŨęÁÛŽ’…Kķ$×Å#“[(N.&ŽīČRįį4k(K—.÷°/j9r¤ė´ĶNqâĶqšŋŧū¨xƒ9ĮäyŲōĮė,7ŊPŪ}ûMųkn]ųęĮɒˇpĻtÛLJ ûúWųūģRŋACg!tĩČjāō­čŸz}ŅĩŪzëÉV[nå-ĖŊzõ’Į\~úé'ŲjĢ­|Yž9ü’]ī0ũûīŋ—÷ß_ĸõÕpUŨë˛ūęîīéôéuQÆ,kĢyÕÃōģīž“ącĮēeŧ–ŧŧŧ•´!ËĶIEÜũ÷ßī÷8iŪ5ŅĨ:ÖÔێ.ÎĻM›ÆÕ֔:Ļ‹šļgōäÉrÄGø D“Ž͟¨ŨL<~YËO6.ėfY?Á_ä&6y?˙â xüņŌŊ{w7nüx7ųąUčĶ‹\ŪBGöâuÂ*å%K˙1eWf˜Ĩ/ÕGũžpõ;žŦ~ԡБöā¨Ķō‘åˆÖ}`@mr ‰ëGŸæęĢŠábGKÜ5ĄM´'ŋ¨ž¸uÍ,ˇŦY’í–H‹ŨR ƒgČā'eöô)R¯~įO•w?.Ž8 GZŨŌĄ;r K¤°ÄíijXW–/_î Kü:;ĀLũãŖ>Ō ÷IåWJ åõGÚ@DdgšëŸ#Į,tāER°l|;ô+ŠģŪ^ōÃgīɑ{m) sEƎ›"‹ΗÍ:oīp(–9ķ—Ëú-ŗK÷eērũ-×.­˙‹/Ŋ(;v,­‘ģæā÷駟–ö ë{“ģEĸũüÚ?8÷„Îųáũ@zĸūXZ˜ÃPõ—EX¸ ī4ņ¨ÎūŽ×ĖüU0ËÚǘ¤Á™ËŌoŋũæš øÁ‰´ģîēKöØc9á„dĈņøūũûû%¯]wŨÕ[H÷’ËÓõč'ųkŽšÆˤņÉ&ËíļÛNvß}wųæ›o|ž?ūX°æą$Ārœę ũ^xAĐõ÷ŋ˙]Ž9æ˜rķũųįŸŪJ-įÎ;īôåžxâ‰ōË/ŋÄˁā°üxÎ9įČįŸîqŖlˆæsĪ=įå4o‡‡zȡ•ö|öŲgqaŨ“ɨNębK4?ØėšįžĢ`ņØk¯Ŋŧ…‚ëÃōõå—_.sįΕũöÛOŪxã ß-#Zo&˝wŪŲãŽV5-Ķg ęĀÄÂ$ČŲō厠aMsqÄë%ęģoŋ•ë¯ŋ^čũúõ“ūî ^\‰ķ9Ÿ0a‚¯c‡Ų­ˇŪŸÜ‡ēļŌočSˇŨv[\^Ë ?y;ė0éŨģˇėēË.>šž‡Ķ÷ėŗĪúūE|,RŋoËꇙzLúã¯kÛmˇõe~âō0áŖ/Ŧī{īŊįËÛÍÕë‰'žđׯ—éd‡ âķ‚ųĢnyŊ¤]pÁōĐČŪ{ī-7ß|ŗ×{ļëģāBŋ\°`Aŧ} ­oĻÂŽ˛œ™į–Bķ œeÍ0ŽžG!÷ /÷–{8ËYԊe™“Yęääģ—–ĘÔÅ7GÖ|[Üũ“Ėq ˙öˇŋÅû8ũ˜Å}öŲĮcÉ=í‹čŌ8đMÕõú,[”' ä9RTGvÚį|É_–+%šS¤S—­eÎŦŲv‡>˛įŪ‡É|ĮÜ|ÛķŨ¤Ī]Gú›×S֏¨ƒĻŠ~rĶ#ĪŊøîģīúûj{w‡ZšæŽīíŽOoŊõÖžĐc.NûËŋ˙ũoŲŲY>úhųņĮ}žßF–ƒ:Hūûß˙JˇnŨ$ĪY¸UžōĻēņtĀ€ž,°ûé‡âéŒGƒŨ–îqúũ”ú.Ķyß}÷IgdėaéWëīũŌĢú~¨ŽūNŋ1ˇŗŦ­Ā"åƒN?Lú't’|đÁÂDvöŲgû}“&Mō7ų‡~č÷!1éŧôŌK>ī”)S<Ųb"kܸą<øāƒōûīŋû%EˆK ¨,ąé˛ƒNëÖ­ũrY#ˇoĈn`¸úęĢ=IÃēÕבļ8ĀÂTöoņâÅōōË/ûŧģ¸Iš !š7ų¤Dĸrø>VØöWáh ua`ƒ2ā‚ $ō˜(/8`üĪū#Ç÷K$ŠkY•Ŋ•҉lâĉ+Շ=R”M:]œ˙ķŸ˙\ mã%—\â‰+× 9öŨtĶMrä‘G ×—ŦŪ¤]qÅËŽ]ģĘ#Ž֕éĶgČnōۍ6jëúŨGōĢÛË÷öÛoģēĸ_Vjõ÷V˙ô2Ģ]†ŠDI ÂPčˆx‘L[ZGšĪwÖĸŦ:R„uÍí[sīûršãŽzûŅÃũÃ˛F‹ã÷éŦ|wšÖqqĨøáGqXŪܧ–ŧéÜ<=˙üķ~i‡îAōjq õ&ꏅîabŠs¸xQ`Š#7ÎĪwmsŊUę4m,ŗfĪ”MÛ6–MÛo$K–ްpųåÎœŌ°ŽWŧt ûÕ° âž|ōIw¯ˇtŸ'iā—ûųŪ ēôŦb<Bč}ô1ųØ=ņĶģw/™4éO?v˛ßŊ×\s­'~ėķœ#ķį/đV˙ūũû9Ģđ0wÜurD˛´˙Đ1˛ŧ,ũë‘Gs˲OČ͡Üė0+ņõøņĮŸü”áÃŋ‘sĪ=Wžū­H`ĢÂ!‡ęę÷ąÜ}ĪŨrà ×Ë<īŽNGÕ÷?ßḭ̃GõģFU{§Ī˜[#k+ã‘vˆÁíĸ‹.’wÜŅ[gxę{ꊧÜōŽ,™\‘cšK –7Ü?ūņOÔ8Į:Å@tÕUWyŌąC¯ę‡´@– $ä'PubÅÂi92% >Áũãé‘Ŋ.äe"¤.šOã°¸$*‡IŨa[¨{ĢpäĮĒáaf/J—.]dƒ 6{îš'a^ځUfāŪĸ‰ Œpr‰Ę`UA&ļ¤q@†¨C´āEy„=†8ĘŖūäÁá—Ŧ͐8tđeņųD‡N‚^‘û§õá¸BŌqÄķÖ`é5r{ŲG¸JåŊ„—+ũį‡MOŧ˜¨Y6b?Û÷ßįąūę̝ŧĩŠ#:SÚ|øá‡ûŦŠ%ōb1c¯O:9ŪÚE; Z\wũ¸Yŗæž^>ĸŒ/„õŖ"…îåՕíŪ$ŠŽ~O’ĪëĒĩ™øž={ú¨ŨvÛÍ?40Ą1éQׇ~ėņášŅGI?å”S¤]ģv>_׎]dŪŧyžBđˆÛžû ÕđĪ_+–=)ƒ@ÔsסĐMŌŽŽÚpͲÜ۞øĨŽĮŽžģôüwiŽĖ9a§BŠŗr¤~Ž{ƒÔ}Wû RĄĶx|ũMŨu×]'-[ļ”N:yB„L"LTGĸūčÚ?U7o„BÄr+rdgyū™9aŒ<ëHwVN=ŲŊ΁Îgúp/F8bWčÚÍõĶ{Ą´.Ĩ5mÕĒ•āäĄ0Ŧ_éÛ¤Ĩ2ŦŦŋ~+éÔš“<ķė3N.ÛYė?ķũ‚‡Uôņf5Fܐ!l?‰ÉmˇßæÃXÖčŸYîš0ūœ|ō)>^ËC:š5oæežūú?~œī_’Žtō ?>÷īŋ—kËÕ2jô(˙M 8ĘËuÔQū^+))^iģJØ/X ūųžSũŊ@V%M0˛VX}įu7ŊúL2oŊå^Īw“&ûØxKIK“qÉęÍ21mĨ,=įčˆ:Ž“—~Ō ë$BÎõÃĒ‚ŒåĸoßžÂ&°\ũõ},ē",l8,¤”ĄŽúą Ö2!R8 #ĪĄaō†íŅēũ4ÔÅŒŽ0?V“&Mšx}čŅüøŧ ‚…˜žD˜k¸ųæ›ĮËõĐF"°´qĐØģ… ŽüĒßG¸UOå€GÃzî›iîpÔF5÷Vĩ˜›øųh°ŒöϧoČwÜŽŋô>čoa+qûš°‚ōöč˛å.gŖzˆ$u”Ĩ‡–0í§ašâG顋öGԐ׎Pãē]^,nEî‹p 4‘Öm6“z=Ī‘/Į9ËŪüOäĀCNp˟îŗ%ķæH#g-rËžYβ¨&”ËĄúX˛åëuSę‰Ķ{ĶÜ?ŌÂ~DŠûÚÖkH;ĒĢŋ{PíßJŦŅWŠļ@:0Xp͉™°¸q7Úh#oqÁ‚ybŠ”ƒAL;=>3G”6ÜpComcOq¤ĄŸŒũ;XÖØûD>ųķį{9Î9xÂ&ŸæÕs|ôrPͧu#õĮ-ļ…rBâ¨õ…t˛ÔÁkä!ËS˜—ōțŸŸīÛAãS –ÔQįLū´3”A'ēą’­ļ;ŦøDÛČĶx‹-âV ĩœA:ĐÉ22û!CäOVo,¨<ÕŗdC>öب ëOapåÚsPOĖ8×0ō ō:Á„aâ9üun‰|üøņ~9KŖN~Ô\îžûnĨęÕ2hû÷XĒD×´iĶŧ5ĄÔ’ĩbōĶ:j>­ˇÖ°.šŖ‹ú˛,Gä´î,ƒä§KĖČPwō Ģ*¤ }Z>aî/Žû ąÎŅŋ´}Üz§įøUV|´œFusYĢ#Ũ/4);š:KŲļ{, ĻŽ—ŋ~&ŗ'ü*Ûö?Bššøfõë:ŲēŌČÉ6Ž—ãŽlŠãöŦiŸņ€˙´oŠOĨ˙áô§:TÖGņŠú#m÷ˇ˙./šŒüō)ųūã{eÜȏü'g4¨īČiųÜŊlđÄ#ˇČ˙^|ČŊšœįȚŗhšk–¨QtjÂ'ŦņzŽ×^ÃøÜ‹l—ĀK?×>Œ,ĮŒ/ŧ•Žũˆ18ĖĪ9åaÍĨīpYcŧ‚üƒãŒö7ęÄCaöÕAȸĪp”O'íË/ŋ”~ũúÅۋŪęęÚīĒĢŧęîīlûˇ fY[’ÔÜŦÜôėÂĒÁ öAAŧ8 L XĘXd_ œ¨zÎÆo6†ķdt c}b?ƒV1&.6ŖßqĮū\›l˛‰ˇv°G¨oßž¨õNË }–#Â|X\.žøb_W^Bā;eZÎe—]æËa#pymaâ`s;ídylˆŖ.Q ƒ`E|ûöíũd|à 7Ŧ‚ Ö-ČëĻ›nęeXî tFëÞuČĐFöÄҰŅ62đŗ\Čr…!„ėįCžŸ‚bĶ1XĐūhŊš~† /ŧĐËa:ôĐCã8kųøā­ŽÉƒœ\H㜌Τĸy‘ 'dxéŊ‘¯žúǝ  ˛Ë~2di;} ĖĢu!ũˆ &Ožėq ę´l­'ņčŖ\ÕÉ9ûxč+āŽ.ö@2qhYčĸ¯ŗÜĪ^@&<ú8Žü|wŽļ C¯} ÜUFÛū™{ų„}‰ôęÃ$K]Âzĸŗ:bE{9‡¤5rûíbŲÎ*햆Ũú ;˛ĨiŖÖrôųˇĘ× ’ÃĪŊÁ=Čĩs˟W—Mō….“S$M ęHĶ&ü6črß Å‘€žãë98h_Ã*O\ˆ‰æ#=Ú‰KŽũ]„ Üž5ˇēi΁’ŋh˛,X4UæÍ™"šËæIŗØŸ2wÎ,gáÜŪíaëä,pîØåš‹Ļ>/ũŠōŅĨN¯™^W|dôPšh˜q…å{ˆ÷)7äˆcU"›ėUŠĘĨ,,ŗUösŸĶ‡yhceĪ0jĄã%">/šc{‡ęB1{é sŒOXūŅÍA9Ąœļ§6øÚFúįUŲßk^UÕûmĐÕ@V=|"7žüyÚbŲ“ŽŒ#Ë 7s"§zŖiadIķĸSõRo,F”¯õÖ48دIŌx­ę$ÔŠ >eĐF-Yâ!–z]Tž8– ōĢ㚃ĩNJÔ=<Č^,U3¨ķԈļ“xōS6m¤pp=pÔE–ŠqęĶ&,\ēI<{ņˆ -'Š™–/Ž€'mTũ”GũĩMZ>uŌ:rŽōZŽö̓¯éČ+VčĮiT†žĻV5Å]åT–úCđÁ0Ä9چhũĒ*Ŧ˜p-!üĪũŅBÚ¯įîIژí^pdMÛÂÕ|ķáÛåāĶ.ƒŋšë Ys‡3ŒšUD÷i‘LœļPfŽ)ö¯ī÷Zq !O8p+ŊsāCm'e*>Ä)>éôGöcQí™=gޜpÍŌļ]{ˇ#MܒusWŸzRĮé_ŧdžÔ™ũ‚\rņՒëúqnî2÷ŅÜzŽ´Ož;´ō׈~DŲÔSûõÕúpŽŖūÚâ¨w´]¤3~poj˛ęhũƒ~¤Xā+Z.qZ'í…ŧĸĖy{”=™ôĩđ~øõ×_ũÃ5äš××ļjY‰ę¯uÖē­máęėīzMÍ_ÖĢĻYL ¸ų˜0yęį ˛r3+™Đ•xÎ9Tž¸DNe4 ]Ē'ŧᕌ¨œúa9Q]„ÜÔŠ^ÂZŽ–ŸŦ-¤…ē5z4^ķËaĸĮ‘Gõøˆā2šDûúhūP§–¯e)6Ą ƒˇÆkšø͏֛˛ŅA<×\–ę×8Ŧ  ōLL”ËÁFš‚„9WũZ-ƒ°ÄašU]äab˛%N' |¤iį,Ķã㴞øČĐ^&uČQ/&ðNš]Z/tāĸatj|"}‘@ۃlX/ôQđB†úQWõU§æĶ˛Ē2Ŧ׍úPŋ–MKĶfî×@áŖ>íØ/5(uƒŽŧĖSJŌx Á5Į]qũĀYēōęH=wŌ`ŪwŽûÄÛŽyՏļ“rŖqN–V^¤OĶ.\Ŗ† ¤ßĻcŨˇß&ú û%°J÷š\Ģ:õäû)#äíW˙ëKsß7x‹âÚ°Ī‘qŌÃ5BŸbE^ŊÆÔƒ~¤įa5Nۃ\8&‘:Č­>diĘŌ~BœÆSΑG/VāP†žÅ>5u”§ũ_Įäk9øčŅúi™k{X¯auöwÅŪüŦ™WÄŲY荈hx “a:ņ øŅ9Ķ<LJxÎ5^}M×°ĘéMĻåh™*úœĢĶ2ȝ.,ƒ8Պ釯åkZ4o¯įękŲęk<~ęÔōđ9BŲhŸčŠbÍæ×ŧ*“(8r,KŧÉO‘1Š0đQ––ĮSŒš6Ą ÛĸičVš7l¯ĻŠeh:žÖ_eȃžĻŖy&Ĩhū0Œ\4æÅĮ…åj_ËĶzžk_Õüšæ ËÖüøę*;]ËVũë¯Ī^>WoFSw`Aã Ē=–sß#Ũ?Ŧj\fČZ‰#99ŗGIģ† }‰ÖUËĀ'MĶņ“0MeTNķNÕk–øĪ>ûpŋG K}–4>둓ãęō)îÛvnŸän{ú>ŅĶÍö`ŖøhßÖ:h|âBˇļ…ikXįęęī!fv!]´ÃĒŒŌÕcrëôöaąˇ‹hōÖŖîŊ 'špbĐžB*Ŗ>r:ą §‡Ļk8礑_'Id´\|='^õqŽų4.ô9'§ųÃtâ5Ė9Nå5ž°ĒCÃČGqa<ųĩ-ÄW§Ŗ\Ę×ŖaãBˇ\č˜qŽĒŽfŽ:e!¨XVŲįÂJʸzP6׀öb=fĪ${>ų7aĘD6ė\_uŅ>Dŧöō‘Ž å|„û§ũ$Ŧ‹æÕ4|=ȧ:ŅžZ¯P?įČáhųÕ!O:å„xrËŌ<ĩÅ_Ûú{mÁ=Ú#kQD,lŦ! ô ā äLâL`lČgrcBfRc€gđ'…ōŠÖ‰¤<´á\ķāëšæ']žĢ¯ņšGũhŧ†ĶÉ•ŅŧøŅ4Âa™œĢ žž‡:ĒëœI›É›}ˆ6H8×TIZtĸÖ‹ļp°G’ˇBˆĐƒ%kč¯,—nTĖŠzLiå IDATå3I+!§>įzT?}žsՅ\2ęJ%Ŗ˛ŠŽ{˜žk~Ęá<ŽÆ“7šŸ<¯÷o(—ŦksüÚÖß×fŦËĢģíY+K3*€€NLxX&p,Ŗ0°3øqŽOãé’ĩ TĨÖg 'ŨęjŦ^ÐĖčä­d%UŊHמĄ–+ÂÚw*ŗ-Ē3Y$žz§ę‰HIĸvĒ\ĸ´ĘlWMĶU[Ûģļõ÷šÖ/*Ģ>FÖ* IĶcčĶ(ēN^LŠęˆĶ's#kŠĘęų™œ)›ƒëĖĄ×’kŦ×;YkÂŧČCÖč'œŖĢ*\ĒūHŲÚíÉÚA|ûh8‘LU´ĢĻčŒļŋĻÔ̞ęöŲĩĄŋWVģk’[­IWÃęb†€!`†@ĒyŒ‹bACĀ0 CĀ0 Š!`d­b¸Y.CĀ0 CĀ0Ē#kÕŗb†€!`†@Ű *†›ĪÅ&Z>É0~üx˙ÛtåŠâįM:wîė_͝í›QËÃÁŌ CĀ0 C`õ° V//ž%Åo?ōAĖ:$}“‹ˇĢ&MšäŋŗÕŖGx‰UAÚ´n?ũô“˙qžÛTåÄQÁęÉc'L˜ ={öôZĒēž”šlŲ2˙‘Úę*ŗ‚đX6CĀ0 C Ž€YÖâPŦū ß&²ļņÆ'%jĒ™ŠS§úīņšĸʇ2wÚi'˙qŌŌ!1Ą.ōŒ9Ō[ō kš–ŽōVĨĶēPdŸaRâ¤iéÖųtdU/erŊĘ+3]čJæ*CG2Ũo†€!°î!`{Ö*x͙ųbš~s†sũ‚šūIaQiœ~pYdČĢÅsŽÛoŋũäøã÷ß[‚lŠĶt §ōU^ũTō™J×úПN=åāįmžūų8ŽéęP9õĩLŸ~úŠ'rœGĶU.™¯yÖDG2Ũo†€!°n#`–ĩ5¸ū,ob؁œš_ov?|ŧâ'qPKšNâ6ÂúÁI-VĶ kZãÆŊH ÃĪ?˙ė— ų­žmˇŨÖ˙ž ō¯žúǎJ1ÂTŗwīŪ˛éĻ›Æ‰†ęūüķĪũīöQOŦXėÃņ“G_}õ•,X°Āįß}÷Ũũ—õYBey2Zrâĉū'”vŲe—ø{ee˙É@P‡ 旁ąŌ~QÛ§ū_ũ%ß˙Ŋ˙HčV[må/ĩĶĻM“áÇĮÉņá‡îõa%{ũõׅĨåŽ;ʏ?ū˜°Ūūų§|ķÍ7žˇiĶÆ×TË$ĀuA†ō§OŸîÛxĐAųv†õŪnģí|ŊŠ yvÜqG¯kčĐĄŌŊ{w/ÕĄå oÎ0 CFÖ*€0äŠ/ŗtYœS\Ž&ȲäŅ \3(I›1c†'‡=öØÃËB¨qÄ2wî\ųîģīä€đY—,Yâã=ôPO2 eXæÔĄ—â͞eKO–°ütęÔɋ@ĘøMÂŖŽ:Ę$dų1æDåAô CĮ{ŦĪŖe„~TFq‚øņ;Š”ąüũ÷ßeë­ˇö8¨ eũõ×rđÁûßGüß˙ū'íÛˇ÷ë‹/žđ$ŗ[ˇnž=X(!‹īŧķŽĐv\˛z“öå—_J˙ūũ=ŖFŠ—K$Š:@rÛĩk'n¸ĄPqŅz;VzõęåH"?ÂÍo}ĸƒ|ä‰ę0’Ęæ CĀ0Ö#kDOI†ūîcyjÅ!Ģųt' QÁM™2EæĪŸīÉBĢV­|<–,džũö[īΚ5˓Cˆ‹{⨇ÎŲŗgûHSŨXȿ˙#A6Øyœ„k ēpČSœZ,“ÕGŲāI~~“sܸq^¤8ڀ¯ú‰‹Ö›zlŗÍ6ū:öë×O>øāO,!˜äŅüęû ēŠ‘†Í7 CĀ0V#k̃VD–I"¤ĪÁ¤˜‘ÁADÕ0q:Š3ŅãXĸ„`!ÃBɂܰ,Š• ×ÁŊuJ>̓aQŊjŊC–4,sC† ņähŊõÖ#ÚËSōPoÕEZĸō´ŒŊöÚËĻ„e?–\ģvíJ–¸CnīŊ÷ödŦP,^$ Ū%œ–ŠuĻū”KŨĩøÍ›7÷{͐GV įZgõ—.]ē N¤Ņ~H2įzPÍÖEõ*ŒÖ›ë§u?Ž5ųņ‰'ŋę@ŋĻQž9CĀ0 C ĸØ DŽIĮō$ƒRĀ„G:˛8ÍĢįÆĮ´ųæ›ûŊdV§ĻM›ú4>‚SŌ€%Žķyķæų: Q@Ö)H¤‰z‘†Ĩ "ąÉ&›K{”C|˛ō #䥖PYÂdo—Ö[ÛA~•xbÉC/mžĮR,íÃ×:’—s⹸é9a°Ã§Ūj9C?2¤Q'Č-áD8QoŦ{X×x!ŧ,ņj}ÕWŦ¸>4ô!ÖÜĩŪԓĨUČ+qėa#oßĒÕë ´†€!`†@Čšøâ‹¯­`Ūu6›Nö‘A”ˆAŗŌ…ĩĸĄ]Lō|¯m‹-ļđiė…bŠŽŊpÄA‚ ¤ß~ûÍ°˙ ŨŽŅŖG{kúq„!V-Z´đyĐĮ7äą6ąĮ ‡élúĮĸ—¨<Ęģīžë—j!†X֐GŽv ˙íˇßö2āŠcO„‹Ī–°į Ÿå^,g6äwéŌÅ2ęÎR)„Š cQäcÂ"í'/z!`ԝz@Ŧĸõ†ŒBž ĻägÖEČûԈWGũš.,ÃRwōBĐ՛—2¨e‚#/U@Æ!nôÕŅÁYÕēĻ8iy憀!`é"`ÅMŠ@N-/)H›Ķ™¸ËsX™ &ģíļ›':yŖ ’ÁÁš:Ō™č!8•ƒ hŪ—_~Ųŋl@˛!ų ĘĄb Ą@•Á:Ĩd“4,KÔ R„â‘%ޞ ŒašZŊ ϐ$uĒ“: MCNeđÁ5,Wõh|(O}hzq´r4ŋt˙ˆSŒĨîZĘ$ŸbLģŠŖÖ)Ŧˇ–ŖiĒ_ãņU_Æ W*SeÍ7 CĀ0VÛŗļ:hEd™üą^aíÁēÅ$Č13ų‡ÖÔ‘į\‰:GéJ¨Â4ä!+ęĸyĩN*-‡t%€*‹¯åĄ/ÔŠu@†#LĶ: ŖéÄqŽÃrĨōę¯éÄq(Ņ eÂx-_ËR=Ô[ķG>ä´ũęÖ8|œbD§õŽæ)M]AŠ5üay*gž!`†€!P˞VÔĸV6ĮŗHŧUËÎäÍR)ËzLâÄ#ËĄ)ōG]¨OɀæeSŊZoÂ4ÕĄyĩâCšđ<ĖŖųˆŖî*'MĶIŖū´EË å9W=øzNQyMS=W?Ėžk:žžĢ~äpÔYI2šŽ×ãę#ĻGĶ+6ęgÎ0 C+L2ÉŊŽįŅI™=SXx‘- Š’…M'pŌqæ2 Žķ0MãŲ˅Ķ4|=W™ThœĘ¨¯:´-;Ē°ĘhšúǃļDËT}*CžĐiēú*ʄqa=4úš'Ŧia:uÔô°.zĐÍŖōĒ?ÔG\¨GeÕ×<憀!`AĀČZEPsy˜ˆŖÄDÃĄJ°I̓8uĒ?J4Œæ!ŦzH ՍĘi|¨+‡|čɒN<íŅt|KTf"Č‡å…įZ†æ#MˊĻN•Wõh^­ģ֛üZ†ęR_ķ†åk\"_uĻ+ŸH‡Å†€!`Š€‘5Eb5|&zKiá›ĢĄĸVŠ*.ĩ˛qÖ(CĀ0 C CŦøvA†*`ņ€!`†€!`$GĀČZrl,Å0 CĀ0 Œ#`d-ã—Ā*`†€!`†@rŒŦ%ĮÆR CĀ0 CĀČ8FÖ2~ Ŧ†€!`†€!`$GĀČZrl,Å0 CĀ0 Œ#Pį‘GÉx%Ŧ†€!`$C€_üčÛˇ¯lļŲf^¤2ž_§ßЛ4i’|öŲgūwp“•oņ†€!`dŦ_ũ5Æoķ#Ųü€ĩb™Ž˜•o†ʈ#üoëöîŨ;JEH[8žũôĶO2fĖéÕĢ—}/1ŽĒ†@M@€ņU~WœŸ•ŦC4%!ŲO&ՄĘ[ C`ŨC€ąi›mļ‘ącĮʂ ¤OŸ>~Ŧ‚x­aSĸÆCé_|áuAÔøŠ¸ÕŅŗî]ką!`T7Œ{ĘҞܓelųōåŪĒÆp›3 C & š ,l&LÆĢ}÷ŨWøM^\:DK‰ZnnŽ|đÁž uėØŅ[Ôâƒa؃kMhģÕÁ0 ~% #š 7n\Œ%PˆV5Ô &CĀ02€ŽIŒO:FM:UĻL™"ûėŗ´nŨÚWą<ÂĻcڜ9säÃ?”M6ŲD6Ūxc˙ÔĘ`ČA~žb͆€!PĐ1‰ņ‰ĨĐŦɓ'Įuŋšl5Ą˛VCĀXw`,‚Ŧq0>é8UXX,ŗįĖ•ņã~“ŨvÛM6ß|sR"ÂĻã/ 6L:uî&mZ¯ī,jĨOŦúä.9Ŧģˆ[Ë C Ļ ĀxƁeÍ?PΘ1Ó55=jJe­†€!°n" c>DƒeЅK—ËŒyËĨnN‰d-•ņcGI÷îŨ%úâųÔ鋝ēn%ą:M¤°8[ÚļĒ/-šÔ÷Ë  †:8&"}ĒË|CĀ0ǁp<ōdmŪŧy1]j¸ę¨Œ•a†@2›°¨ąUcúŧ|ūûbiRˇDšÔ/‘ŠĨžČīŋ•-ZÄ_Wū˜‘/ÍK˙ÎŌĄUQü…(,pnK‡đō„ x‰ mÛļ+-o2čMžWG†ŽĢ'‹ķsd‹ļ äōÃ׏[Ռ°Y÷3 šˆ€ŊūT¯ŠÕÉ0<Ɇ‘Čđ E˛Ø-_nŧ^LļhķäĘ?m–ŊÅÉrÄŦS§NōŪ{īy_‰Z(Į9ų҃>ôĸg{Õ< öĪ0j FÖjāEą*†@)ĢŋZ*Eî%ą,é׊x%+X”ˆĩlŲRvŪygÁ'-š!#=čC/ú‰3g†@MEĀF¨šzeŦ^†Ā:Œ€žė´pYąŒúË-y:,vÜŦH7(ĩ€%"aJÄHĶô0NĪņ҃>ôĸŸrpZŽØ?CĀ0jFÖjȅ°j†ĀĒ —į,`Ä쟜ÚjUę”x))‹´ōŌUGŠžl¯Ÿrˆ€!PS¨SS+fõ2 uŦ\“įzęåÄÜK%’åȕ{á!ĶC_F-cšĻ„Îg*ûGúĐ[PœåË!/yˆ€!P͍0YË+(qË2jJL™[(KōܗÆíŊԚv}­>†ĀZŒ@LĻĖ+ōõoŅĐŊTPÆŖ ZJØH„`ŲJDÖĸ Yúš;Ŋs–fɧŖķeÂĖšhķiöĪ0 5E Į 2ë7˖6ÍęH›æ9˛CĮ.œS!ĩĢMÖf-,’—܆ÜOFåJ^ąŗ Ąn™ C`ĩhŌ`åą&aƒ”EÉZ´%jßÔéŗTܞĩ˜;J­xšfž!`•‰ˆģti(GėØDz´¯WŽ[ņČČIJ˛Æ¨OĻīū¸TúpáJ$Uƒ šŠ4kČnDģ C6]/Įė6Ē*´°EĶĸá(Q#}‹6"uSŽ‚QM6 C 5Ŧ6.ĖYāŽŌ7ÚEž›į“÷l.÷hW’аeĨú(Ž’ĩ[^›'Cu%–šm6éĶY¤k[‘†õŒĨ).憀!`†€!"đįŧ˜|ūģČ×Dōˌøũ{4’+hĩĘŽ0Ÿž§$kžøåRyōĶE>OkgE;uwHš4Ņ|CĀ0 CĀ0R!0sQLîūHdF)Ĩ’‹j)û÷j”*›”KÖ0Ëũę^"¸ä6ۊ´m.ō‡fI#ŗ¤ĨÖ CĀ0 CĀˆ"ëöû˙ëĩ˜ĖuûeY™|äĖ6ūŨr•'œtˇ†ŽŸžū­Ķæ\ƒē"í›-ëWEdÎĪΝđ×ÄŲŋŌ A˙ŖÍžŌöĪ0 CĀ0 „<ęôž1šå˙/mž@sŋšŒ°%$kJÔæ,*’oÆåû&îÚ)K6lžâem7˛É”GĶĸat„q˗/—‚‚Š_ŋô- MS?,SĪÕ§äÅoܸąN”/ZרŒęÏĻEÉd,˙ ĸxEÆßĒ}lzĢĻ~ĢŽ5‰0Q ŖiҰõŋUû˜b—ÃĪúŸÍŸ+̏'00M™2Ef˘!ķæÍ“ĨK—J“&M¤UĢVū÷Š7Ųdiذá*|ĸûFYŌkĶųų/ņ_×8ŊiX?g9Ŋ'’5MünB~üÛi{vËNHĘĸOķâGĶĸáD2ļG}TæÎ+XÚrrr¤N:ņī*NĪ‹ŠŠdŊõ֓ĶO?=NôéN§|¯¸ė_T>NTFēų eŌ¤Iū‚RwÕũã?ĘÛoŋ-ÛlŗvØaĄē¸LŠųÂ8Οyæ™8qĸ 8Đ˙¨u2ŊÉō˙ųįŸ÷6mÚHŨēÎŦę\"ŲDq^8Ÿ>}ēüūûīžãvíÚU“ŊŸN~͐H6Q\2ųD˛‰â,)Qlĸa¤Å~†_ĸž‘¨¯$Šŗūcũgmé?3gΔß~û͓5íˇøK–,ņĮäɓeęÔŠŌ­[7?˙…2œ÷íšíČZŠu-g;trŸÕH⒒5ˆßTÃÕußpë°~õü2 ’ą×^{y˛6lØ0™3gŽ'm¤á¨įęsÎ7kzy‰'ž(ß|ķ×Ãŋ:Č Į{Ŧl´ŅFņøĒ:}ßrË-ōÅ_xN9õęՓ/ŋüŌÎ &ČķĪ?/yyyrøá‡W¸üąogŋ~ũ¤sįΒŽŪ˙ū÷ŋōÎ;īČ_9ēīXŪxãrĖ1ĮT¸.\ÃūķŸrÄGČíˇß^a=–Ņ0 C 0—˙ôĶOŪ°T^}°ē1ŸoģíļĢļîí0‚•8.Ão/—íŨGs“ņ—rÉÚėÅĨä¨Ĩ[ULĻ ŧJV$ +{Ī,X gu–l°ÁžÜ4jÔČ[xHS‹~čŌ!kڎž}ûʲeËäįŸ–x‰ĒjYyīŊ÷¤gĪžr 'x‹ĶG}äÛ¤uŖœ‡áÕ­W˜7z†CŊ|đĮĸyķærå•WúŊƒ~øĄ'ÁÉō„ų“wéŌEN>ųdŲzë­WĢM<•<ûėŗŌŦY3šā‚ ’ЎxCĀ0 C Ú€|aQcˇÕV[ɨQŖV)_ã‘CŖKĸęšŊkēO­ņf(ŋÖ§I6׎B֔áĪ[RFÖ­ŧNKA(TÅŦ0.Ņyôƒ”a~-“8ĩ˜ņĸĀ=÷Üã­lGu”_Æ"Hę n”Íš1ōZDåkš÷Ė3Ī”vØA†*gœq†@J° ąėšNūdõ×r4=Ēkøđá^˙5×\ã—:‘ģęĒĢâeú“ČŋP—&iœúćį*§ņaXãôúiŋûî;/vä‘Gú%eâO9唄zĩ,õCŅsž(z÷îíuë?ͧ~4ņXŸzę)Ųc=4[Ü×|ę'Ɲí eTÆŠoųWî?Ép1üJP|Ôˇūcũ'ž`÷Oí¸°–éę„Œ•'ü—^zI/ą_­ÛrË-}"‡<û×XéŌž‚ßÜņĢîsüd§ÎYø¤….áÚ&‚Åe?öÉO$1ĖËJôBũ‰Î}áîiX{pšššž,â({˙ũ÷—'žxÂː~Ųe—ųåŌ_~ųÅĮQ&˧,UΚ5˓›íˇß^ aXėpčŠ–ĪÆCÜ?ü°Jņ*Ī9DōC–2Š“ęÃg’ŲĢW/Ų}÷ŨåļÛn‹[ĀBzŽ~X†Æásč‹t,öjŧæ!ĖXP&sŋũö“O?ũÔËbŽ÷W\áÍž`%‘ø;īŧ3Ž3”…Ŧ‚ŨŪ{ī-Ÿ}ö™—™6mš\wŨuíą"˙W_}ΝuRŸēĨsmS:yBËŋrŸąIįÜđ3üÂ{5>ĘX˙ąūSúû°Õ1_Ž=Z fl§Âá&>´¸‘o•ú—)*)ã]JØĘĸãŪ*–5M)%leĄ2˛ĻiĄ%ŠMã#GŽ ŖW:īŪŊ{ŧ‚+%D”ŠÖ1ŪÅZ)y衇âŒRƁŦ;U%kŸĖGūšįžķÉģîēĢ°ÔŠã6ÄŗWN…Š#Žō ŗßėoû›ą ú PėĪJä>ø`o1dÉuܸq~š‘ˇFĸ<ąömąÅÂr $đ ƒ’ĻM›ŠûÕ ¯"ac)÷‘Gņ„ö´ĶN[IuÕ6hB4Ŧņx _ÅÂÆË Ô‘ļ¨ŖíS:\ûöíë$û !ÔčäiLŽŋūzŪŽ];ŋhŅ"šĶ˛UBÆuĮ?ūøCÎ>ûlCjąÆQDRØļmÛx~­“ų†€!`†@u" ËŸZ&5%hęCÔBK˛äĶ9PķJŠÁqŠŌũøņøČIB˛VJÔVė+)vo+ˏŌĸE `éŠ:&ZHPyų5Ö%k§u! RĖAÜHGŽŧ˛ÃA~°Ū@x°ŽŨpà ņ|ZuQ]šOõk<ÄņĐCõ˅O>ų¤üûß˙ö–&,s‰äŠ2üqyõÕWŊõŒåWŦg8-›ēŊđ ŪdĘŇŧņRrXü¸čB„†2ū÷ŋ˙ųˇ?Ņ­¯ę…iŨ‘ ]‡äᇖK.šÄ“+–CO:é$†”SgĘÚtĶMũKēdŒtj™ė1ÃÚĒkķ‰ĘVYˆ>¤!ˆŧ…JŪ]vŲÅ4^vĀtL;ĩb˙ CĀ0  Āį9ĸ.$l‰ˆōä‹Îŋ%~ˇY)cSžŗ Ąsy’5”’ÉũįÔ-‡–8‹Ré÷Ö|D‚oŧą_’ “ا†5‹L:ŽF@&p%%h:ąĶ€Ōz•’Î5<œŖC?5A\ÔŠ~,w|2âÄËXņ´žJ.đ5NķQ'âpōAψƒ´âĐŠųĸåæÅ ŦˇŪzĢˇŪūųŪ2Æį: -8H˜ĸG-oX¨ĶpcƌōĒÃZĨåFëĢzÁUe4_čcÍbS˙M7Ũ$X؞~úi-.ēčĸxš)pˆ:-“7nš6ZNĸ˛Uļ˙ūq,{ôčáɤ,´ dUW´L †€!`Չ(æųЅ5]ZÖȝ˩K85ė•_ņY˛P¯ž'ܺωe\-,īŌũôË`,oĨë [4Ǥ‰üÄ+Q͉^õĪAŧĘhZ2˙ÜsĪ•ģîēËKėÁôKÉdĢ"žOŸ>ōâ‹/úo Ņļ!C†¤] ō8,W:ŽAƒÉŅGŊyM[aDëv˙ũ÷Į­tė9ŖL%O\ëĒp|O§åTEĻĶ0 CĀXÔ0Ŗ:BĸAàĸ„MeđŖųÂ4å[É8LB˛–Lx%Å |fCÉ ’ĒŽŽƒpE—BCZ7|%-¤kXĶÃ<ÉÎŲwuÜqĮykÖĩ×^ˇęéō/āXšãÍÄĘv\8öĘáXöL×mžųæ^‹¤3<ĸoŨĻĢ3*‡S—rųŒ –ÄÍ6ÛĖ‹aųĒ §1YöÄŠ…4úSe›NCĀ0 C ØŪĨŽŊØú2ZŌBÂFēē0ŸÆĨë']MWA(Éa?Ä"”hŨ5”žCž 5Ŧjēė%bČqhŧ<ō†.Ē?Q˜ ųXŽ ,˙aĄb Į[­X‘xÛQ \"ĢĮzöČņ9‹ŲŗgûŊ_ägi1]7`ĀŋqöΛ”,%B,ioj*aNWŸĘņ"ûˇÛn;ŋÁ__žā›pŧ)Ę'T°ōRÁ…^čÃėÃĮۜqX5ą¨ņá\ú xķ2Žë@˜å^,āÆ˛ē9CĀ0 C S0ņ>ŒĢFõĩN6ˆšÆ“gMæ¯J%kTkQĮŽãŸĐЧãC´ jXpø0+IIÄ,´šioŒr@x Ę!FéęS9ˆ×ZĀp IDAToŧá_T Ë(/Ođ3^8,§÷ŨwŸßĪÆKÃüã&kŧízųå—ûeoú/[¨Šë,dšNĪ/ pxķ֜!`†€!)ØķÎ _€`åI Y´>?A^÷<*—N8Ë}bÅkŸ.“ŊZĒŽx~Œ™^"[˅ũĘÁ ÂRÉ@xëk ¤+j™S"ĸ7M'žå?ö:ąI}ũõ×OUTZéX™xŗą˛–ĩĐųķį ŋ)Ëæ"މcy’Î‘Ē ëûyZ Íē뙍~XōXž„ĐU^˛øūûīåîģī–wÜŅŋŨJôš†er}ąBRVĸôPÖÎ CĀ0 ę@€Ī{ąŌĜ™Ė1ĪCԒ-ŪõI™0'Gēo”-ˇlé /ĖåŅšŽŌ-kÉ*œN<ÄKÖĩhEŖųŖéLčX—Ö”ü„娅'ŒĢŒsŪBå¨ ĮKú‰ŒĘЇ5 kW*Į÷Ū8*ÃqŨøđq2Įĩ†Č™3 CĀ0j 0 :ĖO7 <<˜Gá¤CÖÖÄĸĻm­Qd 6}ŖT+j~íB€Ĩfũ|Jíj™ĩÆ0 C`]A€yŦƒûF)GUēEÖǞĄĻģf!Ā2¨9CĀ0 CĀH@ÂOw¤Îf†€!`†€!`Ձ€‘ĩę@ŲĘ0 CĀ0 C ‚YĢ p–Í0 CĀ0 ę@ ­=kķæÍsoũ´:ęce†€!`†€!°N 0/oO×ÎÔŋö”Yãį.=ųŌu8k¤!`†€!`ՁĀEOΒ.OY”-ƒĻ„Č CĀ0 CĀČFÖ2‡Ŋ•l†€!`†@JŒŦĨ„Č CĀ0 CĀČFÖ2‡Ŋ•l†€!`†@JŒŦĨ„Č CĀ0 CĀČFÖ2‡Ŋ•l†€!`†@JŒŦĨ„Č CĀ0 CĀČFÖ2‡Ŋ•l†€!`†@JŒŦĨ„Č CĀ0 CĀČiũ‚AæĒˇf%—””ČØąceܸqÂOfÕ­[Wbą˜?М••å ÎÂĩ'n˖œœÕ{Ér—ŋõ†Ĩ˙>íåÄ펒 ęúū`˙ Cll^ĒųķnMœGj-Yã†2dˆdggËa‡&õëׯė{ÎôÕ@:ī 1!ŪüڅÃüe1YWė¯ĢģÜŪ/ũ1ŠeÉgŧ%}ö9ØŲ՜uÍũ+)‰9ëšŗ°9?¯0KzîĶI^}b¸œrNOˇœšSĢ'kœ!`T6/­=ķmMœG*Ŧ-\¸PrsseŖ6ōwÁŒ3dđāÁrá…Ļ}WDķÜ|ķÍrÎ9įHķæÍĶŌÁMQXX(mÚ´‘ĸ"&îw¸ŦLŪü•5U†gΜ)/ŋü˛œūųš\Žį9î%ƒĐ’¤õ*]yīŊ÷dīŊ÷vÍš+)]6%ŸĻĢü “Ov„¯Äë%.š /pdŠ}s-[ļôy<túŅNū¨žh¸˜ē82Ē.šž.†!]ųÎJÆ&V5÷ĪÃ3dđ“2{úŠWŋķ§Ę;ƒ—Ž?G…/] uD>ˇ°D Ũ^ˇė†uã׋§7s†€!P9ŧũöÛ˛éĻ›ú•‹ģîēKž~úéĘQhaûËđáØĘ=}æ™gäã?üt]Eæ%ÕŊތãĪ?˙ŧ|ōÉ'ōØãĮWCĀ í¯‰ķHĨYÖØßķ×_yÂĀ5‹;nJžvú÷ī/S§NĮßzë­ŌĢW/9âˆ#䧟~ŠĮ';9účŖb˜ĘAÖ Y*p¯#Hą˛ƒ§"ŽXYøË/ŋ”]vŲŇõ‰éžûî“[m%'žxĸüöÛo^ūˇũôĶx{(˗—¤Ŋĩ9ŊĀYĮō X -ņ~ž#`}:Cî2^î-;öp–ŗ¤;š˜,uÖĩų%2{IĄL]ė˜ž#kæ C jāJŨēu“ņãĮûÎ8ã éͧĮž{îšxĄŦdĪüĀ8ˆcė:ũôĶeˇŨv“ž={ĘĸE‹âōz§šŽ:ę( ʎ;î(īŧķŽCÉ!Ā1†īëÆ\ĘéÔŠ“{ėą>Ž´oŋũv%˙ū÷ŋŊ[tnēé&:t¨¯Ã„ ä‹/žN8l)]:ķŌ9n{ ÆÆü^x!>Ž3'ŋ“kx$ĮŲŗOWįŨwß]Ā–šâ—ÜN9åŋ%įp÷ĩ„cŽ9F ŌČ?čæĸ;î¸#Ž [)cÎ%íLO:2Å|Í|ūÄOČË/ŊäWŌöŲg?ŋ1¯.^ŧØ_',¨œwžLŸ>ŨįO6o2/Ūææ7æąū{îéûF V˛úģ9”•:ŋ’äę ķvĸök{u^­h¸&Î#•fYÛa‡äĖ3Ī”=öØC.ŋüršøâ‹ũg3čŊŗ?ūøCžwä‚Ŋg/š‹{É%—ø ÂMÄSĻë˙ûŋ˙ķ7Uy=ū†nˆī‡+OŽOv`ÉĪĪs¤mš?÷6o)áŗ ė^™4y’l°ÁžÔ8b‡EeØúÎķÉĐOäŽģī’ë¯ŋ^|đ!™3gŽO[˛dąĖŸŋ@žsíéšõÖÎ2÷Ž\yåUōŧģąč\<  ˙Ũwßõ˜ O˜ÎĮ@qĮ˙‘ŧŧ|9î¸ã|'ėÖ­Ģ'iŽā6&ˆ\N:éoŌvà å?˙ųœvÚŠ˛×^ûxĢŪŌĨKŊ~ÚūŒ#ŠÜ,~øÜ}÷ŨŌģWoŸ_Ë/m/’+Ú[úČR{ÃĶ–:ËØėB×÷\ëŨ#Y"ØãšūiXÖŗomI^‰ĖĘwyVÚmøæ C  &qÆÅ‡zČOæD_pÁ~y”‡õ“ŨęÄ'//OnŧņF˙đŋūúëû‰YˆŅ¨QŖ)įž{NšķæŲgŸåVæž‘{īš×Īc}ôĄŋ.īžķ.Ŗ´k…ÛÎâęļWįņʞ×jân|^ÎÎ&œ-Ųî€Éīĩ×^ņ0¯uëÖî)ëiبĄ 0@žúę+WO^R(}9ü䎸â iܸ‰2ƒäQét,žyúĐōȏžví6–Ž;zR6lØ0ŸNxÚôi~0ĄŽŗg;]Ž~M#váã<téūá‡dÛmˇ‡‘!/:T†86ŨĮ „šŸ4(Oë̀ÆMzË-ˇËĩ<ĒãCŋčâ@7yđÕŅžu-ܰ^–4Š_ŠHx4Üŋ_>,Ŗ‡ŊYvņˇë/Ŋ:Å?¯•8âV\ėŪuƒÅ˛åŒ͍žBhž!`T"|`‹-ļˆkÄâÃ֘Ë.ģĖsņw‚%ėŠ§žō–/ ƒ ō„‹ąõÎ;īôĢė7fZ*§sP8Fķ0^2ö†ãsTfMÃč.o^‚Ŧ2đ5朎ëėébY”Õ›K/ŊÔ¯ĖŽã8)œSÂáy&ž|Ú6õĄ‡ZēŊȕĪü‰ëī,‹>øāƒž´DĶ…YÔ Ÿ(]ãč˜\ô°“‘F§âĀąn)ŧ]ģv>ĖEGž7ą’AÂōF#vļ°Ã’Ļa:Ų~ûíSåNœ8ŅëÁĖĪĶ$G–WYËgpĸ}<ŲąÖN9ŧË`Š…ĖĒ~ôqŽē‘ĮiûhĪēnT× ¸ J5ƒĮļ{,_žøY:oĻ4hÜBŽšü~ię,h@Tč^.(rogg—Hãzîڞ5ßoėŸ!PÕ°˛€U k K’Œ}ŦČčžŖSO=ÕOÆXã9˛ÆøČ.ãæäɓũ’\:d-Y;Đ7eĘoŌ1ŲõÜR#ÆÜīŋ˙.|v‰%Z/Œ1?¨ŖÎŦAôRšTķKŒŦ˛°ŸŒ­Ačf^ŅU*â cÁ"ˆĶq^ķ‚oÚj^äqĖĖČŗŋŒíHX*؟GYŦ†‘ŪĒU+-įožųĻđ!_æ>ÂčŌ9}8âq¤qf™™:°Ä­rŒÃzŽOXįTÂ,wĪ;7Ž-IÄąÄĖžļ‘#GĘÖnۑļˇ*įšš8TYcsâ?˙ųOŋ ûĮ,Ęor&s°e>÷ŽoÍŸ?ß˙DT2yâŲČĪž:CyާíTø8Ŋœ3P@„´Į9D“'76ĒbĘåix팜Ŗ]‰:*z0û˛ŧĢéđRËMöË/ŋx‹"„G{ØīĮĶ›2i#Ļj6~’ōvå•WÆõiŲč×ļ…eyĨëāŋÆõKœe­žĮĖ]wÜáphÚ¨ĩ}ū­ōÄ5ƒäđsŲ÷ØÎíû(ŨĢÆž"iRPGš6Ya ^!´&Ն´ˇß~ģŸ7 ]Œ›ĖŠÍ7ßÜīŸâÍQc"ķ ņŒ‰ŧpļĻŽU „āĩ×^ķę¨D"ÉËĖUę02đK^NxÜmļg/ đŌA*—j^ÚĘ ÕVî7ęĀŪ=ö…ņĸŲf›mæ÷ķY8oQnĸŧėņ&?ķōš}œŗ4Ę o”I#‹Øc=æ—Ąi+iĖ1¤Ą‡sæ ëŧŖķ#aļŠ…­K,ķ2^yķ&eąGŌȞFČįĩ×^ëÛĖĩf eV‡Ģ‰ķH–ÛđYj~)CÖ ‹‡•_ņü3ŊDzļ¯/wžŧAJŒtc'Š —Žãļ%Q'öĮižtũ¤I“ü&TĖļ8-O­‚čÃz§ObšÎÛ.X' ë9ųŖõPųtëŗ.Éßũ]ąlÔĻ™¸MˇŦ z+|:ú›ß.Ÿv™Ow÷)as[+ų(n^A‘LœļPæŽ#ˇĐÁ^ŠWd˙ C JāÅ&tæ–č7nėËa,‡D„މy,lkâ°&ņr–#ô1ÖGīw­Wĸr°Ĩ;g­Îŧ„,å2€ķ*xP7đĀę‡ĶēFįæ °dKũ2C2y,X 00@NŅĮA=ŦX֋Ē/0°ÜĒ:ņ5=* ŗt‰ų ]˜?ÔGŖúÂtōjēŪlŽ–gáRV>-›ē_!héöy8˛æēB)a+#m\‹AW^æ.d)Iswî|7ŽIũŧ:RĪ4_ú‹ëC[Æû…ŋˆöĪ0Ē ČŽš€C]”¨ĪÃîš5Õ¯ž–¯aõ“Å“ž:sctēķãã?yÂy€đÆoŸ’ûáųËĢ_˛ôš8T*YŖá5ÁqŗsCŗ?Œ}gjŽÕ‹­uŒžnM¯h˜oĨ%rÕ§ē,Āē(‰đĀ8Û‘55ėjŦjáš7'CÚ˛VÂSčĸņ˛qëĸ•& Åß|C=@TôûmÕŅĒtįĨDãZXŋĘHg{M?ˇõ†Ĩ_–|ąä¨Ģ ũĒ mÔWį‘ZIÖčxėmãÅžīÆž4Ŧlá[ؙėŧö аą{›“æ8k„Ė“˛˛æ…įYîķ¸œl÷ Å2kÜûŲPY6mŒīö˄ƒWYvķ C !Ā|ĀwĶĒËÕ´y ĢĨZ.Yn4ˇš8ÔJ˛“Į”ĘË |÷/T[g\ŅílU°Ä2pįú }'ú4¸j‹1 C }l^JĢĩU˛*į‘ZIָЀÆū9žâĖ+Ø|Y׎×֎`õŽDŲ´ģĄûÅžļ¨U ÎĻÕX×°yŠöö€ĒžGj-YŖK/đ2Ũ´X{ģŠĩlM ¯I[-¯!`¤ƒ€ÍKé ´vĘTå?gÉ÷ķ8p|ĪĩØũčôW_}UŠÕļeĐJ…Ķ”†€!`†€!Pšd„Ŧ}ũõוۊÚĒģŧDՁi¯‰[Ũ6TwykŌļdy×´ ÉôZŧ!P(**ōÕRŋ2ę¨ēÔ¯ ĻÃ0ǁj'kũõ—œsÎ9•ŌŌ”z*ŖŧÁƒË1Į#˖-[ĨŧōŌBáΝ;ËO?ũFųķÕmږˇJDÔĖ4k­ŽJ÷ēWG#ŋûî;0`€Œ3Ļ:Š[gĘā'οΟ/:u’qãÆ­ŌîSN9EūüķĪUâˋHĨŗŧŧ–f5j'kwŪy§\xá…kŒV—mˇŨ6ĨžĘ(o˙ũ÷—QŖF%$kåĨ…•ģöÚkeŗÍ6 ŖüēöęļaMĘ[ŠđrĩŗršˇV&Ĩ{ŨĢŖq[oŊĩ˙iŽ)SĻTGqëLoŧą´lŲRÚ´i#l°AŧŨ#GŽ”Ã;LĻN*ƒ ’ŋ˙ũīņ4ĩ˜õîŨ[–.]*Vd:5Ũ|CĀX;¨V˛ÆSã!CäøãŖÃSú.ģė"­[ˇ–-ˇÜRū÷ŋ˙ų´{îšGēté"Ī?˙ŧėžûî˛ëŽģʋ/žčĶ N7Üpƒ`ēîēëüņÆoÄuęI´ŧ‚‚éŅŖ‡tëÖÍ?Ą228Ū˙ũ> Kŧ(Á@šß~ûÅ-͚5“† Ę{īŊį_ĸ >/Ŋô’ĪS^Æ ķOĘÔ7//Īįá_EÛPŅō´W\q…'Ûmˇ$ZZ][1ģčĸ‹<·~¸Įø¨ŖŽōá8‡ąjîŧķÎŌ¨Q#lėŗĪ>2vėXŸ6tčPŲwß}… ūq衇úøT˙’õ]ō%ĶÉu _÷ėŲSrssk –”ë¯ŋžÜâĘģîí׊úD2Ėęׯ/-Z´îšöíÛˎ;î(ß~ûmšõ_“ÄǏļX¯ēęĒUŽ?ūØW5Ųõ+¯.ŠđL…ÁŊ÷ŪëIđÍ7ß,͛7‹?účŖ˛Į{ȇ~(Ÿ|ō‰\yå•ņ´3Î8Cú÷ī/ .”ĶN;MvÚi§x'ÉtŽ$dCų,^ŧ8‹-Šš ;6{öėØ)wūÛéŌßbgÜ71æ–Ë=Ü â^‚(ßš )öß˙ū7.4kÖŦ˜3ĶĮžyæ™ØōåËcn Œš§Ę˜#^ĻW¯^1Žwß}7öôĶOĮÚĩkûíˇßbn‰ æVĖ­ØC=äĪ>û,ŽWOĸåī&ļXĮŽcģíļ[Ė Č1GšbîÉÕg1bDėįŸŽ•””ÄîģīžØyį§ĒbÎÛ~ûí}žW^y%æ&Иđ}zyi,Y˛$æ^lüøņq}kԆДGÁî5â˜#Ŋ1÷„î1w¤$^=Y[1ãēn˛É&1Ž!Ė;tčā}ú3ũęöÛo÷ũڑŒ˜{‹'öÅ_xYŽĢ[^ōįôĩ<П—÷/Uß-O'å͝,Xī̝ž:æ,ÅåįĶĘģîí×ÉúD*ĖN?ũôXßž}cͧO=ūøãąŖ>:eũ+*P×ÖŊÕåĮƑđøūûī}5“]ŋōęBÆdxV´íäûņĮ}˙=î¸ãâcc¨īÍ7ߌ5mÚÔ÷%Æ.s†€!P5Lš4ÉΟđ#ÆoxÜÅmgōc8ã¸ŗnû88Q*ŪD:ü žßB/c/<,äeœWÚ§;RŅRŦJXÉ~øá‡¸(V6Ŧ\'žxĸã ņØcõV+Ŧ ŧ {ã7z+3fːįž{ÎĮą¤xÛmˇI˛ī˜$*ŧn‹^7ÁûČBĮëRĮŗĪ>ÛŋŽZsĢôë×ĪgaīČŗĪ>+<§JkŌ¤‰äääx9ũ‡5Ĩĸm¨HyäácÚæH¯Į9|B'}mƌëJ_xá…ŧåėĩ×^“#Ž8BĀŪ‘kßæK/Ŋ”fzËqX¸pŽ8‰#Ū˛FŋŖ¤rŠúny:ąÜš›Ô[A°Jš‘TÅÅĶ“õÁŠöëd} ũ$fTˆŊ§mÛzëvŧ’INč_Ü/n]Ië"z’Ĩmžųæ•~mi7VÖ¨ãU|\˛ëW^?#_2)XŽ/žøâøuÉĪĪ—K.šÄ[Ũ¸āeÎ0jÕļ Ę@ÃĻd&Ou Ūë¯ŋžŊO8$I,Ēc/ß9QWŪæüDåi>üčū1&N8AvØaŋÜyĮwø=eažh]@Օ—Ļ2‰üŠļĄĸåš'p_ &ČičÖvĖX‚„9ë‚đ‘æŗÎ:Ë7/Q?;äCüŪ ¸ÖįŸž'ÔO<ņ„ėĩ×^!, Īé ûn*­Zĩōî)j•}F ,‹LuŨ+Ō¯õ‰Dí 1Ŗ:šeQ0OåčëÎrĩĘážĨŧ4ôVöĩ7ožá‡ĨŪđĐ}xå]ŋduŅö+.‰î1•Yß­<øeįË/ŋ\ Ņ<ōH<{ƒ üC#˟ôũM7Ũ4žf'†€!P‹ˆšÚĒbŗ Ûcé(tnĪPŦqãÆ~i“xL€Îâsožy1–}Ü[˜17°Æ0?˛4ņÎ;īÄU¸}dŪIÄčŅŖcŋüō‹OKVžft5ŋĒa|–sÜŠ7eē‰#æ, ~ŠJe¨‹Ûkį͓ÎÂį—īēë.žv 4IDATŸ\^šægÉ(\ÕøŠ´Ąĸå9KHė­ˇŪŌĸcnķqüŧ6`FcœeÖ/wē=hņļąäE?Ķ%.úŧ#gą?ūøÃË8ËEŒkŠÃ¤Í’)æéō\Ēž[žN–ĩœĪ÷%g9öũ*ŨeĐd}ēV¤_'ëŠ0cÔYã…})YÉ'ÕumŠvy׏ôDu!>ž¤UÔ1v˛eÁíį9+d ė͆@õ#ÉePОæ^ ˆšåˇ„ČžúęĢ1÷Ë~ōr›ŪWÚĶ)qâc[ląEŦk׎ą[oŊÕ¯ Ģ"öû°OÉY<ąŌ}kÉĘc˛îŪŊģ߯„>ˇë÷ Š>÷Äė÷9m¸á†1ˇÔsÖī?öØc1÷sK ~[>‰zꊞ.åĨĄ×m ö吇vPfH˜Vˇ -oøđáž=”īŦ&ąË.ģ,æ–lb˙ú×ŋ|ķkf4Ä}5Úˇ‹ŊgĄs/„økį^.ˆmĩÕVžŒCPq\göˇš7îüŪBˇfMz^^ßMĻĶ-ĪÆÜËž˛˙éĻ›nŠšeų˜ŗ&-‡„ōŽ{EûuĒ>‘ 3ˇ‘ŪcÉŊDÜĻ{š{ãšÜ6Ŧibu^Ûd×Oې¨.ŠđÔŧĢëôŅG~_ ŗÜÆÜ6”ĢĢßä C =2IÖ˛ kĄĄĐUŲ/˙š‰LŽx~Œ™^"=Ûח;O^ņ*y(¯įŧ –ėįĻØÔ§Oá5ōdÎYôVz 9ŪX|˙ũ÷ũ›ĸÉōšÉB8ÂåÕtĘKĻˇĒœÆ/Q%’q–ÍŌOԕ—• ÃmCEË ËÖķڀ™ļeâĉ ÷í°T7gΜ•>‹@>yĀ5Ÿ9sĻ_î/TŊÉüD}wMu&+‹øŠ\÷Tũ:YyÉ0K&_ÕņÕumĶš~ÉęRPŸŊ÷Ū[žųæ›ĒPo: C ܊CügĻØæęįĻØ“œĘ]ôä,ųįréžQļÜ:°Ĩß÷ĘŨĻT-d-UeĨķ<ĸeÃŦŗzTڇt•eq†€!`Ôd ÍėWã“3æ C 3d’ŦUÛÛ Ģ -ŠŨž0ŸoĄ™3Ē6ūŸ|ōÉI‹tŸÛđ/Ŗ$°C ā v#j•¨Š2Ö2j,Ys{Ę„Ãœ! ø™÷ũĒLme†€!`+!PmŸîXŠT †€!`†€!`¤…€‘ĩ´`2!CĀ0 CĀ02ƒ€‘ĩĖānĨ†€!`†€!FÖŌ‚É„ CĀ0 CĀČ FÖ2ƒģ•j†€!`†@ZYK &2 CĀ0 C 3YË îVĒ!`†€!`i!`d--˜LČ0 CĀ0 Ė `d-3¸[І€!`†€!`¤…€‘ĩ´`2!CĀ0 CĀ02ƒ€‘ĩĖānĨ†€!`†€!FÖŌ‚É„ CĀ0 CĀČ FÖ2ƒģ•j†€!`†@ZYK &2 CĀ0 C 3YË îVĒ!`†€!`i!`d--˜LČ0 CĀ0 Ė `d-3¸[І€!`†€!`¤…€‘ĩ´`2!CĀ0 CĀ02ƒ€‘ĩĖānĨ†€!`†€!FÖŌ‚É„ CĀ0 CĀČ FÖ2ƒģ•j†€!`†@ZYK &2 CĀ0 C 3YË îVĒ!`†€!`i!`d--˜LČ0 CĀ0 Ė `d-3¸[І€!`†€!`¤…€‘ĩ´`2!CĀ0 CĀ02ƒ€‘ĩĖānĨ†€!`†€!FÖŌ‚É„ CĀ0 CĀČ FÖ2ƒģ•j†€!`†@ZYK &2 CĀ0 C 3YË îVĒ!`†€!`i!`d--˜LČ0 CĀ0 Ė `d-3¸[І€!`†€!`¤…€‘ĩ´`2!CĀ0 CĀ02ƒ€‘ĩĖānĨ†€!`†€!FÖŌ‚É„ CĀ0 CĀČ FÖ2ƒģ•j†€!`†@ZYK &2 CĀ0 C 3YË îVĒ!`†€!`i!`d--˜LČ0 CĀ0 Ė `d-3¸[І€!`†€!`¤…€‘ĩ´`2!CĀ0 CĀ02ƒ€‘ĩĖānĨ†€!`†€!FÖŌ‚É„ CĀ0 CĀČ FÖ2ƒģ•j†€!`†@ZYK &2 CĀ0 C 3YË îVĒ!`†€!`i!`d--˜LČ0 CĀ0 Ė `d-3¸[І€!`†€!`¤…€‘ĩ´`2!CĀ0 CĀ02ƒ€‘ĩĖānĨ†€!`†€!FÖŌ‚É„ CĀ0 CĀČ FÖ2ƒģ•j†€!`†@ZYK &2 CĀ0 C 3YË îVĒ!`†€!`i!P'-Š4…>ũôĶ4%MĖ0 CĀ0 C *Ŧũ{įcUĩõņÅ õĄ>P4ĸ‘'¨`ĪSø,ą|OM|öc"ąEúŲcŒ%OŊÄ}öËŗŒ{GžO •ĸ0ĀPžųíËwöŊsgîĀĖ'wÎ>k¯Ŋ÷Ųŋs.įĪÚûœ;nܸJú“ˆ€ˆ€ˆ€ˆ@+h´°ä*" " " Õ& ąVmâęOD@D@D@ZA@b­°ä*" " " Õ& ąVmâęOD@D@D@ZA@b­°ä*" " " Õ& ąVmâęOD@D@D@ZA@b­°ä*" " " Õ& ąVmâęOD@D@D@ZA ĸ—âN:Õūõ¯ˇĸYšŠ€ˆ€ˆ€ˆ€”#0ĩ~ĮÆâ!å\RYEbmā6aģ Ö­[ˇe\ŧxq3Û2;îãÛXžŗÅrōîãÛXžŗÅrÕ?ŋF|¯œ-–ëúŅõã׈oãõ‘ŗÅr]?ē~üņmŧ>rļXŽë§k\?ŸŊŌßĻ˙Z|æ›īW$Öjkk­oßžÍkK%^po–Uũ–…o3hÁ ~âWüŸŠpy´˜ÕõŖëG×ΞÁˆŋ4ÁAß}–÷ûƒžĒ$U(ÖjŦ˙ūŠŊxQzŪˇ8xŪˇŅV*ŸķÍŲT)ßČ"Į*g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųÚÚv[L‰ĩššZëŨģwšō,>zpEéel=QæûžūĒ/~ņzđkD×O@äáųČKß}âõā׈ž?úūøŋ ē˙ôˆ7â÷Åąí(ũRSŗ¨ą÷…BŲT‘XŖ oŖÍ{đ2ßۋë”ō+eWũĨįĄ˜EÜŋe§3"Ryņ[zmEF‘Kš|,S}]\žâõP*¯—ųVõ "Ryņ[ų¯ŋŪKmõęŽRdd€€ÄZŅIxīŊ÷ėÖ[oĩúúúĸ’ęíΛ7Īx]ĘÜšs˙T§ŋ˙ūģ1žéͧ˙Šv:så~ø!1Z°`Ȧ)ž­FĻ " " ËA âiĐåhģMĒ0ŧÛnģ5ĩ5tčPÛ~ûííđÃo˛ĩefʔ)öĀØ>ûė“ÖéŅ6ĸŠW¯^mŲMļ­™3gÚu×]g/ŋü˛uīŪŨlĢ­ļ˛ãŽ;ÎV[mĩlb#"“õ…¤/ŋüŌÎ8ãŒôŲa‡Š]WˆũSN9Å>ūøãĻcYc5l˘1vÄG؀šėí•yūųįíîģīļ{īŊ×V]uÕģYŲøļ8 9ˆ€ˆ€ŦđVŠČZMMíšįžvà 7ØēëŽk÷ŨwŸ}õÕWí—žâē€<Đ.ŋüōvéĢ¸Ņ /ŧĐŪxã ģä’KėšįžŗĢŽēĘ&Ožlįwž-ZÄ"Äōéâ‹/N"ĮŊ6ŨtS{ôŅGmÛmˇuĶ ˇ…÷ AƒėūûīˇoŧŅvŲe{úé§íėŗĪnz0Ĩ=šķ ŖUVYĨÅnVFž-J" " +<>˛æ‰l­ˇŪz)Ōôæ›oÚŦYŗRÛkŽšÆŪyįëׯŸuÔQæQ$7bωLŨrË-IˆuÖY)útæ™gÚ¯ŋūj'Ÿ|˛íģīžIzloŋũv›1c†ŊõÖ[vėąĮĻ~˜úBD}øá‡Š­ƒ>¸YŊØFĨyĸK}ô‘mˇŨvļŲf›ĨhŪFm”Æ‚xyûíˇmėØąIŒYœ6mZrãĮ7õzDãˆ:^pÁÆą"ü&Nœ˜ę~ûíˇvíĩ×ÚgŸ}–XíēëŽvĀ‚éĸ‹.JūôpZguėôĶO7^ˆÜ^cv6ôX"˛5bÄûúë¯í•W^IŒaA¤‘sņÛoŋ%6Dãxīß'Ÿ|bˇŨv›}úé§i˙œsÎą 7ÜĐfĪžm7ß|sâATtË-ˇLŅŇ~Ø{ė1;蠃ėÎ;ī´“N:Éžøâ‹dãœōz"zÕæë´čüæĖ™c}úôiÕ@WŠČ#úūûīíž{îąģîēËFeDHÜ|97Ũt“mŗÍ6vÅW¤õfܤ¯ŋūz6lXōA yțž¯ãbšõ§Ÿ~ĘŽQÛoŋũ’`ZލéņĮˇW_}ÕŽžúę$ūƍ—ėö…ãÛb‹-šĸhDĶØĮî‘DŽõЧžJö &13zôčÄÁƒĩÖZ+ 7üįϟōįž{n§D(÷Ū{oģãŽ;ėÉ'ŸL‡ĸxˆ—ũ÷ß?1Ĩ]R{95žäįņ"6á͘}ŨŪe—]–D+į˜5x<ōHĒ…€ûųįŸíĄ‡2|3‰Šd.ĸ•õ‡q_įw衇ÚÚk¯ŨdķČĨ—ÃŊZ|ĶÁ鏈€ˆ@§'Ā}ˆĨV­M+X#z‚°@T#CzéĨ—RDä‰'žHeŦ)"‚D$Ž›÷‹/žhW^yå2Ķ\>¤˜O†đĮ×~õėŲŗŠū°FņGŽáŨwßĩ!CZūM¯ĐdÉ,b…äã*åHßDĶvß}w;ōČ#ĶÚ6ŽŖŽŽ.}¨O4ĖߊėãD #j´æškÚ^{íe=zô0ĸ”žV_}õMc*’zŋüōK*j¯1{ŋÅ[‰søúë¯'ąÉz>Î?˙áZ iũņĮSԌrq3Æõ×_?1bŠuäȑɟ1ņ!ˇķÎ;ÛāÁƒ›ĘĢÍ7œūˆ€ˆ€tjĖú Ô¸wˇ6­4b(#Dˆ¯!Cā0IT„˜Â;í´Ķ ŅAbʏč "ώžųæ›&>.Ž.lųetTrÄĶŽˆ4Ļ/ŊôŌĻ6˙LføđáŠ:Ķ11ŊKōrō O/ē¨aú7&?ÖhƒB„ŧ–qü>Úô(“×o¯1{ûÅ[ˆ1ĸ 7cä}ôŅ)*HcŽ9& 5ށã?Ūžyæ™46ŽŸqˆą‡öˇs(î{5ų÷¯}ÎEĄöāƒ&Ąīģ•Ž˛ŦXkŧ§­0‰Á%9äCŌZ$Ļšé˛‰č kžvÚi§´f B¨ņķĪ?Ok˛˜E„|÷Ũwi8N>ŦUã5&8Ž 6Œ—ÄqÁ‚Čc'ąĨœsĘz6ÚįâáiJö õœ)õ"ķö3ũ—äcäXũ\c§œãfŊ"ëŌ8NŽ›ąąÅ—ãuN”ãĪõ@[ŒŒƒŸ[ڎļŽâËq(‰€ˆ€t.ÅB Ũ@ĐĮ…ŖũįU3­Ąq5Ö>[ö°Ã˙> é îyÜĮb*YÛč/ĨG˜nōÔ6vũĨ‘šØH{įã͕ž¸ Įäb…tüåō š6OžwA€8ō„ÍíØŧ.Bäe.’ą ˙¸xbJčc‹] *°3ļXŽ6› ČČå¤8fڎí°ëĩį˜‹ûĨīâÄ9ā\"ÎüXđņë ĮvšØ9oŪuc}ÚČŲĒ͗ãPč<*j_ũܘX"M÷+ˆŗb‘æD˛b͝GínŊzĖŗš­>žßabÍļ+m ʼnķ›ö‰)ĩ=ņm{ĻjQD@ēfx­˜GĐr5˜<7š0ÛĮėå˜áY9քŽä$)7ŽŪu5ļ͈‚Ú{ûË6åģĨ¨Ļ”Š*Ļyũ•"Uí¸‹t&ž]äDk˜" "Đf•ĩĻ/´—ū¯ ÖÆüÕlp˙æSŸņđ˛b ĄæŸŊF×ZĪî…(Ī5ĪÖÛėyÍ#>ąAåۗ@.âÖž=v­ÖŎkoVD@ڊ@q­xßûAG]ôčœ4kŲ¸ZÛvUjŽģÜ/nŗpÃbë§X+ôôõöī× ēnčĀûŸ˙îcXXS^D@D@D@D O€J_?Í,üŪ÷?F/˛ũļęfĖXoî ÜbƊ5k,žf7‚íēØ[_Z¯Æ%SYg˙5ĒΆ¯.ҁ*/" " " N ~ūâô&k˙YRæiė°6q|$Ôx€Žõčˆ5R‹b '"k<9ČƒD×\°=ōŪBûĪdˇ/U|=Ûåũ ûvK¯ø ž’ˆ€ˆ€ˆ€tuŧ§vڌEæ/ŋ…KËöūÛ<ŋI÷&ĄÆ[x{¯Ô*jÔiYÈXķŠPĸkŧúÁƇŪ¤Oģ۔i=;_*Ú¨§$" " " "М@ĪÚE6fŨÛedƒ­5¨.ŊŽŠˆBÍŖjĨÖ­•|V” (<”Q6>¸MÖ6Û`Č|ûå÷zûßģÛoŗģŲôú›5ˇfåØü0eŽA€pVŸēÅ6¤ßB[ođB1d‘õíÅËõë’@cš‹´R5'URŦáB-ÚÖ¨mh|ÔtaŖˆ+ü ļ—''ũ.NĀ#eŦEĢ­-üŠ ĄÆ‡€˜?TPUVŦŅ8â+Š5ņ}Ļ3ִŨ>mPPčĒĐK¤¨›\;!ĐĐPš¨š×+æ–kŪAą`‹úĪ0IŦ#Õžˆ€ˆ€ˆ@W'€frŨäËĘ ļÚχ âôg)ĄĮ’bB*FÁæŌ™‹4_ˆŸĸjPSčęĐLūA”ŧ NäËĨ˛bÍpÁæ ĶĄ‹ŗ¸-בĘD@D@D@D +pŨ”Û:‡–„~-Š5œŧĄ(ÚČ{Šųr6/ĶVD@D@D@:#×L>6ß÷mąŨ÷Ëm+kŪ@qG-ŲŊ\[čęJ騖¸´JŦÅÆ–ˇÃ؆ō" " " " å ~ŊŧJE@D@D@D@:ˆ€ÄZWˇ" " " "P ‰ĩJ(ÉGD@D@D@:ˆ€ÄZWˇ" " " "P ‰ĩJ(ÉGD@D@D@:ˆ€ÄZWˇ" " " "P ‰ĩJ(ÉGD@D@D@:ˆ€ÄZWˇ" " " "P ˙ŠÛ!@uqŧ@IENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Branch.workflow/Contents/document.wflow000066400000000000000000000160701445560650400312530ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx branch --vcs=svn "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{148, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Browse Repository.workflow/000077500000000000000000000000001445560650400267605ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Browse Repository.workflow/Contents/000077500000000000000000000000001445560650400305555ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Browse Repository.workflow/Contents/Info.plist000066400000000000000000000012021445560650400325200ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Browse Repository NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Browse Repository.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400324565ustar00rootroot00000000000000Thumbnail.png000066400000000000000000001106401445560650400350320ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Browse Repository.workflow/Contents/QuickLook‰PNG  IHDRkĄ_ëViCCPICC ProfilexÕYy8U]Û_ûĖį8ĮpĖķ1Ī2™įyž Į<ĪCD"‘Ą”D‘D*C(eLB¤"’(¤¤¨I!ßVĪķŧī{}×ûß÷Ύ¯k¯ũÛ÷ē×ŊîŊ×Ŋ×ēkĀžLˆAĐek¤KqvqĨ`§pČ@„ęĄcmmßũ—cũ€vĢFĨvmũĨ˙&fđņö˛†ŧ|ĸŊCa| „ŽwDT Č Xū$>&ƨ0fŠ‚„ņô.ö˙ƒWvą×oŒFũÖąˇÕÍŽHĨFų@„å”8oØI 9Ė'0 FgkzP}`? ëH†††īâ^‹zũ›˙ÃTĒ×?6ŠT˙đŸg[ÂëFG„P~ßü_Ą!ąđûú}á’bš;6,đščCÕ7ƒ¯\đų+"ä÷˜Á:‡o˜ƒ,ÛŒa^–VaMŋ(C[Ãm!ëˆŨ] ŋ3Č/"ÆÚū/ųĄÄ=Kayo´Áßv.QMwĮŒ–7FÅÚ:ĀXÆ]Ņqv0†# z“`īô—ʏ¯ū_rÂ/ĐĐ䏂c˛Û<æüÁáfģ>Ā}!”€ž DÁeæ@č˙UJ?@…kâāēh ` ˇ‡Û„Øō—žŪ˙’ūnįˇûO‹ā ëÆūĶįŸŪ(pŸÛ >0ū[N…ûØ­Ûõ.Ú#0í_}ū­ąkīˇ72ĩ2īeļūö %Œ’C)ĸtQ(M”*  XP@ Ĩ€RAé ´Pęp*0o`Ëūû¸k?´Ņ/îlx‚šc\ģûė^×Įßځ˙Ü˙/@āĐrËōßã{ūĐ Hˆ ôˆĄčĀ_ޝ$Å$Ė[Z’"'#+ģ[ũ˙æØŗū8ģjû{.‚X†˙% P@},ú_˛Āj?Āįø/™`ūâԌxĮFÅũą‡ÚŊ ĐÁĘx€…ßŗPę@S`ė p‡ã'ŽÁ(’@*Č9ā$8ŠA¸Ē@h- tƒû`<ã` Ė‚ˇ` Ŧ€u° A"AŒ;Ä A¤iB9d š@ž?ÅBIĐ(ʇŠĄr¨ēĩAŨĐChš„æ ÷ĐWč'‰ "˜ÜaÄ„ Ba†°GėGø#"‰ˆtÄ ÄYDâĸŅ@Œ#fKˆoH€¤A˛ ųRH¤Ō éŠôCF!!ŗ‘…Č d=˛ŲEÎ"—‘?P#Š‚’‚ãÔå€ōFEĸĄrQŨ*T3Ē5ŠšC­ ~ĄIh.´Z m‚vFûŖãŅčBôtē=Ž~‹^Į`0,Œ2Æ゠ÂÄäbJ1 ˜.Ėfķ ‹Å˛c%°X+,ƒÍĀžÃ^ÃŪÅ>ÅžÅnāhpŧ89œ!ΆKÃâjp¸§¸w¸M<=^¯†ˇÂûāđyøJ|;~˙ŋI` ˆ4ö„ B*á,ĄžĐG˜&ŦŌĐĐđ͍ԨĐŌĻ9KsæÍÍ"™(NÔ#î#ÆO¯ģˆ“ÄU‰$LŌ&š’bH'HÕ¤{¤W¤ ZFZiZZÚÚÚfÚ§´ŸčđtBt:tît‰t…t7é†é–éņôÂôzôTúCô%ômôôßdŦBrj2,’ąda˛Ų‡œNžDžGžgD2 0ę1z3aŦdėc|˄aa2a bĘaĒcbZa&3+0;2`.ažÃ<˂df1a aÉcidyÆō“•›U‡Õ—5‹ĩžõ)ëw6N6m6_ļlļļqļŸėvö`öSė-ė/9Pâ6ņ8ú8–9™8Õ9Ŋ9ŗ99_p!¸Äšlšr]âäúÆÍÃmÄÁ}Žû÷2 6OOO'Ī{^F^MŪ@ŪŪģŧ(ĖJå,Ĩ—˛ÂĮÅgĖËWÎ7ġÉ/ÂīŸÆßĀ˙R€  "ā'P Đ#°"Č+h!˜$X+øB/¤" T$Ô/ô]XDØI8S¸ExQ„MÄD$Q¤VdZ”$Ē%)Z!:&†S +{"ŽW/–@H(IJ”JŒHĸ%U%Ã$+$'¤ˆR:RqRĩRsŌ,ŌæŌiŌ-ԟöîqŨsjO˙ž_2Š2!2•2S˛dYSŲ4ŲvŲ¯rârŪr%rcō$yCųųVų/  ž ž+2*Z(f*ö(n+)+E)Õ+ŊWTöT>¯<ĄÂ¤b­’Ģō@­Ē̚ĸÚĄúCMI-F­Qíŗē”z°zúâ^‘Ŋž{+÷ÎkđkP5Ę5f5)šžš5gĩø´¨ZZ¯ĩ´}´¯hŋĶĶ ŌšĻķIWF7JˇI÷ģžš^˛^—>RßH?[Ȁlā`PlđʐßĐß°ÖpÅHŅč Q—1ÚØĖø”ņ„ ˇ‰ˇIĩɊОi˛i¯ŅĖÎŦØėĩš¸y”yģÂÂÔâ´Å´Ĩe˜e‹°2ą:mõŌZÄ:Ōúļ ÆÆÚĻÄfÁVÖ6ÉļߎŅÎÃŽÆnŨ^×>Ī~ĘAÔ!ÖĄĮ‘ÎqŸcĩãw'}§|§Yį=ÎÉÎ...­ŽXWG×+ŽßÜ ÜθŊŨ§¸/cßŗũ"ûėčÎáâ~ĮƒÎƒęqĶíéäYãšEĩĸVPŋy™x÷ZņÖķ.ō^ōŅö)đyīĢá›īûÎOÃ/ßoŅ_Ã˙´˙û­€Â€å@ŊĀâĀ/AÆAeA߃­‚¯ī„8…4„âB=CÛÂČaÁaŊá<áÂG"$"2"f#Õ"ĪDŽD™E]‰†ĸ÷GˇÆ0ÁÉá`ŦhėŅØš8͸’¸xĮø›„LOČJx—h˜xų ę ÷Áž$ž¤Ô¤šdäōCĐ!¯C=))é)oŽJ%¤§>N“IËO[;ât¤=;ũpúüQŖŖĩ´Q™ę™eĮPĮ eÉgËú•í“ũ(G&§0g+×;÷ŅqŲãgīœđ;1”§”wá$ædØÉg§´NUå3ä'æĪŸļ8Ũ\@)Č.X;ãqæaĄBaYĄ(ļhöŦųŲÖs‚įNžÛ*(/Ņ-i8Īu>ëü÷RŸŌ§´/ԗq—å”ũŧxņyšQys…pEá%ĖĨ¸K •Ž•ũ—U.W_ḒseûjØÕŲ*ÛĒŪjåęęޚŧZDmlíûkûŽ=ŠĶ¯k­—Ē/o`iČšŽĮ^˙pÃķÆŗFŗÆž›*7ëo Ũ:ßÄØ”Ũ 5'4¯´´Ėļē´Ž´™ļõ´Ģˇ7Ũ–ž}ĩƒ¯ŖäķŧNBgzįÎŨÄģßē"ē–ģũģį{÷yž82ųåE܋ͩÃĶčéė—ô/ _qŊǘ›i˜UšŊ3§?7øÚîõÔŧ÷üŌ›č7[oĶH …īxßU/Ę-vŧ7|˙äƒÛ‡ˇKK›Ë>ž˙$úéÖgí΃+Î+oŋD}ŲųšģĘžzuMa­į›õˇWëĄë›ßŗ7Ø7Ē~¨üč˙éôķŨfüvëėļØvû/ŗ_Ķ;Ą;;Ô(ęī\ —??ž^…9„ Ėž@ ũÃ)~kĀt‚u`Œ„ķ_a` į§×ÁwH J‡&ęˆjxŊ€EuŖŨ1Ķ‚=„ŗÄsã734O‰¤G´éÆč—Č8F)& æT–kŦ/ŲŲ8,9s¸†xx-(š|ã|‚ūB5Â_DÕÅâÄīIĨ ¤“ötÉlËÉĮ+\Sü¨,¤bŖšĸV¯>§Á¤Š e­ŦS­ÛĄ7¤ŋbHcÄjĖg"eĒlĻgncábéo•f}ÎĻž ^Ų¯8'g1W[ˇČ})ûO¸WytzŽPgŊžú |É~‚ū z–AÎÁž!ĄņaIá™Ų‘ųQyŅ'cÎÄæĮÄ8p21ã`JRlrĖĄ ęaįTŖ4# éRGy2č2v2W-gMgä´åÖo>1{’õ”Q~ÂéŌ‚Á3;E2gŨĪĨוŧ.%]/ķŧ˜[ŪT1Y‰¸,zÅâjlÕņꆚĄÚutõ˛ Ļ×Ŋn$4æŨŦēÕ×4ŌŧØōĢŽīļL‡æ‹NĮģ>]áŨzŽÜËī=ßW{ŋĨŋįÁŨ‡CÆß<ē<ûÄ`„<2ũ´aôā˜á8y|æYũÄÁįĻ“ė“o^´NeNÛŋ|šųĒæÂläœūkÖןį{ߔŊM\px'ģȰøķũŗKÕ˧?Ļ~Šûŧđ%đkđjÂZîˇęõŒ?ŧ~Žl…ürßŲŲ€ƒķE!°¸‚C LÁ™t šBČ N!~"C‘Pqh"ēc‡%`pEø‚)Íĸ(‰—–…Ž›^’AlĮɔË|•åë:;…Ø3˜+Ÿģ™į%ΧĖī&%Ø&4/B•ŗ•8-y[ę…ô7&YU9ų…bÅ&Ĩnåį*[jŒę{å5Œ5Ŋ´âáh8Ŗ[ŽWĨĶāŽá Ņ”ņĸÉĒéŗ-ķmK”5› -Ÿ¨Ŋ‚ƒŠŖ’“ĻŗŠ‹™ĢŠ›ũ>§ũÖîļļžöT7/Go'_+?sĶŨ@Í õ`ųņP0Žp–r$}6Ŋŗû)î]üˁɄ§‰ŪOęIn;Ԟrķp}ęÕ´ō#ĶĢŽöe,#eIdæøææŋ~b8īã)BžâiĮ‚č3Ņ]EķįPÅ%–įcKË.ô—}*gĒPŊä^™{šåĘtĸZ篺6÷Z[ŨBũuÍŅnÜúŲŧ§Åŋĩ°­÷6Ô!}'°ŗėî“nLÎŊÔŪŽžĩ~*÷>ŌPTzŦ4¤4ŦôDvDüŠÄ¨ČĪ8Į3Ļ âsü$4šũâķԇé÷/ßŋš›y;;37÷zvūå›ųˇ6ŪíŧĮ}āX’^Öųh÷)âsöJ՗¯_Öxŋ™¯'~¯ÛXø)°šĢl{q‡˙¯ņĮ˜o) ˜æƒ;āÄšÁyû Bq1Š”E ˇQĄ¨7h/ô"&ŗÍÉāâÃŦ„šĸ$q‰TOC§ᑪ •äDFk&fˆyŽĨõ*[&{‡=§—07–{į-ī Ĩ‘¯„?C LĐFHK˜_-˛!:.Ö,^*qXŌCĘPš"ŊĩįšLŊė9WyqŦ„âĨĘ*"*;ĒãjUę‰{-5$4QšSZ×ĩéøę*ë1č­č\6L2r3V5a6ųlúĀŦÜ<ÁÂÎRÖ kõÚēÃĻĐ6ÆÎÄ^Č~Įášãu§,go%Wzסö}yûũŨu<8<>yvS‹ŧÂŊ |¸|V}ø•ø‡hrĀk}o𚐸PÃ0ž°ux]¯<å­Ã bgãzâ+¤&ø$ObHÚH~u¨7ĨîđųÔ#iQGÜĶmŽjfHeōcĖBgũĖūœ3Ÿûüø?ũ';O5å7œn,h8s­°˛čōŲ‹įƊ+JJÎW”^ŧpĩl¨UĄp‰Zyârį•Ĩ*†jÕīÚã×ÚëØŽ›ūŽĄą&RŗnKTk}ÛįÛrîÜŊKî éž}§7ĨīSŋ΃éGÎĶķ<š˙4vĖā™ÄsÆBĶF¯Rf?͟X{Ÿ˙ŅæËđ†ķîø˙Ų[Ú]0JœõĀ…#r÷ Ü+köĒ!Í o=ŌÍûgũ`jđĖ‘Jaž8Ą Q˜F@0ߛA`ŌD2â2â âRiƒLFÖ 'Q8x!fbCh$ZŠž„žÂ0cŦ19˜~,k„=ŠíĮ‘pޏbÜ<^ ƒī%0|7i°44­0ķ %> ‘rHĢ´N´í0›)Ĩ'Ō¤_acøH%¯0Æ0ū`:ÂLd>ÉÂĘRÉ*ÍÚÎfÆ6ÃĮAā¨äÔáœäŠāfänãqáŲâ­¤XQ~ņÕđī ô &Úūwá6‘QC1ąIņJ‰IS)Qi´ôĖž>™*Ųlšxy_…}ŠvJVĘ*†Ē&j–ęž{5â5Ķ´ĘĩÛtĻu?é“ T ũōkL.›ž4K5O´ˆ°ŒŗŠ´Ž´ņĩ ŗ ˇOqČu<îTä\īŌã:âļ°oĮĮCÃ͉šæUáũĐé'ëīP8 BtC…=‰āŒ ŒjŠūë×|€”–ø$I1ųR ÃáCŠ;GBŌ?f„f.gd΍8ž‘—~J4ŋąĀėĖxŅĄsF%öĨ!eGË[. _AUŠÔD^ģ\?ƒũĻ_Ķ…–wí{;ĸ;‡ģI÷¨}- G.ƒeCK#ŖYãˇŸ“_ØL§žęũ:ĪúÖøíû¸ĨC“?Į~q]å][X?ˇ!ųãę&~ËvÛũ×áßķ‡,ŧŋUúĀˆ2b 2č´Ž  Ėa1†D"åTd>˛fäR(OT!ę1‹ÖE'Ŗ;Đ?1ǘĖ,Āęcŗ°Oq\¸\+wÅ×âœ7`îëKĶM"Ļ_“ĖHí´ÚLÚuē@ē—ô6ô} j wȊä&FuÆn&cĻf7æ–XV,ë6ļgė45œœk\ÅܚÜK<xÍx7(×ų‚øyų§ĘŊ„D„–…¯‹ĩãû.>$qEō˜”Ÿ´ŅYŒėšÜŧüS…{Š]Jˇ”á4TĩQ­MŊsī}1˜%}ĐAéŌę‰čkė3L4*2Ž3i4­1Ģ5o°hŗėˇąž°™ąũb9đ8J9Š8;¸Ä¸fšUėģģÎãÉC5ķ ō>îsĶwÚ čt.¸'äk˜x¸wDiäãhŖw#ūk‚JbäÁē¤ī‡´R2¤‘ŽXĻ—ũš)},;k"‡'7ęø@ådôŠžĶt^gzŠøÎk—,•—y”3WŒVæ^ą¨Ŧ~WÛP—ÛāyCų&×­ĩæéÖļö[ĨŠ]>=nŊ{ī+< Ÿ+w|,/ę1ŋŊĀöĖvŅųsä⸒ŠRë Ũ•ĘĢ/ņTV\žZį 7¯)×u4h_īk4š9×ÕŧۚØļ}ûôĄÎĒ.ņîk÷¤{îËô_{Hû(wæqÔĐü›‘ëŖ´c!ã'„žž|6Å6íüōė̉Yæ9ÛיķõoîŊZØYd~/đ‰o™÷#÷'öO۟_­t~)ũ°*ģēēvã[č:e}ü{ėqŖō‡Âģ?Í~>ÚTŨŦÚbŨJÚz°Íŧíĩ]ŋŊųËč×É_“;;!;Íģãí'/ˇģzˆ¨ o?žÚŲY†÷/ķØ>ĩŗŗYąŗŗ} &đ?Ž?˙+v•1đžûųŦ]tīFÕîå?Ž˙Sßy‡x>a IDATxė|UEöĮOzGņ¤¨(Ø+öŪû*ē–ĩ÷žûˇw]{_ûēļĩ­Ŋ`Ã^PzīIH{˙ųžä<.—÷’GH!œÉįfî˜93ķģsg~÷ĖÜûr&Mš”wŽ€#ā8Ž€#ā8uÜ:Y+¯”#ā8Ž€#ā8Ž€"ādÍ;‚#ā8Ž€#ā8u'kuøâxÕGĀpGĀp˛æ}ĀpGĀp:Œ€“ĩ:|qŧjŽ€#ā8Ž€#ā8Yķ>ā8Ž€#ā8Ž@FĀÉZž8^5GĀpGĀpœŦypGĀpG #ād­_¯š#ā8Ž€#ā8 G=‰„”••Éīŋ˙.ūų§Ė™3G6l(ÄsārrrÔ÷đʉĮˇæI^Ū˛=÷æ„ĻļëĐTvîÛQ?ĩŗ4iŌp‰ž ZøįũŅīˇåoVĻū^ ˇĐ S™ã?7ĩ°÷‚ë1Fŧ jƒ ’ƍ˞{î)5R’–——W[_ŋ›Æĩĩë‹?hø,éÔĄĨäŌ ī˙•€'Ę9¸@Ėp!WČ'Rū•”&dęÄųōâ̓eöŸķå†{ļ }¤üŲŲ&Ķō\5ķßę›i4ųtĨ“¯g<œ.¯Į¯\p­­?❠ũ}åB8ŗÚ.Ûã`f:]ĘXĨˆl#GŽTËÚŪ{ī´¨1a–Oėå“:“œ‡cą˛āÁuæZN+)(É/ G"WōY+Ga`k„ķņCÚÂā”å†ô\iļf+9üœíe^Ģ&ō“#—˜kōĒNĖË͕ÜčQaũåÚ üđ}yꊧ’d8äņíđūŧ 0ŠxŦ,ũŊ&īē¤Ë—AëŌÕđēÔØJJJ˛ļÅ[HiiŠLîĨĨ%:"Ã@îūʅ×ĐŽ/×uÖ„ĖÎ/‘%7eᚖliØŲ>yīŌgũ5.y x‰`] ļāįHĪ=ēț˙úRŽ>Š‹4hĐ@ûDMßVßĒú#å—ČŸ“f+pc)ŖÂZs „,O.\ īŊ÷~äŅ2mڌЏ1†ö”–I›6­ÃrpšÅØûuũš¯WÆūN?ŽoÎÉZ \ŅšsįJ~~žtėØą´šŠeE€‰hęÔŠōĘ+¯Č駟ŽŲ™,jĶQæ”)SäÕW_MY&éÅÅÅjyéĐĄC nĨ:ÁCԊŠ‹‚•­‘NĘ „ķįĪ—įž{N†*§œrŠlļŲfÉ6ÜtĶMĒŋuëÖI‚gí˛ ą6ÕÕË íÄáSŸh}Ŗõ›Č8Ô´ĢĒ?6hĐ0‰˙ŧyķåģQ˛Yu%ŋ°@4l*ÅEŌ¤Y3ųhāûrė_N”ŪŊ6“y ‹eQa‰4oŪL†ŽD­YŗĻÉĒGû‘Ë{}Ņņå—_ĘôéĶå€X §åÕīųË &8㠏•ąŋ—ˇ ~ũ÷eĐj\O:¯gŸ}ļ}ôŅ:ÉöíÛ7Oú˛:͉?`ĀÜ,nYuՖŧÕã7– &$Û\[eĻĶku!}Ú´iōôĶO'EŖiÉČJN˜|3qQŊLņ2Ņa2 .ÔsŦ/%%ÅG‰”ËEi oLö”ûčŖĘO?ũ¤×œŊm­Zĩ’‚BĩÄŨ{īŊúRBY°\ Ÿ´Đ…0įäWŋ†Ãéęi´ōŦ>ڎŠōŖõÖ˛ö¯ũ+Yߨ~Ķ•§Ŋu5L{š†øĩ‚’„†ëš¨¤Lōų* >qķĘ7_ŠŨęÁ[ސ9 $?Ä#“_,A.!īȂāįĩj* ,Höh_´ū4dČŲnģí’2Ägâ,eũŅđsŽq3så÷i92rRąŧõÆëōįŒ†ōÅã¤`Îéžéf2čË_äģoKã&Mƒ…0Ô"§Iȡ¸ÚõE×jĢ­&›n˛ŠZ˜{õę%=ö˜üøã˛éĻ›jYڏ~éŽw4ũģīž“wŪyGâõĩpmŨ̞ūl÷÷LúôĒ(ã–ĩeŧęŅōÛoŋ•#F„e÷TKAAÁڐåé¤:îūûī×=N–wyt™ŽåõŖmGg˖-“jëJ3ÅÜÚ3nÜ89äCtąÆdĸÃō§j7OQQ‘.kédÂa–Õ žø’0ąáČûégŸÉąĮ#=zôи‘ŖF…ɏå¨bM/ y‹ŲKÖ Ģ”J–˙cĘŽÉ0K_Ļú}ęwLEũ¨Cq )ėÁ1gå#˯/úĀ€4Ú’ԏ>Ë×WWÃĨ —…kB›hOaI#) ëš9aYŗ,7,‘–†ĨĀĪģ/0YnĩÕV˛ķÎ;ËW_}Ĩy>üđCÁšĮ’ËqĻ'ę˙į?˙tũío“#<˛Ō|üņ‡Z ãåÜyįZî_ūōųųįŸ“å@pX~<ķĖ3åĶO?UÜ(ĸųī˙[å,o‡‡zHÛJ{>ų䓤ÎhŨĶɘNęŖ X~°Ųu×]—ÂâąÛnģŠ…‚ëÃōõĨ—^*3fːŊöÚK^{í5m‡•¯7“åöÛo¯¸›UÍĘԌ‘:0ą° rļhQ hXĶBņv`‰úö›oäÚk¯úFŋ~ũ¤8¨dW|ÎG­uė0ģų曓“ûĀĐVú }ę–[nIĘ[ä'īA$Ŋ{÷–wØAĀĮŌw úžyæí_Ä'bõûĻĸ~X‘ŠĮØßW][nšĨ–ųQČďžh}ß~ûm-o§P¯Į\¯–dß}÷]Í æ/‡åQô’vîšįĘC< ģīžģÜxãĒ÷ŒĐwÁ…~9{öėdû Vß. ü“åĖ‚°ZX,k€qô=ėTšīŨQroÅąëá§KZŠ, 2 ‚üėÂđrÂüb™0/āȚļ%Ü?é×đ„NHöqú1Š{ėą‡bÉ=ī‹č˛8đ­Ē?ÚõY8ˇ@æĖ.¤¨lˇĮ9R¸0_ĘōĮK—Ž›ËôŠE˛å6}d×Ũ’YšiÛ Ã¤/\Gú›ęŠčGÔÁŌL?šŒi„‘į^|ë­ˇôžÚ:\ၖ§…ë{kčĶ›ožšöúb"ÄYšíļÛdû`m<âˆ#ä‡~Đ<ŋ&ûíˇŸüķŸ˙”îŨģKA°p›<åMãéᇎeŨßŸLgúi-¨âßŧyķäÅ_Ôŧ;„Iš !ž7ų¤DĒrø>V´-ė¯ÂŅęÂĀ)dĀH ä1U^pĀyûíˇË×_­K$†kE•Õ‹ËØD6f˘%ęÃ)Ę&‡.Î˙ū÷ŋ/ĩņĸ‹.RâĘuCŽ=B7ÜpƒzčĄÂ5ÁĨĢ7i—]v™bŲ­[7yä‘GˆŌ2õ$üSË@¨ƒõ=q…aīŽAŊ(XPčˇÖĘäØcĶ R¸ûîģšĸ°\´šîc[´¨Põ,X°P‰üõ×_&ë˛g˜`N>ådũ$Ȗ[n%LXũë_äŊ{ПyT<:Sr+änë­ˇÂ=XIŅgŸA°sõa€‰ū•W^–Ō֚{m°ú19Q?ö3ŨtmŗÍ6€=ČōĪĒ̜Ŧ—įąú^|ņÅJÜģuí&?ņ¸â=wî<ĩĸ€ã /<˛w lģôéú`C™4i˛|&O°]k­ŽĄß} ŋ„Ŋ|oŧņF¨+úe‰öQĩĘč?Ō+ŦvĩĻe Cq â%2qAi=+X‹rH Öĩ°o-ŧīËåN:ę­ŖGø‡e0Įųá5ŌŠ…ár5mâĘņÏ;â°ŧ…O-ŠéÜ<=ûėŗē4Čà ÷ yŗ¸EõĻęÅáabAs¸xQ`A 7EÁ/ m ŊU´l.S§M‘õ:6—õ:­%ķ,ļpérg^yØÆ+^:°ũjXqO<ņD¸×Û†Ī“4Ņå~ž7ȃ.ṳ̃úGũ—|ˆxˆéŨģ—Œû‡ŽėwDīUW]­Ä}žãƍ•7ß|K^íu6|˜\}õÕá-Õ§eÖŦŲjõīßŋ_°  ×(\§@$Ëû#Geé_<ō¯°,û¸ÜxĶŗ2­Į?ü¨[Pžūú+9ëŦŗä›¯ŋ҇ļ*pĄ~ĘŨ÷Ü-×]w­<đĀCÉūštÔ~˙ĶŽ]‹ũ;Ž?4*ëũ>ãnIœŦ-‰GÆ!@ˇķĪ?_ļŨv[ĩÎđÔ÷ä“O†äM,™\‘cšK –7Ü\ DsŦS DW\q…’ˆzM?¤˛!!?i „Ļ+ÎʁaЄđ§Gö琗‰ēX>‹Ãâ’Ē&ItGÛBØ[…#?V0{Qēví*kŦą†ÜsĪ=)ķŌŦ2Į{ŦZ” ”\â2XUI‡-i!ęo#xQg^a!Žō¨?ypøÄĨk3$ŧ@Y<…C>Ņa“ * ˙Ŧ>|BH:ŽxŪ,ŋFa`¯øWšŧJ¨\ų?6•x1QŗlÄ~ļīžûVąūâ‹/ÔÚÔ'Č)m>øāƒ5ĢaI€ŧXĖØëĶ AžZģhD‹ëŽŖˇjÕZëĨ|!Z?*R^Ž0]šáí@ō—ëŦ{’4o¨6Öfâ{öėŠQ;í´“>40Ą1éQׇ~D˃øpÍčŖ¤ŸtŌI˛öÚkkžnŨēĘĖ™3•Bđˆļ-zޞđO¯˞”A …ë[&éЌ@m¸f9ámOürĮcW?\zū‡´@æ‚pP!Ĩ9yŌ8/ŧA>Šk}Ѝŗx|ũÍÜ5×\#mÛļ•.]ē(!B&&Ļ#UtëŸĻ›7B!byˆ•˛ŗ¨pžL=\ž ¤;'¯‘ėÜgßā3}„#ą+íæúŲŊP^—ōšļk×N8y(ŒÖ¯ümŌrVV_ŊtŲ¸‹<ũĖĶA.7Xė?Ņ~ÁÃ*úxŗ #îŨwŲ~’[nŊEÃXÖčŸ9áš0ūœxâIoåĄ­ZˇR™/ŋüJFŠũ AŌqN ãs˙ūģ…ļ\)C‡ Õhępøá‡ŠĖa‡Ļ÷ZYYéÛUĸíQÁzđOûNû{=€ŦVšād­°jį 7ŊųL2˙û_x=?Lšėcã-A&,]8Lō8ÉgĀÉŌ‚u+Õ&›l˛”˛XÛ,?ēX~lÚ´i˛ ĶFm¤u"‡ôX~|^ÁBL_"Ė5Üpà “eGõĐF"°´qĐØģ… ŽüĻ_#ÂŋÚƒ'ŽrĀŖiŖđÍ´pj#šĢU-&ūŸ?xA† z]éōˇę/Ŋ÷;I-lea?VPŪ]¸(älÖ‘´Ž˛ė°ōĻũÔ!šføGzÔÅû#iČÛ[¨IŨ!/ˇ’đE¸&MZHûHŖžgĘį#ƒeoÖG˛īĮ…åĪđŲ’™ĶĨY°Ž–„eߜ`Y´Ęå0},Ųríē™ õÄŲŊЁđ´h?"ž8ķéGŒô#÷„éÅį0y‹GŽUŠy@ÁBÎ=cr¤ã,ŒĪ÷_4žsÆî#œéG>ŽûĘļkH;˛ÕßT˙ˇ‹Gô%ĸ=  ÜÄtb&,nÜĩÖZK-.X° O,•r0ˆY§Įį ãoˆŌškŽŠÖ6ö”G:ņĀØŋƒeŊOÄácҘ5k–ĘqÎÁ6ų,¯ãŖ—ƒēX>Ģų¨?¸x9°h[('J­žN–:xc<ÄcyŠæĨ<ōj h|ʁÁ’:šãœÉŸvFeЉnŦd`kíŽÖ|âmäiŧM›6I+YÎ čd™ũ‚!ō§Ģ7TžęY˛!{lĖEëOapåÚsPO›Ė8ˇ0ō ō6ÁDÃÄsčua‰|Ô¨Qēœ‰ĨŅ&?ę .wß}ˇbiz­ ÚĮū=–*Ņ5qâDĩ&”[˛O~VGËgõļ:ļ%wtQ_–åčO`ƒœÕĨq°‚\ãl‰ęNôaU倔ĄĪĘÂ'ĖũÅĩc_!Ö9ú—ĩ{Ãâėŋ6Ə•ĶŦa^ k ¤yø‚GË`)Ûr×ũeö„Qōį΃dÚč_dËū‡HĢßĒqà ÛPšŲæō‘+ ž5ë3 XäŸõ-ķéŖô?œããL‡Éjd$žĒūHÛĀŊ(ėŋ+(\$C>Ržûđ^9äũäL“&9m Ÿ†— ä&ųīs…7— Y ­pÍRõ!ę€NëOø„-ŪÎíÚ[Ÿ{‘íXbéįև‘åá˜ņ…ˇŌ­1GķsNyXsé;œCÖ¯ ˙āÄ8cũ:ņPG˜}u2î3åĶßIûüķĪĨ_ŋ~Éöĸ7[ũĪú]ļĘËvW°ũßR¸em)HĒŽāfåāĻg/V öP° âÅÉ`ÅRÆō ûJ°ˆāl@ĩs6~ŗ1œ'Ãø Kë›øœ°Š1qąũŽ;îĐop­ģîējí`Pßž}QĢÎʉú,GDķaqšđ ĩŽŧ„ĀwĘŦœK.šDËa#pemaâ`s;ídylˆŖ.q ƒ`E|§Nt2žîēë–ÂëäuŊõÖS–{Āņú°oĮ2´‘=q´lŦ ü,˛œÆFa!ûųį§ Øt ´?^oޤáŧķÎS9,Cx`g+ŧÍ1y0s€ iœ3‚aâ™Tė /2ŅI^z`oäË/ŋŦu€AvŲO†,m§DķZ]ČG?âE‚qãÆ)ÔÁœ•mõ$}”Ëa:9g}ÜŅÅH&+ ]ôu–ûŲ Č„GĮ‘ŸīÎŅtØõĄ¯ģÉXÛ? /Ÿ°/‘žB}˜dŠK´žčĖĻ3Ŧh/ᐴfaŋ]"7XĨÃŌpX GŽ´lÖ^Ž8įfyüĒrđYׅšĩÃōgĀ5äc“|qäå•H‹ĸŌ˛ŋ ēH›a8°s|; ã[Øä‰‹bbųH÷GâĀ’ëGDáĸĸ°o-,…Ž×ķX)œ;NfĪ 3§—ü…3ĨUâ™1}j°pnö°u ¸đFėĸü€EKÍKŋĸ|t™ŗkf×;L.f\aųbÄ}ĘCÄ 9âX•ˆŽM/ŧđ‚Ē2=”KYXf!Ēėæ>§ķĐÆ8ʞa&ĖBĮKD|^rĮöĶ…böŌA柰üŖ›ƒrĸr֞úā[éGœ×f¯xÕVüˇA—YôđˆÜxōįi‹eO:2Žt,7XldpÜĖŠœé§EãɲpXÁ(‡4ęĀA<– I4ĸ霛.;'Ö ęfõĻ|Ę!žr87yž>Ŗm‰ÖÕt[~ ›Y˛ŧč4ŊÔ‹å[Ŋ-Í&ö+A’,Ūęc:Éw&ƒO´ŅĘE–xˆĨ]“'ŽĨ;Ã#ZųÍqÍÁÚ&%ę=Č^,U3¨ķԈĩ“xōS6m¤pp=pÔŜ•iqæĶ&,\ļI<{ņˆ‹ZN 3+9^\OÚhú)ú[›Ŧ|ęduäÜä­\ë'–ßŌ‘7ŦЏŗ:™ }ÍŦj†ģə,õ‡āƒaįxâõĢ­°aÂĩ„đ˙û÷6ŌiĩpOŌÆÜđĸ@ kÖŽæëß*ûŸ| ü-\gČZ8‚a,Ŧ"†7HKdĖÄ92eč9¯cŨkÅ5„<áĀŦė~ ˁ3 ­”iøgødŌŲE´gÚôrÜUŋKĮĩ;…i–Ŧ[‡ú4’A˙ŧų3ĨÁ´˙ČE^)ųĄįį/ ÍmHûhéģM;ŊFô#ĘĻžÖ÷¨¯Õ‡sõį°öGŊãí"ņƒ{ĶԐ5Gûčô#Ãß°°r‰ŗ:Aøh/äŨø`ÎÛŖėɤ¯Eī‡_~ųEū°¨!ĪŊ†ŧĩÕĘJUĢŗÕme gŗŋÛ5ui?Z/æ1U ĀÍĮ„ÉS?7`ô +7ŗ‘ ģQ‰įœÃä‰KåLÆŌĐezĸ7ŧ‘“3?ZN\a7sĻ—°•ceā§k iQŨ–=oy GËaĸĮ‘ĮôhDä2–‰ÖúXū¨N+ßĘ2lĸ2 ŪoåâCb,?~´Ū”âšææŦœ¨~‹Ã Ę ĪĀd@šL`¤Ų H˜sĶou°2ÛA–[ĶE& &[âlŌĀ'LšÅqÎ2=>Îꉏ íeō1‡õb2ŒÖÉōŖËę…\<ŒN‹O%c/X{Ö }ÔŧĄ~ÔÕ|ĶiųŦŦÚ ÛuŖ>Ô¯mËæŌ˛Uø5Pøh€/DöK ĘŨ€Ë/ Ā”“4^BÍ ×@B?–Ž‚Ō(œ4™ųmhãÉļ[^ķãí¤Üxœ…ĶĨUÖéĶ´ ×ŦiéˇŪˆđíˇ1ēaŋ V>7‚k× ‘|7~°ŧņō?ai­}ƒˇx!ŽMûš$=\#ôVäĩkLũ8čGv­ŗÅY{‹ŽI¤GäÖ˛,eY?!ÎâŠįČŖ—+pT†žÅ>5s”gũ߯ä[9øčąúY™+{ØŽa6ûģaīūbĖ‹ãü,ėFD4z“=ĸéÄ3XāĮohä,Îō˜â9ˇxķ-ŨÂ&g7™•ceš\Ôįܜ•A~sŅ2ˆ3–nqøVžĨÅķFãíÜ|+Û|‹ĮÆEuZyøQŲxMŒčŠcĪÍoyM&Uq äX–x3’Ÿ"cRaāŖ,+gsmĸ.ÚKCˇé°ŧŅöZšÉQ†Ĩã[}ņM†<Čá[:ē‘gRŠį†‘‹įąŧø¸hšÆˇōŦÄEĪ­¯Z~K‹æ‹–mųņÍÕtē•múW_Ŋ|ĄŪŒĻáĀ‚ÆA4{,įÚ#Ã?Ŧj\fČZY 9y͆ĘÚMįh‰×ÕĘĀ'ÍŌņ “hšÉ˜œå'\U4ŦYâ?㌃u–6ú,i|Ö#//ÔEãÃˇíÂ>ɝvÕ>ŅŗÍö`cøXßļ:Xr6ą g‡Ĩ[8礑ß&IdŦ\|;'Ūôqnų,.ęsN:ÎōG͉ˇ0į8“ˇxÂv˜ #OuÆEãÉom!>›Žr)ߎĻ͋Ãra`^ądžš…ęT„HÅr*>į‘—$ŠJeüĐßå§wŪ”9ã~֏g§O “Ti՝VÕŖ×$4%NúD?¨¯č?čā#Ü|K/jUĸž\ĶA…8'ÎԈŗkeíŠĘ[:qo×ŪÂČāâeNwX^ĶkrÔÁâĘĩŠž]jú-Ÿ-HyqøŅ6 ĮúŖ ÔŖŲėīõļoŠīYĢqH]áĒŽ€íĶaiˆŊ1lHf {]X^aɒ/ĸÛ$f>¸ŲDbį†ĨMø6Á˜oyے…YCHÃ2f‡ÉÚŒĪŧčAŽz19[ũ,/áhœé"_´Ūä%9Ō‘ĩ8|â,>ĒĮtYL–:˛,­ĢéĪ––X“¸–,‰a9eKo9c‰ĸ~ôĒøĐx ›ˇ›ąhA ėZU•?ĶôLû#ä‹ĨRöcą4Hû)ãØAŲ\ڋõ˜=“ėųä#܄)Ųhāúš‹÷!â­/t\TN#Â?ë'ŅēX^KÃˇƒ|Ļ}ākõŠęį9m#ŋ9äI§œ(žÜã„ŖeYžúâ¯lũŊžāo‡“ĩ8"v–zpr&q&06ä3š1!3Š1Ā3øG'…ĘŠļ‰¤2›´áÜōāÛšå'Ũœ›oņ–Įüxŧ…3É—ąŧøņ4ÂŅ297|;ęČÖ9“6“7û!mpŽŠ‘´øD¯má`$o…ĄFÖĐ_S.Ķūh˜S7Ęg~ņ9Í IDAT’6CÎ|Îí:˜~ú<įĻ št.ĒĢ*“­ęēGĶŖį–Ÿr8‡ãņäį'ÅãÛũ•K׎•9~eëī+3֕ÕŨ÷ŦU†Ž§9Õ@Ā&&<,8–QØü8ˇ§ņLÉZ5ĒRīŗD'Ũl5ÖŽa”ĖØämdĨĒz‘n}Ã,W„­īÔd[LgēūH<õŽĒ?Ļ"%ŠÚirŠŌj˛]uMW}mīĘÖßëZŋ¨Šú8YĢ)$]#AĀžF™ĐmōbR4Gœ=™;Y3T–Í_‘“#esp9ėZríz§kM4/ō5ú įčĒ WU¤lkƒõĮtí >Ž}<œJĻ6ÚUWtÆÛ_WęUSõˆöŲ•Ąŋ×Tģë’_­KWÃëâ8Ž€#ā8Ž@ ÚyŒ‹âAGĀpGĀpę!ād­z¸y.GĀpGĀp˛‚€“ĩŦĀė…8Ž€#ā8Ž€#P=üƒęáĻšØDË'FĨŋMW™*~Ūdã7Ö×ôëûfÔĘpđ4GĀpGĀX6üƒeÃKĨŖoIņۏ|sũõ×Oû&oW;VŋŗĩŲf›%KŦ ŌfuûņĮõÄųnSm”“lD5O¨'Œ=z´ôėŲSĩÔv=)sá…ú‘Úl•YMx<›#ā8Ž€#DĀ-kI(–ũ„oaY[guŌ5ĶŠĖ„ ô{Fŧ&3bÅųc=Ļŋ¯ĮGTųPævÛm§_'-ÕEž!C†¨%˛fi™č!om:Ģ e@Öø&#N––i=‘ĪDÖôR&×̞23ՉŽtŽ&t¤ĶíņŽ€#ā8Ģžg­š×œ ™/–Û7g8ˇ/˜ÛĪ‘—”ĮŲ'‘E†ŧvP<į¸ŊöÚKŽ9æũŪd˜Ĩ[¸*ßäͯJ~EĨ[ũĖΤČrđķ6Ī>ûlĮLu˜œųV&á?ūX‰įņt“Kį[žåŅ‘NˇĮ;Ž€#āŦÚ¸em9Ž?˛Xv gáכÃ/ūIԒf“8„°}pԊĩt–Öŧysĩaøé§ŸtšßęÛrË-õ÷‘ųå—Õ*5xđ`ũ¨fīŪŊeŊõÖK Ķũ駟ęīöQOŦXėÃņ“G_|ņ…Ėž=[ķīŧķÎúe}–PYžŒ—3fŒū„Ō;ėüŅcUVņ/• uĐ Aē ŒÕ6đ;ˆÖ>ķ˙üķOųîģīô#Ą›nēŠū^"j'Nœ(_ũu’|đÁĒ+Ų̝ž*,-wîÜY~øá‡”õūã?ä̝žRÜĄC­Š•I€ë‚ åOš4IÛ¸ß~ûi;ŖõŪjĢ­´Ūԅ<Ûnģ­ę8p ôčŅCåã:ŦäŨ9Ž€#ā8ÕAĀÉZ5Pcæ€\ņåq–.KķJ+ÕYC–<6[#i“'OV˛qØe—]TBEøC‘3fȡß~+ûėŗf?žÆxāJ2 eXæĖĄ—âĶļm[%KX~ētéĸ"2~“đ°ÃS‚„,?ƜĒ<ˆd荪ŽŌâ˙û_éÔŠ“ŦĪ>ûLIf÷îŨĩ=X(!‹ožųĻĐv\ēz“öųįŸK˙ūũƒĄC‡&Ë% E šk¯ŊļŦšæšB9ÄÅë=bÄéÕĢ—D~„›ßúDųČ×á$ ”Ũ9Ž€#ā,NÖljž‘ ûŨĮĘÔ ‹CÖōŲ$Nĸ‚?~ŧ˚5KÉBģví4K2ß|ķúS§NUrņÃaŅa{âĐ9mÚ4}á4Ķ…lúôédƒ=ņĮqãÆéŌĢũÔ yR•‡eŒō°JŊķÎ;˛ũöÛ'ÉI´č‰Ę`EŖ,t’Ŗ|~Øk˜ĩŸzCö~ūųgĒĄųĻL™ĸų DXŅ…CžúãĖb™ŽŪ8ĘOōķ›œ#GŽT>âhžč'.^oęąÅ[čuėׯŸŧ÷Ū{J,!˜äąüækÃ?ÃČÂî;Ž€#ā8˂€“ĩeA+&ˤ `Ōį`RŽOĖČā "ČZ˜8›Ô™čq,QB°aĄdAnXÅʄ[?ŧuJ>˃a1ŊfŊC–4,sīžûŽ’ŖÕV[h•§>äĄŪĻ‹´TåYģíļ›~Ļ„e?–\ģuëF–¤Cn÷ŨwW2„ V(H/PoˆÎĘ´:SĘĨîÖNüÖ­[ëŪ4ä‘5‚ÆšÕŲü ,…i´’ĖšÔÁōEëbzÆëÍõŗ:€ךüøÄ“ßt ßŌ(Ī#ā8Ž€#P]üƒj"Į¤Œcy’Á)`BG:˛8ËkįÆĮ´á†ę^2ĢS˖-5Ī„āŒ4`‰ã|æĖ™Zä čâĀ:éƒ4Q/Ō°”A$Ö]w]airˆOWd„<”Ã*K˜ėí˛z[;Čo2O,yčĨ XöXŠĨ}øVGōrN<7;' vøÔÛ,gčG†4ęš%œ 'ęuë/$—%^̝ų†×‚†>dŖõwĢ7õdiōJ{ØČÃÁÛˇĻÃôjūĪpG&y^xáÕÕĖģĘfŗI˛Ā>2’1Bô$Âl†‡ta-‚h˜C“<ßkÛhŖ4ŊP,ÕąŽ8Hä‚ôë¯ŋęū* û¯Đ á6l˜ZģЏ# ąjĶĻæA{ܐĮÚÄ+Hr¤ŗé‹^Ēō (oŊõ–.ÕB ąŦ!>í@˙oŧĄ2āŠcO„‹Ī–°į Ÿå^,g6äwíÚU ugŠB҆ą(ō1a„ö“Ŋ0ęN= VņzCF!OSōŗ ë"ä}iěŖū\–aŠ;y!hŠęÍKԁ2Á‘—* ã7úéX?XÍēf8Yyî;Ž€#ā8™"āÅÍЈœY^ S(6§3qWæ°2ALvÚi'%6yŖ ’ÁÁš9Ō™č!8“ƒ XŪ_|Q_6 Ų(ų ÉĄb Ą@“Á:ed“4,KÔ R„â‘%ޞ ŒŅ4ŗzAL!IæL'u@>ž†œÉāƒk´\ĶcņQyęCģЋŖ}”cų52ü#Î0B–ē[ũ)“|†1íĻŽV§hŊ­K3ũoúš6mēD™&ëž#ā8Ž€#°,øžĩeA+&Ëäõ kÖ-&éTŽ œÉ?jÍąIy΍hĄƒpܑn„*š†2vn~4_ôÜŌņíÜô#‡ŖÎFʐątģŽČXᏍ>ÂŅôxaÃÆ|âÜ9Ž€#ā8ÕA`ąIĻ:šWņ<6)ŗg O*˛Dqr`°ŲN:ΜCĖqMŗxörá, ßÎM&J*,ÎdĖ7VŽ•×GØd,Í|ĶA[âeš>“!OÔYēų&•‰ÆEëayˎ<Ņz‘M§Ž–­‹]tÄķ˜ŧéę#.ĒĮd͡<î;Ž€#ā8ÕAĀÉZuP y˜ˆãÄÄÂQ•6a“fqæL~œX?š‡°č!-z˜nü¨œÅGuÅ㐏ēT˛¤O{,ßâR•™J'ōŅōĸįV†å#ÍƊ§Ž*¯éąŧVwĢ7ų­ Ķežå–oqŠ|Ķ™Š|*į8Ž€#āNÖ ‰eđ™čq,ĨEßė\õRÔpŠ—ķF9Ž€#ā8+Åß.XAđbGĀpGĀpŌ#ād-=6žâ8Ž€#ā8ŽĀ GĀÉÚ ŋ^GĀpGĀpŌ#ād-=6žâ8Ž€#ā8ŽĀ GĀÉÚ ŋ^GĀpGĀpŌ#ād-=6žâ8Ž€#ā8ŽĀ G Á#<˛Â+ápG üâGßž}eƒ 6P‘šø~}CoėØąōÉ'ŸčīāĻ+ßãGĀXŅäüōË/ ~x›ÉæŦm[ŅķōGââbPŽ92Á(D ̚ j“#ā8+“ŸlŒš0a‚Œ?^öØcißžŊVą2ÂfcÚôéĶåũ÷ߗu×]WÖYg}je0ä ?OąîG Ø˜ÄøÄRhθqã ‚ļ_ÍļēPY¯ƒ#āŦē0AÖ8Ÿlœ*..•iĶgȨ‘ŋĘN;í$n¸Ą‚”аŲxƋƒ ’.w—íWĩō'V{r.9Ŧēˆ{ËG Ž ĀxƁeM('OžŦdA͎ēRY¯‡#āŦšØX„Qã`t΂E2yæ"i˜W&9% dԈĄŌŖG‰ŋx@>sö"A—n›JĸA ).͕ŽíK›u”ÁÃĮT¤Ītšī8Ž@6ˆŽGJÖfΜ™°Ĩ†č—ĘxŽ€#ā¤C€ņˆą ‹[5&Í,”¯›'-–I‹ÆeŌĻYŠ4’"ųíˇŌĻM›ä‹Ļ‚Į‹ŗf͒nŨēÉÆ2'?O,ʕÅš˛]×V˛Vģ&ēÄĀ`h›y-ŋûŽ€#āŦHŒ°éØ4gÎ%k+˛B^ļ#ā8а%ĐYķŠäŅfJÜiĶ´Tē¯Y,Ģ5+ßc ™3fŒžxĀ>ļæÍ›Ë… usY&Õ'Ͱ¤0+?WFLi(ŗ ō¤8Ņ@NŲŊŦÖĒ‘ZÖ|ĪZĒ+āqŽ€#°ĸP˛6oŪŧÅë+ēF^ž#ā8˜Å˙–WgČī“ ĨU“Réŋq‘Ŧߎ$ųB8ްĨCxųÂÆ‹ŧDĐącĮ%–7ôÆÍl G6’y…y˛QĮ&réÁĢ'­jNØŧû9Ž@]DĀ_Ē‹WÅëä8J˛€aȟEōõč™–/×Y-!uH(šŌ§ÍЎ8Y.€˜uéŌEŪ~ûmõ¨Eå8'?zЇ^ôã|¯šÂā˙G "ād­^¯’#ā”#šzî‹R>Y–Č‘~]J—°‚ʼnXÛļmeûíˇ|Ōâé2âЃ>ôĸŸ8wŽ€#āÔU|„ĒĢWÆëåŦÂØËNs–ĘĐ?ÒgĀbÛ J¤y“r X*fDŒ4KÆŲ9>zЇ^ôSÎĘՀ˙sG Ž ād­Ž\¯†#ā,Ā×# ‚Œøđ“Së@­Ę/#eq‚VYēé(חĢú)Į#ā8uuĩb^/GĀXĩĀĘ5nzą‚Đ(/^*(“Üœ@ŽÂ 8™ö2BÔ2fiFč4SÅ?âЇŪĸŌ-‡ŧäqį8Ž@]C Úd­ ¨,,ÉĐņE2~FąĖ/_÷÷JëÚõõú8+1 ?ŗDëßĻixŠ ‚GA´Œ°‘Á"˛•ŠŦÅ ˛8ôĩz§/ȑ‡Ęč)3ĐĻiūĪpåE / 2̎ƕ­H‡Öy˛Mį&!œW-ĩËLÖĻÎ)‘įÆ܏†æKA‘ŗŗjĄî™G`™hŅdÉą&aƒ”ÅÉZŧ#jß2蝾@žĩD8Ę­x–æž#ā85‰ˆ;tm*‡lÛB6ëÔ8Š::n%#c'U’5@{2}ë‡ōĐûs– iŦŦŅR¤USžpcÚ=č8Ž@ °ŪjyúąÛ¸Ē¨…-žĮ‰éuiXå(×äaGĀpĒF€ÕÆ9ų"ŗÃQūFģČį# ô8q×Örė.­’JĒ"l9U}×ČÚM¯Ė”ŋ„+Üë‰ôŲX¤[G‘ĻœĨ.î;Ž€#ā8Ž€#Eā™ ųô7‘/G‹VņûoÖL.?¤ŨR[8ĸųėŧJ˛†āsŸ/'>žĢyÚ+Ú_w†¤9A3ŨwGĀpG *ĻĖMČŨˆL.§Trū~meī^ÍĒĘ&•’5Ėrŋ„—.zšˇ"[‹ü߁9ŌĖ-iU뎀#ā8Ž€#āÄČûũ˙ņJBf„ũ˛ŦL>rZ}ÁļœÅå §Ũ­a맯~´פĄČų{æJķÆĩgQã™ Ģũ5qö¯4iŌD´Y+í˙GĀpGCĀŖN雐›Ū,Ķwxiķœ}Zërh:–’ŦQ›>ˇDžY¨MÜąKŽŦŲzņËÖndĶ)§ÅÃ舯-Z´HŠŠŠ¤qãōˇ$,Íüh™vn>u /~ķæÍ5:Užx]ã2Ļ?ž§’ņü‹ˆã;~K÷ąÅč-æø-=Ö¤ÂÄ0Œ§ÅÃŪ˙–îc†]*l?ī>.iŦâžĀĀ4~üx™įüpŗĨW6üå/‘¯žúJõđoũõח}öŲGŽ:ę(Yk­ĩ’ņĩuûžéĻ›äŗĪ>SN95’Ī?˙\ įčŅŖåŲgŸ•‚‚9øāƒĢ]?üPÛŲ¯_?Ųxã%SŊ˙üį?åÍ7ߔ?˙ t?8°ŧūúëåČ#Ŧv]¸†˙ûßåC‘[oŊĩÚz<Ŗ#ā8Ž€#P`.˙ņĮÕ°TY}°ē1Ÿošå–Kļkc+ \†ß(^$[‡æĻã/•’ĩiķĘÉQÛ°Ē˜NAe•ŦNV2öžÍž=[N?ũtYc5”Ü4kÖL-<¤™E ?ę2!k֎ž}ûĘ… 姟~’x@‡DÕļƒŦŧũöÛŌŗgO9î¸ãÔâôÁh›ŦnԁķhxYëÍ?†Ŗzß{ī=ÅĸuëÖrųå—ëŪÁ÷ß_Ipē<ŅüéÎģví*'žxĸlžųæËÔ&žJžyæiÕĒ•œ{îšéÔ{ŧ#ā8Ž€#5 _XÔXÄmēéĻ2tčĐĨʡxäĮ¨Ä’¨šfaīښáSkŧƝĩĀiŌÍĩK‘5#@ø3įWĩfKŽĶR M1+—ę<ūAĘh~+“8ŗ˜ņĸĀ=÷ÜŖVļÃ;Lׅąˆ’9ˆeŗfŒŧÕ#UųV†å=í´Ķd›mĘŠ§ž*,H,ģf’?]ũ­Këúúë¯U˙UW]ĨKČ]qÅÉ2õ$ö/Ē˒,Î|âŖį&gņҰÅŲõŗ:ûíˇ*v衇ę’2ņ'tRJŊV–ųQņsž(z÷î­ēíŸå3?ž‡xŦO>ų¤ė˛Ë.–-é[>ķSåˇvEeLÅ™īų—ė?épqüĘ0|Ė÷ūãũ'“žā÷Oũ¸°–Ųę„Œ•'üįŸŪ.ąŽÖm˛É&†Č!Īū5VēŦ¯āˇüjrøœ?Ųis>iQ—rmAŽŌŠûä'Č=PBÂÄŪG}¤Ä?~ɊæåÜō›oēĖrö /Č˙ū÷?aoךkŽ)íÛˇOž% Ąƒ´Í™3GևyšĀˆ^TĒs-<ü# k.??_Ë"ޞ÷Ū{oyüņĮU†ôK.šD—KūųgŖL–OYǜ:uĒ’›­ˇŪZ aXėpčŠ—ĪÆCÜ÷ßŋTņ&Ī9Dō€–2Š“éÃg’ŲĢW/Ųyįå–[nIZĀĸ:ėÜüh‡Īa/fĐąØ;hņ–‡0O`A™tÎŊöÚK>ūøc•Å&\īË.ģLÍž`%‘ø;īŧ3Š3* YģŨwß]>ųä•™8qĸ\sÍ5­X‘˙‹/žHæˇ:™OŨ29ˇ)“+‡ē˜.Ëgú-âxāęráO䍗ÃâĮE‡B˜ 4ŧņß˙ūWßūDOŧžĻbduG.ęÖ_}yøá‡åĸ‹.RrÅrčņĮ¯aH9uĻŦõÖ[O_B°%ct ĶĘdÖV[›OUļÉBô!…āAä-Tōî°ÃJĐxŲĶ1í´rôÄ˙9Ž€#ā8+>ĪwQ–Ѝ!Ožøü[ĻģÍĘ›ņĨ]ț’ŦĄ”Lá?§a9´,X”ĘŋˇĻ)ū­ŗÎ:ē$MbŸÖ,2™8™ĀA”Œ ŲÄNĘëUNF8ˇ4ōpŽûÔqqgúąÜņÉ ˆ/`ÅŗzšĀˇ8ËGˆ3ĀÉ™"ԊC§å‹—O˜'°6Ū|ķÍjŊ;įœsÔ2Æį: -8H˜ĸĮ,oX¨ĶpÇōšÃZeåÆëkzÁÕd,_ÔĮšÅĻūn¸A°°=õÔSz-Î?˙üdš)pˆ;+“7nš6VNǞMļ˙ūI,7Ûl3%kR°°25]ņ2=ė8Ž€#ād PĖķQĩ¨Ų’hܲFžø\VZÖ$¨a¯üâĪ’EõÚyĘ=k–XÁՒÁĘN -ņO_° ÆōVϞÅAc` FšČOŧ5›čM/ņěŒĨĨķĪ:ë,šëŽģô[b>ø .5Ļ“­ø>}úČsĪ=§ß@ŖmīžûnÆÅ ÃrĄã0`€qÄK×ŒÆšn÷ßŌJĮž3Ę4ōÄĩŽ Į÷ôpVNm”á:GĀpåAĀ 3Ļ#JÔ hTŒ°™ ~<_4ÍøV:“’ŦĨ^BqŠŸŲ0rƒäƒĒËę \ņĨШĢž‘Ō-léŅ<éÎŲwuôŅGĢ5ëę̝NZõly—p,ÍņfbM;.{åp,{fę6ÜpCÅbéŒņˇn3Õ—ÊiKš|FKâl bXžjÃŲFL–=qf!?ÁÔFŲŽĶpGĀČļw™c/ļŊL`–´(a#Ũ\4ŸÅeę§]ÍTAT’Ã~&ˆ D(ÕēkT>~ų‚€@Ö°ĒŲ˛gœˆ!ĮaņFđČ%pqũŠÂlČĮrQ`ų Kp8ŪjŊÄێFāRéX–86ĐŗGŽĪYL›6M÷~‘ŸĨÅLŨᇎaīŧIÉR"Ē6đĻĻæLõ™/r°īpĢ­ļŌ ūöō߄ãMQ>Ą‚5— Î;ī< ŗwKosVĮaÕÄĸƇsé7āÍË8Ža–{ą<‚ËęîGĀp…ķ_āøfd0ßęaƒ¨YD ĸ†‡ŗBŒ”AĖĸV3‹G/įö œ/‹ƒ„œ}öŲ‚eÍõ|’rÂ>6,Hš‹/žX_C&{ŗT]öėl>ŠL:ˇ/•ķúUū‚A&…U%Yā­GŦ)Ž¸eΈˆYÜ,x–˙ØëÄ&õÕW_ŊĒĸ2JĮĘě5ĩ´h…Κ5KøM1X6qy˓tˆTMX˙Ø/ČĶmļeĪTõÒĮō$„Ž:øđ’Åwß}'wß}ˇlģíļúv+m°k-“ë‹’˛RĨGeũÜpGĀČ|Ū‹•&æĖtŽyĸ–n ôŽšČčéyŌc­\šųØļjxa.Īu5nYKWáLâ!.Xš°ŽÅ+ĪOgBĮē´ŧä'ZŽYxĸq5qÎ[¨5áxÉĀ>‘Qú°faíĒĘņŊ7Žšp\7>|œÎq­!rîGĀpē‚ ƒķÄ æQøéĩåą¨Y[ëYƒMÆß(ĩŠē_ŋ`ŠŲ>ŸRŋZæ­qGĀXU`[?|Ŗ”Ŗ6]"kĩŲP×]ˇ`ԝ#ā8Ž€#āT@ĘOwTÍ%GĀpGĀp˛€“ĩl ėe8Ž€#ā8Ž€#PMœŦU8Īæ8Ž€#ā8Ž@6ČhĪÚĖ™3ÃĮ[?ÎF}ŧ GĀpGĀpV fėÚYõ¯=eDÖøųŸ‹Oŧx•Îé8Ž€#ā8Ž@68˙‰Š2ûEUåË UB䎀#ā8Ž€#āŦ8œŦ­8ėŊdGĀpGĀpĒDĀÉZ•š€#ā8Ž€#ā8+'k+{/ŲpGĀp*p˛V%D.ā8Ž€#ā8ŽĀŠCĀÉڊÃŪKvGĀpG JœŦU ‘ 8Ž€#ā8Ž€#°âp˛ļâ°÷’GĀpG'kUB䎀#ā8Ž€#āŦ82úƒWŊå+šŦŦLFŒ!#GŽ~2ĢaƒH$ô@sNNŽ@œ‡ëß’+yyËö ’.û5›K˙=:É_ÎŲTš4i¨ũÁ˙9Ž€#PĶøŧT÷įŨē8Ô[˛Æ ņîģīJnnŽtĐAŌ¸qãšžį\_D`ãí§Ëúk´’Ü@ÄáâáŋÖ2Qî Ä ({ í"Ĩá_IiBĻNœ//>=XÎûëGr÷ãũCЎˇF9ūßp˛Ž€ĪKY‡ŧZÖÅydŲLÕjöŠÉ4lØ0Y´h‘ėŗĪ>Ō¨Q#­–´ōIœ‰ŧüđđb,ę>͊D š’_–#ųøŦ„Ŗ0°5Âųø!mađ ĘrCzŽ4[ŗ•~Îö2ĢYyúá_VL§õRG ^#āķŌĘ1īÖÅy¤^šJKKeȐ!˛Ųf› įļĖ™›KGÉÕ0Ąx÷ëŗ&dvAŠ^×pšÕ/ũ1ŠåČ'īũOúėą°ĢëZøWV–Öĩ`a ~AqŽôÜŖ‹ŧüø×rŌ™=Ãrj^Ŋž8ŧqŽ€#=|^ZyæÛē8Ô8Y›3gŽäįįËZk­ĨwÁäɓå…^ķÎ;/ãģ"žįÆo”3ĪŨÉG!ÃĒd­¨¨(Ĩĸ0ņ‚Ģ8x*âHT„?˙üsŲa‡4lOL÷ŨwŸlļéĻō—ŋüE~ũõW•),R_dˆ;`ŋũä™gž‘ŪŊ{ËŪ{ī-Bûíi™á†îׯŸĘkyHNœ8QöŨw_mķũĄ “ād¯=÷”íˇß^ޏâŠdũö åė¸ãŽrë-ˇ$åšųøî;éÛˇ¯lŊõÖōņĮ'ÛCYZ^šöÖįôĸ`+(b)´LũÂ@Ā8úvĒÜ÷î(šˇâØõđ̓%­4Č%dA°ŽÍ.,“iķ‹eÂŧĀôYsį8ĩƒŸPęŪŊģŒ5J 8õÔSĨOŸ>:Žũûß˙NĘJņĖŒƒ8ÆŽSN9EvÚi'éŲŗ§Ė;7)o'|Ēé°Ãŗ lģíļōæ›oęJŽ1|Ī0æRN—.]䍪ŽŌ8Ōžųæ›%tÜvÛm*Įn¸A¨u=z´|öŲgrÜqĮ‘­J—ÉŧtfØŪ‚ņ€1˙?˙ųOr\gN"~ģĐđH5Žŗ5fH^›vŪyg[抏B^p;餓tKÎÁák Gy¤@¤‘0ĖEwÜqGR˙ąaĨŒ9—4ļ3=Čķ5ķųã?./>˙ŧޤíąĮ:ŋ1¯Î›7O¯ÔsĪ>[&Mš¤ųĶÍ›Ė‹ˇ„ųyŦ˙ŽģjߍÁJV˙0‡˛R§+IĄ6o§jŋĩ׿Õę†ëâ\܋.ēH/7OA˜Ž˙ī˙ūOoĒĘzüu×]—ÜW™ŸėĀ*RXXHÛ"=W‰ZJølģ×DƎ+kŦą†’ēĸ@ė°˛ Û8X`>ø‘Üu÷]ríĩ×ʃ>$ͧO×´ųķįÉŦYŗåÛОž›o,soÉå—_!Ά‹ÎÅŗúßzë-ÅyÂt>Š;î¸] åčŖÖNØŊ{7%i‡vxؘ :¸ü ŌqÍ5åöÛo—“OūĢėļÛjÕ[°`ę§íOĸČÍōūûīÉŨwß-Ŋ{õÖüV~y{‘\ÜŪōG–úž¸ XÆĻ‡žZÉRÆĪÕ§5ūaY#Ėžĩųe2ĩ0äiZcˇāģs ˜Äzč!Ė‰>÷Üsuy”‡õÃęħ  @Žŋūz}ø_}õÕuĸGb4tčP%ŠVKa5#jøã?tœ|íĩה0VōÜ?ü Į{ŦüōË/JÂŽšæŸ bfnöėŲáû‹M¤cĮŽ:ŋąuÆ,kėfîĘÄe2/ 8a€lÜuc}IîüķĪ—}÷ŲW *™ųôĶΤŨjĢ…ņĒ,l *ŸWĸãü !o׍CŪ_†y÷ yIĮō駟Ę+¯ŧ*­ZļTâļ`Á|yįweJhįi;-|‹tF YķeÚ´i:š~ˆí'Ė9ķ8[›&Nœ ĖSíwŪyGˇŊøâKrR¸†Ī=˙œ´hŅ"|>ëŊ0w> O<ņ„œu֙•ΛgœqzX™ûJîŊį^Į>øā}Ŋ.oŊųŖthEØÎęm¯Íã5=¯ÕÅy¤Æ,ktÔüãōōË/ëķ†Ũâ CŦmŨēuĶ N<{¸¸áŽŧōJŨÔ{į&ŠĖuíÚUZ†ÎV•ãé k7žžW„ss įJn8`ōģíļ[2 Ákßž}xĘ:Rš6k*‡~¸|ņÅĄžŧ¤Pūrų!Č]vŲeŌŧy }2ƒäQét,žyú°ōȏžĩ×^G:wîŦ¤lĐ AšNx⤉:˜P×iĶ‚ŽP?ž,¯ŧōīōŋ˙Ŋ. 6ˆčŔ:tíÚMI$ōVžĩoU 7 Øb\\šŖ~ įaiĶŽE᜸õ%ÄįJ0ÂÉĸp”æäIã?Į?Š[ÕíåéŽ@ĩĀ*i`%Á^:Û8 ˆČHVĶĻMu|ä™<Ė3ŽáO!ĮŧZqS3qXŠ+ąčA8Ė17Ą "Id>°m*&S•ßĒU+Ą ™¸LæĨÎ]:+!ĨŨFÆuæNVpNNÉ`Hˇđ÷ß/[nše2Œ yŅa2Äąé–8%Ėũŧ AyVo4nŌ›nēIXŽåŠĐúEēɃoŽöŦjáĻr¤Eãr@BŅ˙~ūā6čõōpˆīŧUéŊßIúŧVˆ[iix{4  •J^ŗFĄûŽ€#Pƒđe€6Ú(Š‹[c.šäį’ áKؓO>Š–/  PÂÅØzįwęjûŲŖV•ŗ9(:Æķ0^2öFĮį¸Ėō†Ņ]ŲŧYe.ākĖ8×ŲĶŞ(Ģ7_|ąŽĖnãøā`Á:+™—ōHĮņŊQ ŗEČæËos>8œSÂŅķh˜xōYÛ Ôx`ųöĸP>ķ'ōéæM+×Ú ‘f% bĪ‹z|Ĩ¯)X}ĩQá_m„ëâëī,‹>øāƒJZâéŠÂ,څO•nqtL.z´“‘F§âĀąn)|íĩ×Ö0yŪÄJF< ËŒ4:T´ŗE;,iĻ“íĩ×^É0Pî˜1cTf~ž&ą8˛ŧĘZ>ƒíãɎĩvĘá-X3H-dÖôŖs;Ѝ<ÎÚG{Vĩpŗ†aĀmR>¨˜Ų<ļÜuųüšÛeÁĖ)Ō¤y9ōŌûĨe° Qqxš $ŧœ›[&Í…kč{Ö´ßø?G ļ`eĢÖ–$ûX‘ą=Gũë_u2Æ7 5ÆGp7Į§Kr™ĩtí@ßøņãÕ*dc6˛Ģ…ĨFŒ ¸ß~ûMøėK´8^c~0GY‚čUåǚ—Xbd•…ũdl B7튭ROƒAœķ–ĖxĶÖō"cŽ`Ž@žũelGÂRÉū<Ęb5ŒôvíÚ)ļœŋūúë‡|™ûŖËæTôáˆĮ‘ÆA˜efęŽÉ1Û9>a›S ŗÜ=cƌ¤>ļ$Į3{چ "›‡mGÖŪڜįęâ`Ž2‡‘ī\ōrÂcaŗ={čx—ĒrUÍKāA[YĄÚ4ŧāFØģĮž0^4Û`ƒ t?˜Eį-ĘM•—=Ūägž@Ūō s–Fy፲ iÄaû×ŋūĨËĐ´•4æŌĐÃ9s…mŪąų‘0ۃĖÂĮÖ%–Šy¯˛y“˛ØŖ idO#äķę̝Ö6s­ŲBD™ŲpuqÉ >ËÍ/ĀZaņ°ō˞-Ã'•IĪNåÎר#ÛØI‡âÂeęø€-ŊŧŽúCaõėC'‡NfuâĮČŲáMˆ"ÎÚnOIԉũq–/SF?vėXŨ„ŠŲgå™U}XīėIĖŌyÛë$a;'ŧ&Ÿi}V%ųģŋ-•ĩ:´’°ĸ–5AoąOGũá[e˙“/Ņôp˙—ļ°ĩ’â•Č˜‰sdƈárËqëëāeØŠ"˙į8ĩ‚/0Ą3°D×ŧys-‡ąuLÜČca[‡5‰— °Ąą>~ŋ[ŊR•ƒ(Ķ9kYæ%d)—š<˜WÁƒēV?œÕ5>0_€%s8XڗŌÉcÁÂh€rŠ>â™Ŗâú—%˜ĮõŠb[U~VšĀ•ú’—öp­ĶÕŋ*}ÕIĪæ=ŦXļ‹j/0°Üj:ņ-=.ŗt‰ų ]4TuŒë‹Ļ“×Ōífŗpŧ<—ŗ2điÛ2ü AÛ°Ī#ĩĐĘ [iãZ ¸ü’p!ËIZxg$<˜„ķā‡qM4Fá¤õ‚ŸCÚ$Ų/ô"ú?G5 8æsqĸF<ģËKÔLŋųVž…ÍOOú˛ĖYŒŅ™ÎKŒcŒ˙ä‰Î„×Ygäŧn܏Î#Ô3ÕŧņŌK/éį9°Üņ&,/ °Ä•§žŅpēōRé'_Ēúgĸ9ˏoķ_uĘ'eõK—^į‘%k4ŧ.8nvnhö‡ąīĖĖĩvą­Žņ×­ãéÕ ķ­´TŽēúL—į°ŽJ*<0Îļ dÍ ģ–ĢZô\ÍɐļY+ã)tî(Y§}Ɇáīž#āÔ *öũļl´*Ķy)Õ¸­_M¤ŗŊĻ_ØzÃŌ/KžXrĖՄ~Ķ…ŋ2ęĢ‹ķHŊ$kt<öļņâßwc_Vļč[´3ųyũA iķđ6'Í Ö2™’˛ŠæEĪsÂį;pyšá ŠJeęČņ2Ⓛ˛pâp9&ė—‰^ŲŨsz„ķßM˖ĢkķVKŗ\˛Üčn1uqŠ—d &)•—øî_¨öθ¸#úŲŌ`‰eā>:ôúNüipéã8Ž@æøŧ”9V+ĢdmÎ#õ’ŦqĄũs|řW°ųŗ­]¯ŦÁë];0ˆ˛iwÍđ‹/eŠ”Ë@æCsŧGĀpGĀp˛Ž€“ĩŦCî:Ž€#ā8Ž€#9NÖ2ĮĘ%GĀpGĀČ:NÖ˛šč8Ž€#ā8Ž@æÔØ ?üpæĨē¤#ā8Ž€#ā8õĶN;­ÆZWcdCßu×]kŦbŽČpGĀpē‚qãô[œ|Œorâķs–|?Į÷\KÏNņÅ5Zm_­Q8]™#ā8Ž€#ā85‹Ā !k_~ųeÍļĸ mŲ./Uu`ÚËã–ĩ Ų.oyږ.īōļ!^¯ģ”””hå˝‰šš.ķkB§ëpG ›dŦũųįŸræ™gÖH‹‹‹ĢÔSåŊđ rä‘GĘ… —*¯˛´¨đÆo,?ūøc4JĪ—ĩ Ë[ŪRHQ0KŅŦ•:*ĶëžR72TžŸũš5k–téŌEFŽšTsN:é$ųã?–Н,ĸ*•åõ4GĀpęY'kwŪy§œwŪyËŨvŦ.[nše•zjĸŧŊ÷Ū[†š’ŦU–­ÜÕW_-l°A4J×ĩ—ĩ ËSŪ…W¨˜UŌŧ•2)ĶëžR6.RéuÖYGÚļm+:t5ÖX#™2dČ9蠃d„ 2`ĀųÛßū–L3‹YīŪŊeÁ‚baH§ĶŌŨwG Ž#U˛Æķģīž+ĮsL—oŋũVvØaißžŊl˛É&ōß˙ūWĶîšįéÚĩĢ<ûėŗ˛ķÎ;ˎ;î(Ī=÷œĻAœŽģî:ÁtÍ5×čņÚk¯%uÚIŧŧĸĸ"ŲlŗÍ¤{÷îútÎČÄp˙ũ÷k–yQ‚Ib¯Ŋö’áÇk|ĢV­¤iĶĻōöÛoëKÔįų៝2 AƒŠ•€úhūUˇ •ÕŊéĘŗøË.ģLIãV[m%Š–VWVĖÎ?˙|Åųāƒ9ė°Ã4ŧĪ>ûhĢæöÛo/͚5“Í7ß\öØc1b„Ļ 8PöÜsOa˛§xā_Õŋt}—|étrč×={ö”üü|ÁR„éÚk¯­´¸ĘŽ{Uũ:U=)›û˛ßzë--›ûŠ[ˇn‚˜´éڀđāÁƒõž\k­ĩ´=/ŋü˛ę¨Ē.*TÉŋ{īŊWŖõÆo”Ö­['%}ôQŲe—]äũ÷ߗ>úH.ŋüōdÚŠ§ž*ũû÷—9sæČÉ'Ÿ,Ûmˇ]2“t:—ō€#ā8uyķæ%ĸĮÜšsaÂNL›6-qŌŋ%ļģø×ÄŠ÷I„%ĀJ0€†— *waBJüķŸ˙L M:5–(O?ũtbŅĸE‰?ü0ž¨D¨L¯^Ŋa2I<õÔS‰ĩ×^;ņë¯ŋ&ÂōH"ŦD Z‰‡zHO>ų$Š×Nâå&“DįΝ;í´S"LF‰@šáŠ]ŗ„ (ņĶO?%ĘĘĘ÷Ũw_âėŗĪ6U‰`KlŊõ֚įĨ—^JtęÔ)ȜĻW–†Āüųķā%F•ÔˇûLešŽaiMĪékûîģ¯žWö¯Ēž[™Nʧ_Īž=;ŪW^ye"XŠ++NĶ*ģîéúueõŧá†7Ũt“ęūæ›oÔ$‰@~ô<]#IK„ĨY­7˜b•øųįŸ5_ēēhb5˙ũđÃz >účäøUõúë¯'ZļlŠxr˙ēsG Ļ;vŦΟđ#ÆoxÜ%lgŌąq%ĶâušũöÛáé^Ķ+K3}ûö]‚Ŧ_Ũ6Tˇŧ°W0,•Z%&TČoÔ­ė˜]ũõ‰K.šD›Dßēā‚ ôüÅ_Trm+“;D9 –ļD°:&ˆš¨hĘķĒúnU:šÜĮ|JũŠ"ĢēîŠúueõ¤ŋīŋ˙ūzO6iŌ$ņÕW_%ūņ$^yå->]Ū|ķMí;ˇŨv[Ž`)LÜrË-Éj§ĒK2ąš'\/ƀ`ųVâmj‚Å:,„Z˙ 7Ü0ņûīŋ[’ûŽ€#āÔ+’Ŧemô‰'žÃ?\Z´h‘44˛,¸úęĢ'ÜŽ.˛ũôĶĩ}ŠúŲ ûĸāZ‡ÉË˓Į\vÛmˇ%pIHĨ3ÚwĢŌŲŽ];ũNËÎņ=VŠĘŗ¸ĒŽ{ŧ_WVO–bąŅåÎC=Tˇ(|ūųįŌ¯_?-.]ØF?bãž,CqÄVMõãuY"qÁú.mÚ´‘K/ŊT‚^y䑤†@4å™gžŅåOŽxˆKĻų‰#ā8õŦ5^xā$,+.Y°6éĀk{‡ĻOŸŽƒnt˛ Oîúv$íÁ”° ĸ:ø{T8pė/c2.]yš˜æß”)Sô‚C9D %ƒ~܅%\,‘‚,d ZĪĘŌâz,ŧ`Æ^ÃmˇŨVÉd",wkSûôéŖûķž˙ū{ ‡%R9÷Üse˘1Éô`ĩ’`™“`…ĶŊėéĒĖUÕw)3NöĪą×’&˛ ëßáIDATŋę„NP‚YYy–ļŦ×ŊĒz˛4,…JXŠ•>ø@ ŧíK×0?~ŧîßdĪŨ‰'ž(Áĸ%aYĀĒYã~XÂV2ČŪ8^€‰€›:áØwČ}åÎpú„@VČćËXÔąŅš'æ3Î8C_2`38֐č:OįXģx€§6‚›c“1Ö& Ŧb6Y¤+ÉšMÕ?ōõčŅC7+Ŗ¯cĮŽjQØhŖ$ė}Ōɓ ×]t‘<öØc2lØ0Č¨2lÄæ$•ĨĄ—vS›ŧyiķ7Ūxƒ$uËچę–ö$éKX& ÕBéüŋ˙û?­G}Œ†đ@pÅW¨ĨLū…ũ…zč;ŧ@ -7Öxdø/đrœˇ•yĄ2WUßM§ķÕW_UĸļčK+X7yYåŦŗÎĒŦ¸JûYeũēĒz†eP}øāĨ,WfUŖ2éÚö VXHfØû)ŧdĀ 4|Íģ˛ēTÚĀ*īēë.ÁĘ[ Ô‘°;GĀpVrtãZ¤ĩ,beaiæ˛ggËđIeŌŗScšķÄůŅG秐øĶŽ%ōF'¤…WčĶ9&/{ĸ7ŪX {ÖôMQ‹‹ûaī•pD—W3)/ŽĮÂXęš7oŽKTõÃfB 2ŲĮ]eiqŲh¸ēm¨nyҞíŧ>`fmÁb;–GąŪF?  Ëz\sČ+,‡.‹KÕw—WgeåW÷ē§Ē'÷ûäɓ•p͜9Sq`Y—IĀ+ĻåŠŦŪ˛F}vß}w {ë–W•įwG`™ĀĐc?3e~e?7e˙Ę :˙‰Š2äEŌc­\šųØļē2ĀßĻ”•õ‚c=ļ˛ējZœ¨ņ‰ƒI“& Ë<ɧû.OķQ—IyQųč9օĘ\*’fō•Ĩ™L*ŋēm¨nyŠęP0ŗvĨ"j¤ņÛmqĸFŧ}ŦĢÕqņž[:+ĢGu¯{Ēz2 `Ãą.ę2Á%ē‡.šˇ6Îąv˛|ėÎpU Ŧĩę€Ę$`K| ͝#MØøĪ^ŦtŽ=^,ĪģːmžįÎpU :KÖØÆáÎXđ–cøŒĮŠ(ÚËtGĀp–@ +/,QĸGĀpGĀp2FĀÉZÆPš #ā8Ž€#ā8ŲGĀÉZö1÷GĀpGĀČ'kC傎€#ā8Ž€#ād'kŲĮÜKtGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/ŅpGĀpŒp˛–1T.č8Ž€#ā8Ž@öp˛–}ĖŊDGĀpGĀp2FĀÉZÆPš #ā8Ž€#ā8ŲGĀÉZö1÷GĀpGĀČ'kC傎€#ā8Ž€#ād'kŲĮÜKtGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/ŅpGĀpŒp˛–1T.č8Ž€#ā8Ž@öp˛–}ĖŊDGĀpGĀp2FĀÉZÆPš #ā8Ž€#ā8ŲGĀÉZö1÷GĀpGĀČ'kC傎€#ā8Ž€#ād'kŲĮÜKtGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/ŅpGĀpŒp˛–1T.č8Ž€#ā8Ž@öp˛–}ĖŊDGĀpGĀp2FĀÉZÆPš #ā8Ž€#ā8ŲGĀÉZö1÷GĀpGĀČ'kC傎€#ā8Ž€#ād'kŲĮÜKtGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/ŅpGĀpŒp˛–1T.č8Ž€#ā8Ž@öp˛–}ĖŊDGĀpGĀp2FĀÉZÆPš #ā8Ž€#ā8ŲGĀÉZö1÷GĀpGĀČ'kC傎€#ā8Ž€#ād'kŲĮÜKtGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/ŅpGĀpŒp˛–1T.č8Ž€#ā8Ž@öp˛–}ĖŊDGĀpGĀp2FĀÉZÆPš #ā8Ž€#ā8ŲGĀÉZö1÷GĀpGĀČ'kC傎€#ā8Ž€#ād'kŲĮÜKtGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/ŅpGĀpŒp˛–1T.č8Ž€#ā8Ž@öp˛–}ĖŊDGĀpGĀp2FĀÉZÆPš #ā8Ž€#ā8ŲGĀÉZö1÷GĀpGĀČ'kC傎€#ā8Ž€#ād'kŲĮÜKtGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/ŅpGĀø˙öÎƎbKÃĮ3ãq6ØĪĀŗÁ Ė^lĀ&ëŊv‰%'!$,’KB=@ä ‚ā‘ŖKæaˆœw‘M0pĮqØųęúŒīԝi›™šöĖ_ŌŽ>uĒĒëëžîß§ĒûŠ€&PWØŗ€ãĉ xÉED@D@D@D (6kcĮŽ-Ú§üD@D@D@D@ Đ4hAPrjXĢuõ)" " "  HŦ%7¨‰ĩjPWŸ" " " "P€ÄZAPrjXĢuõ)" " "  HŦ%7¨‰ĩjPWŸ" " " "P@Ą—âN™2ÅūņlRn" " " " ­˜2g§F—Á­šY!ą6`ĀŋũxëÖ­Û2 .^ŧ¸™m‡Æ÷ņm,ĪŲb9y÷ņm,ĪŲbšę‹Ÿ_#ž×GÎËuũčúņkġņúČŲbšŽ]?~ø6^9[,×õĶ5ޟĪ^égĶ~-?ķÍ÷ ‰ĩÚÚZëͧOķÚÁRä îͲĒßēđm-ÄOüĘ˙3.Vŗē~tũčúY6Ņę—&8čûŖīΊ~ĐWERAąVcũúõKíŋŌķžÅÁķžļJųœoÎĻúKųF9V9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖ×Ö6°Ûj*$Öjjj­W¯^iĘŗü čÁĨ—ąõD™ī{>úĢžøÅëÁ¯]?%‘‡į#/}ôũ‰×ƒ_#úūčûã˙6čū[Ō#ūŨˆßgÄļZúĨĻfQcī 9„S!ąF >@ßF›÷āež-ˇ—׊äWÉŽúKĪC9‹¸/~ËNgD•ōâˇôڊŒ"—–ōąLõuũq=xŠ×CĨ<ž^æ[Õ/ˆ<*åÅoÕŋ~üz¯´ÕĢ;*‘‘]D@D@D@Vke'áŊ÷ŪŗÛnģÍæĖ™SVŌqģķæÍ3^—2wîÜ?Õéīŋ˙nŒgÚ´iĒÎ\ų‡~HŒ,X°ÜÃßåFĻ " " +@ đ4č ´Ũ&U˜GŪ}÷Ũ›Ú2dˆí°ÃvÄG4ŲÚ23yōd{đÁmß}÷MëôhŅÔŗgĪļė&Û֌3ėúë¯ˇ—_~ŲęęęŦĄĄÁļŪzk;ūøãm5ÖČÖ)7"2Y_HúōË/íĖ3ĪLŸwÜąÜuĨØ?õÔSíã?n:–ĩÖZËFmGy¤õīßŋÉŪ^™^xÁîšįģīžûlõÕWoĩ›UoĢ’ƒˆ€ˆĀJO`•ˆŦÕÔÔØ^{íe7ŪxŖ­ŋūúv˙ũ÷ÛW_}Õ.pé+Ž 8蠃ėŠ+Žh—žĘŊčĸ‹ė7Ū°K/ŊԞūyģúęĢmŌ¤IvūųįÛĸE,Bl9]rÉ%Iä¸×f›mf=ö˜mˇŨvnZéļđ8p =đĀvĶM7ŲŽģîjĪ<ķŒsÎ9MĻ´įAs~a´ÚjĢĩÚÍĒȡÕAÉAD@D`Ĩ'°ŌG֜ ‘­ 6Ø EšŪ|ķM›9sf*b{íĩ×Ú;īŧc}ûöĩŖ>Ú<Š„āáFĖ”"‘Š[oŊ5 ąŗĪ>;EŸÎ:ë,ûõ×_í”SNąũöÛ/ BīíwÜaͧOˇˇŪzˎ;î¸ÔS_ˆ¨?ü0ĩuČ!‡4ĢÛ(š'ēôŅGŲöÛoo›ožyŠæm˛É&i,ˆ—ˇß~ÛÆŒ“đŊS§&!7nÜ8CpPĄG4ލã…^h+Âo„ Šîˇß~k×]w}öŲg‰Õnģífx !˜.žøâäO§õÖ[ĪÎ8ã ã…Čí5fgC˙ˆ%"[ǡ¯ŋūÚ^yå•ÄD9ŋũö[bC4Ž÷ū}ōÉ'vûíˇÛ§Ÿ~šöĪ=÷\ÛxãmÖŦYvË-ˇ$DEˇÚjĢ]|ä‘GėņĮˇƒ>Øîēë.;ųä“í‹/žH6Î)¯§!ĸ×Ņ|ƒļ" " ŸĀėŲŗ­wīŪË5ĐU"˛Æˆž˙ū{ģ÷Ū{íîģīļ‘#GQ#7_DÎÍ7ßlÛnģ­]yå•iŊ7én¸Á†š|h1ãĻī븘fũ駟˛kÔöß˙$˜–#ęEzâ‰'ėÕW_ĩkŽš&‰ŋącĮ&ûŸũƒ@áøļÜrËĻ(Ņ4öą{$‘c}ú駓}üøņ†Aˌ5*qApĀ`uÖI ˙ųķį§üyį—Ä)Ę}öŲĮîŧķN{ęŠ§ŌĄÃƒ(âå€HLi—Ô^cN/ųÃy`ŧˆMx3f_ˇwųå—'ŅĘ9f ŪŖ>šj!ā~ūųg{øá‡ ÆLb*‹heũ!BœÄÄųvØaļîēë6ŲÄRĢåM̌X#z‚°@T#CzéĨ—RDäÉ'ŸLeŦ)"‚D$Ž›÷‹/žhW]uÕ2Ķ\>¤˜O†đĮ×~õčŅŖŠūĐFņGŽáŨwßĩÁƒ[˙M¯ĐdÅ,b…äãĒäHßDĶöØc;捪ŌÚ6ŽŖžž>}¨O4ĖߊėãD #j´öÚkÛŪ{īmŨģw7ĸ”žÖ\sÍMc*’zŋüōK*j¯1{ŋå[‰søúë¯'ąÉz>Î?˙áZ iũņĮSԌrq3Æ 7Ü01bŠuĈɟ1ņ!ˇË.쨠AƒšĘ;šo:8ũčÔ˜õA¨qī^۴ƈ5ĸDŒ!ž† Ã4&Q<` īôĶO7D‰)?ĸ+Dˆ˜Ūúæ›ošø¸8Z¸°õ—ŅQÉũ;Lģ"Ԙ:ŧė˛ËšÚü3™aÆĨęLwÆÄô.ÉËÉs,<Ŋčĸ†éߘüXŖ F\đrXÆņ#øhĶŖL^ŋŊÆėí—o]@"ƈ‚r܌‘s|Ė1Į¤¨ uŽ=öØ$Ô¸N8á{öŲgĶØ8~Æ #ÆZ>ÚcÜÎĄŧėɡŧ틀ˆ€t.ĩ‡z( ĩxß-:ĘÅZã=mĨI Ž(ÉĄ‡šÖ"1ČM—õHDWXķ´ķÎ;§5KˆBŸūyZ“Å("äģīžKã!ōÄ´*kž^-%DĶq.ŒhĶnŦ)ã‰ËļHLëōAŦ1I"‚ôÚk¯Ĩ(QœneJ2qâÄ$*ŧŒã"ÂDYyBėą&ŒHëüØōŠĻ[Kí5fī—sËôãûīŋŸÄī|Öîm´ŅFļÅ[$7ÎSŊÛlŗMŠbdûLwsÎáÂ5ė˜ŽĻmĻJcĒ$ŌܧŖųzŋڊ€ˆ€t>ŦûŽB }âiŅ’|Z2YčæfÛ0čÛŗ¤ÖĻĪ^ŌZŗękā&Ë+5ž{îšôd(k×x­ĸÃפáIBϏ˜ĒDdq#ßi§’ =÷Ü3‰-^kA8ŌŖWšŅ°n5PŦņbmkĄ˜ŽcŠŅĮâũļHO}=<í´ĶŒŠWƅ9餓–é‚1]pÁIMd}‰éK†`=åLsz"jFûŦŊãĄ"GŧÅ×sš_nÛ^cöžxˆãđÃOį‰č=đ1D&ŅRÎRp.§Le"´™ōfl›nēŠqŽH'žxbZƒČCøķĐSáESGķ-z\ōXĩ@a5Zƒā¯YãžGš6̤¯öm1vfŨŖ,Ë(1D r3ŋ}âL{äĢiÔlwNčoŊęĢjc7P>$Ö2Aá!ŽaCûDØ9Øņûã?Ō͜›6 íIä}Ē ?nö”1fWžøōaŸŠ5Ęč›vyõʧŲR'+ø‡cá8ˆ4ņÎ1úŖŽ“kÕx Žc‚ ã%q\° rÆØIl)᜞žöšxxš’}gB=gJŊČŧ=ĮLŋđ%ų9V?ר)į¸Y¯Čē4Ž“ãfllņåxåøs=Đc…ãāãį–ļŖ­Z|9%ÎE \¨Ąú¸pc´˙uõ kh\ĩīVŨíˆŋ÷O:ƒ{÷ą˜ZŒŦmō—’Ō#L7iĘŗáŌHMl¤ŊķņæJ_܄crąÂ :ūōyÍ ›'Īģ @yÂævl^ĄFō2ÉØ†\<1Ĩ‰ôąÅ.Ø[,ĮŽÍdd‡rR3mĮv؏õÚsĖåũŌwyâp.g~,øøuã@ģ\ėœ7īƒēą>mäl͗ãPč<Šĩ¯~n L,‘&ƒú–ÄYšHs"YąæÎ#†ÔYĪîķlnc@ë_͚XķƒíJ[CyâŧđĻ}ĸAJmO@|۞ŠZŽF€Y ^+æ´\D &ĪO*Íö1{9zXVŽ5ĄĢ8IʍĢW}m;ŧ¤öŪūrMūniĒŠe:”ĶŧūJ‘í¸‹t&ž]äDk˜" "ĐfE„ÚĶÚK˙WkŖ˙j6¨_ķŠĪxxYą†PķĪŪŖj­G])ĘsísslÖŧæŸØ ōíK qkßģVëâÛĩΡF+" mE <‚Vžīũ Ŗ.~lvšĩl\­mģ, 5×]îˇŲ ¸aąNˆõSŦzæƒ9öĪ×KēnȀûī˙čmPZS^D@D@D@D O€J_?Í(ũŪ÷ŽZdûoŨ+͘ąŪÜ.@¸Å”k8 ÖX|Í"nÛõ˙Z`o}]h=—Lũ}DŊũûČzļĻD[Ēŧˆ€ˆ€ˆ€89ķ§‡4YûĪ’2Oc†.° ãē'ĄÆtŦGGŦ‘Zk8YãÉAž$ēæ‚íŅ÷Ú˙LbqûRÅ×Ŋą]Ū2 OˇôŠę+‰€ˆ€ˆ€ˆ@W'Ā{j§N_dūō[x°´lŸ›gãūV×$ÔxKo/ā•ZåB:Í"kk>JtW Øø›øiMžÚŊąķĨĸzJ" " " " Í ô¨]dŖ×o°]G4Ø:ëĶ먈¨!Ô<ĒViŨZÅgEŠ€ÂCéeダûÛēf žoŋü>Įū÷Į:ûmV7›6§ÆfέYF96?LYD@D@D@D k œÕģ~ą îģĐ6´Đ†^d}zōrũú$ĐXŖæ"­RDÍIUk8DÁ†P‹ļĩj5]Ø(âJ?ˆíåÉID@D@D@D ‹đHkŅjkKŋĸƒ@C¨ņ! æ´„*+Öhņōø> ĶkÚbÔ ‰6((‰€ˆ€ˆ€tUč%RÔMŽhh¨\TÍë•sˊ5ī \°ÅNũg˜$Öʑj_D@D@D Ģ@3šnōeeĨ[mĶÃqúŗ’PƒcEąF!Ŗ`ķNéĖEš¯eÃOQ5¨)‰€ˆ€ˆ€tuh&˙ ĘĘ?^'ō-ĨŚ7ā‚ÍĻCgqÛRG*ŽDĀuSnëZjøĩ*Öpō†ĸh#ī)æ[˛y™ļ" " " "Đ ¸fōąųžoËížßŌļXķĘ;jÍîåڊ€ˆ€ˆ€ˆ@W'PIGĩÆešÄZllE;Œm(/" " " "Đ2Ō¯ŗˇėŖR*XĢxu+" " " EHŦĄ$¨‰ĩ*Wˇ" " " "P„€ÄZJō*XĢxu+" " " EHŦĄ$¨‰ĩ*Wˇ" " " "P„Ā˙˛9Ǝß"FNIENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Browse Repository.workflow/Contents/document.wflow000066400000000000000000000160571445560650400334640ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx browser "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{191, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Check for modifications.workflow/000077500000000000000000000000001445560650400277545ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Check for modifications.workflow/Contents/000077500000000000000000000000001445560650400315515ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Check for modifications.workflow/Contents/Info.plist000066400000000000000000000012101445560650400335130ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Check for modifications NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Check for modifications.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400334525ustar00rootroot00000000000000Thumbnail.png000066400000000000000000001112121445560650400360220ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Check for modifications.workflow/Contents/QuickLook‰PNG  IHDRkĄ_ëUiCCPICC ProfilexÕYy8U]Û_ûĖŽs Į<ķ,ķ˜yžįšpĖķŒáˆ‚^'øÛ9ūeŗæíŖ÷—đ 00ūmƒ DīöÅĪ9_P˜éîāžŠĀ"á:H3  ôūĒ%/ ĀšXX‚ĀŒCāap›0“˙˛Ķũ‰Á¯v~pģ÷H^°mĖß}ūî ÷ųĮgđ†ņ9îcWˇ;ē(÷€Ôúücąëī×h¤kĨßIoũJ%‹R@é ÔQ(@F1ŖØ$JĨŒŌFiĸÔ` 0¯aĪ~Ƹë?¤Ņ7ölXŧǃ?ŦŨũīž´Āá—uĀßŋ˙c `hšeųĪˆö9ŋ膅ĮGøųG“ĩá7×G‚lę%%A–•–‘ŲU˙ŋ)ģkÖīÁŽÚüZ‹ æádūj¨-€E˙# ˜ öŧ˙Č:āđ fÔ+&2öˇ?Ôî ¯„´p„˛nĀDāį, áĩQ č` ė€3pƒãĮŽÁHA HŲā$8Š@)¸Ē@h- tƒ{`Œ€ 0fÁ°VĀ:؄  !ˆ â!qHR†4 }Č ˛œ!Č …b Dč” åAEPT ]‡Ú nč4 MBsĐ;č ôDŒ.„bBĄ0EØ!ö#üˆDââ,ĸqҌčF &ŗˆ%ÄW$@R#™‘ŧHI¤2Ri‰tAú"#‘‡YČd9˛ŲŽėGŽ!g‘ËČī( ŠEFIÂqj„˛GyĄ"P‡P9¨"TĒՋCÍĄVP?ŅD4'Z­Š6F;ĄũĐqčttú ē Ũ‡ž@ŋA¯c0fŒ0F c„qÆbbr0%˜Lf3ųŠÅbŲ°âXuŦ%–‚ÆĻcĪa¯bī`cß`7pÔ8œ,Îį‚ ÅĨâ p5¸NÜcÜ[Ü&• •*•%•7Uü4~•šššZ…Úš:€ú0õYękÔ÷Šį¨ŋH1‚.a!†p‚PIč"LV‰DĸQ‹čBŒ&ž Vī_7hh¤hŒiŧi’iŠišiĶ|¤Ĩĸ¤ÕĻuŖM - ŊA;LģLGE'D§KGĄ;DWL×F÷”î+=Ŋ Ŋ%}}} ũúE–$DŌ'y“ŌH—HwIķ H~]/†#  } o1ŒÂŒÆŒŒŲŒuŒCŒ+L$&y&ĻLÅLˇ™f™‘ĖBĖÆĖÁĖšĖĖO˜°pąhŗø°d˛ÔŗÆžĮÖaŸCĩÃ7G=Į<ĮY§=NINÎėÎέ.X—+._]õ]ΏžŲ§°/}ߓũÂûėāÆîėv۝֝â~ÃíáčQãąEऔSžz{ž÷\ņŌõ*ôZōÖōÎ÷~įŖî“įķÖWŨ7ĪwŅOŨī´ß;M˙˙åŨ€ĸ€ĪFĨß‚,ƒ*ƒv‚ƒBp!!mĄ¤Đ ĐŪ0î°aŖáâáéáŗĒg"V"M#¯DAQûŖZŖáäp0F$æhĖ\ŦFlqėFœC܍ôB ƋÅgÆŋM0H¸|uĐë`O"obJâ\’vRŲ!čįĄždūä´ä7‡ WĨāS‚RĨJ§æĨŽq<ŌžÆ•v8mū¨áŅÚtšôČô§jĨĮPĮŽ eĘežËü™åõ0[:ģ {+Į+įáq™ãgīœđ=1”Ģ˜{á$ædčÉ'§4OUåŅį%ä͟6?ŨœOÎĪĘ_;ã~æA|Ai!ž0ĻpöŦŲŲÖsįNžÛ*ō/š(Ö)n8Īy>ķüˇī’Į´.ԗr•f—ū¸pņY™aYsšPyÁ%ĖĨØK ũ—•/W_aŋ’}eģ2´rļĘĻǎZŠē熺&ˇQSûîęžĢ#uzu­õ’õe Ė Ų×Āĩ˜kī¯{\ŌhÚØsCųFũMÁ›į›š˛šĄæøæ•˙–ŲVįÖŅ6“ļžvĩöĻ[Rˇ*;x;Šo3ŨÎíÄwĻuîÜI¸ķĩ+ŧkšÛ¯{žĮŊgęŽĶŨņ^ëŪĄ>Ķžû÷ îŨí×îŋs_ũ~ĮÕm•ļ (4* 6=RxÔ4¤8Ô<Ŧ4Ü:ĸ2Ō>ēw´ķąæãî1Ŋą{ãÆãŖOėŸ<{ēīéė3īg‹“Á“ŸŸĮ>ߜ:<žÎzA÷ĸā%įËōŅ™†YÅŲÛszsƒ¯l_MÍ{Í/ŊŽzŊõ&m¸Pđ–įmõĸėbĮ;ƒw#ī]ßŋY _Ú\N˙@˙áüG‘7?i}\qZyķ9ōķǜUļÕĘ5ųĩž¯V__އŦo~ËÚ`Û¨úŽüŊ˙‡ãˇ›q[Ø­ŗÛĸÛí?MNī„ėė„S")ŋr$\#|}øR sg˜;Œ€īúÍ)~YĀt‚m`Œ„ķ_!`į§×Ā7HJƒ&jˆjxŊ€AuŖŨ0Ķ‚=„ŗ âĸÚĀĪP?& Ō<ĸ§["á$͙R˜¯˛ŧ`ceˇāČæâĻį1'įđNđķ ø Ö}Qģ+AÔ—JÜĶ%Ŋ-k('Uგ ˛ĩJ˛jŊڜ:Ŗ†ŧĻ•V’vĩN‡îŪŠĩ!‹¯ą¤‰’ŠŽ™ĩšŗ…ŸeĒÕ9ë:x%xiˇâ™D•]l\#ö%ī?áVåŪé1J™õüâō!ų øÉûëX:y„Ä…&†e„gEäEæFŒ>“›WxātüɄôƒÉ‰1I҇“)‡R SÕČ§IåN§MßÉX=ļœ95Ũ–SwŧųÄėI–S†yņ§KōĪėJŸu;—VTWüĒ„xAŽÔãbNYSųdâ˛ČķʘĒãÕ 5CĩęhëeLŽy^oĖŊQuŗ¯i´yąågm;ī-éÛæwŧģÂēôš›×{ž¯ö^KĪũ;†N , ž~46ty8fD”4:ũ¸aėā¸ÁibæIũ̓ĪL&Ų&_?oĘ˜ļ{!đbķe˙Ė…Ųˆ9ŊW,¯>Í÷ž.}“°`˙Vf‘~ņĮģ'ī;–Ē—OHųû)hÅ˙sĀ— Õøĩœ¯ÕëĪ7ž{ūŨ ūéļŗŗ'0{f‚`/p‡@5˜‚3;Kč4…FœBü@† ßŖbŅt5Æ‹Įā Š‚ņ&Ô{"DfZ.: z5’-CcS%ķ}–u62ģGgW3÷ 2¯Ÿ+Ļ@›āŧ0^DZÔ\,Dü´Ä-ÉįR_ĨeTdåÂå‹šģ•ž)oŠ2¨ņī•S7ŌđԌƒŖáŒN™n•Ū ũ;ƒ†SF‹ÆĢ&ßMˇĖļ-P–´VŦÖÜ6ŧļ"vōöĘŠŽN&ÎĻ.&Žvû÷[šŲ¸ÛxØQ\=ŧėŊ},}ÍüLüu4Ղä‚ÅBøC9ØÃIt‘Ø(DÔVôZĖĮØˇq3&ã'<FĖĪ2ČöÉÉ>~íÄpî‡Sø<…ĶųQgŠ ē įĪĄŠÄ‹-ÎĮ””^č/ũXÆXŽrÉ­"įr˕é*DĩTGmÎÕļē…ēk×Ŗ/ܸųŖyO‹_kA[ī-¨Cęv@g靑nLöŨ”ŪŽžĩ~ūûĘö>ÔPT|¤8¤8Ŧ8"3*öX|Lxœ{‚ũ ãSÂ3ĒIhrûų§Š÷Ķī^ŧ{97ķfvfnîÕėü‹×ķo>,lŧŨy‡{Īž$ĩŦũÁöcø§Ŧ•ĒĪ_>¯ņ|5[OøVˇąđƒs˙Véöâß_ķô0ߒæ0ˎÁGˆr…ķö„â b )ƒĖGnŖBP¯ŅžčEL8f›‹Æ=  Åŗā{¨Ŗ „%b=M4­œGŽŅWŦ…™ Ļ9æ>–JÖ ļ@v;]N!.,×:÷žAr#o1_:¨€ĩ ĻŸ0ZxCdB´YŦDü°„줁YjkĪ3éz™#˛.rbōXų§ W(™+ +ī¨L¨VŠ%ėĩP×@iLi^Ķ:ĻíŖŖ¤K¯ģĸ7¨Ų ŅĐÕHŘɸ“É}Ķ2ŗxs[ KŦå+Ģë›h[c;Aģûg×3ŧœ]č\\Û÷åî÷sĶvgw˙čŅM)ô ķŌ÷æô^õšī[ėė¯ĀīõŊAį‚cC BšC×á}Ŋ>âh¤W”f4o ˆ™í‰+?ī P,‘>q#éåĄŪäēÃįSޤFqKŗ>Ē‘.™Á{Œ!ų#ëSö|ÎŗãŖpüôŸė<Ք×pē1ŋáĖՂŠÂËg/ž+-*/.>_^rņBeéPĒ\ūĨâÄåÎ+KUôÕ*5^ĩĮ¯ļ×-6°^3ųCãMÄf–ČÖúļOˇd;Üžs‡ÔÜ}ë.worßĮ~īûĶĻæš÷8f\˙‰ø3†į‚͆/“g?ΟX}—÷Áúķđ†Ķîü˙>[ÚŨ0ŠœuĀ™ kCrö Ô +"v*!Å ¯=ŌÉũ{˙`ĒđʑJ`ž8Ą ˜†Cų0ߛA`R{Dâ2bņɏ´F&!k“(|‚ā3ą!4­ŒA_BOa˜0V˜lL?‡5ÄÅöãˆ8\nžJ’*šĒĪ„÷Æß ÆRģSˇÂĖ'„pŸ(HĖ&ŽŌ8Ō´ÃlĻ„Ž@wn…>”ū)„´ÂÍđņé$3 s‹K;Ģ)ë [,;žŊ‚C›c’3œ‹ĢÛ™{‹§‚lIūÉ[ÃˇŸŸÄß'įú߄ڄ“E DŠE'Å*Äã%L$E¤ĐR3{ú¤Ģd˛dãä|ä÷)Ø*Z*é+¨ĢZ¨yė PĶHÕ,ĶjĶžÖų¨GŌW1đ3Ė3Ē1žlrŌ4Å,Á<Ü"Ö2Â*ÂÚĮ&Ô6Ė.Ų>Įá¸cĄSŊsË¨ëž7nwuGJĒgš×¤¯ŒŸˇQĀXÖ 9:ÎŲõ3Æ#ļų1>4a$Q!éR2ũáC);G‚Ķ>¤‡d,gúg}Ę ?ž‘›vJ$¯1ßôĖDáĄs†Åv%ÁĨGËZ. _AU)×D\Ŋ\?í†oĶ…–ˇí{;ĸ:‡ģ‰w)}-÷Ą‡ÎƒĨCKŖęc™ˇž‘ž[O§ŧėũ2ĪōÆč­ÍģØĨC’>Å|vYåY[X?ˇ!ņŊr“jËfÛíįá_ë‡ |žUúĀgˆ2†ĸĄRč!´Ž #Ė`_‰G"‘˛H 2Ų3rI”ĒõE렓ĐčL<æ6`õ°™ØĮ8Nœ?Ž•ŠŠĘ…Ē–ę'Ūæž>ÔŨAB áŅ”ØNCĻÉ Y§  }AgM×G¯J›¤@jbPcčf4bereZ`ŽaÁ˛\`Uf}ÂÎNÍ^ÃaÎąÆYÄĨÁĩÄ}Į”gƒ|7‡oŠŋLĀSPXpYčšđaKQ.ŅobCâW$ŽIúJf—ÁČŦÉÎË=–ŋĢĐĨxS NCUUÛÔ:÷ŪS‡YŌ{m”Ž°ž†ū>ƒÃBŖ:ãF“ĶZŗķ6‹~ËQ̧Ö36Ÿí {nIGe'{įh—L×ō}wöĪšc<¸)Ļž^ĮŊoøLûaũ|Īõ  ķ /‰xĸÕbbc¯Į}‰WNˆ8X—øífrúáTâ‹´˛Ŗ_2¤Žee>ÍæÎ‰<>K>uĒį4mžį™žBŪŗEEZÅK%EĨîeLåc9WĖĢĒßÖ6Ôå4x\WēÁys­yēĩ­ũfGIgJ—wkīŪ{ō÷ɉ6†gFûƚ'ĒžfOO™ŧИažũōjüuŨBęĸÃ{îĨĨˇ>e|6_ĨY{¸~fÃüqŗc;ô×ü̧HM` ’ƒ" Fh Ą€8€¸D ‘Į‘OP<¨`T+ƒvDWŖ71˜Ë˜ŦöŽ…{L%OU‚Įâ#áŦŌŽē— Nh%JoĐČĶ´ĐęŌĐšŅ­Ōg‘$Hƒ ąŒŦŒ™’˜Ĩ™įX YmØŲž˛ŸápæäįüÂÕÎ}ŠĮ‹,ĮKÍģĖwŋB C0LČUØLDCTJL\œO‚_’[Jd¤´’Œ‘ŦĢ\˜|ŽBĨâ°Ō7UCĩ¨Ŋuę šÜZû´‹ufô$ô“ ƍ؍ŖMÆĖÍOX,[ŲX_ĩeŗK˛_t4vjsásÍۏsKp_Ĩøz>÷ļõöŗđŋ¨ÔĸÚŽŅī ũąqcņî īã“6’3R8RĶ gxûžu>Göøxnä)B^{žÍ™íÂķįHEąÅS%Vē/*–U_âŽ(ŋ"TYį 7Ž*Õu4h]ëk4ž1×ŲŧۚĐļ}ëômÁÎĒ.ąîĢwĨzîI÷_}@ķ0gúQäĐüˆõčĩ1šņā‰OŸž|2Å:íôâė˧ŗLs6¯2æë_ß}3ĩ°ŗČôŽ˙=ßī2ĪŽlˇ?Ŋ\éü\ōÅUfuuíúאuōúġ˜ ÂFÅwųīw~˜ūx¸Š˛YĩŞ•¸u›iÛsģ~{ķ§áĪ“?'wøw‚wšwį?ĘWNvw÷A>~|šŗŗ*Ÿ_æ°}jggŗ|ggûL2āo ]ÁŋŋWėcā3÷ķ™ģčîõĒŨÛŋ•˙A4zXąî8” IDATxė|UEöĮOzGņ¤¨(Ø;ŠŊëŠ}ûĒk_ûîßžļuíŊˇUÜĩ÷‚ {EDD@@éŊ'!íũį{’ķ¸\ŪK^BōáL>7sgæĖ™™ß;ķģgæŪ—3yō䄸sGĀpG—äÖËZyĨGĀpGĀp'kŪGĀpGĮ8YĢĮĮĢæ8Ž€#ā8Ž€“5īŽ€#ā8Ž€#āÔcœŦÕã‹ãUsGĀpGĀɚ÷GĀpGĀpę1NÖęņÅņĒ9Ž€#ā8Ž€#ādÍû€#ā8Ž€#ā8õ'kõøâxÕGĀpGĀhä8Ž@Ũ!H$¤ŦŦL~ûí7ųã?dîÜšŌ¸qc!ž—““Ŗž‡WN<ģ9OōōĒ÷ܛšÚĄSsŲš_gpZWiÖŦņR}AuđĪûŖßoË;ŪŦLũŊnĄĻ2Įnj…aī7`ŒxAԆ "M›6•Ŋ÷Ū[š4iĸ$-//¯ˇža7kk×ȈŲŌĨSkÉ ¤Ūū+O”sp˜áBސO¤4ü+)MČ´I äų'‡Ęœ?ČõwnúHųŗŗMĻåšjįŋÕ7ĶūhōéJ'=^Īx8]^_šāZ[Ā_úûʅpfĩ­Ūã`f:]ĘXĨˆlŖFRËÚžû¨1a–Oėå“:“œ‡—`ą˛āÁuæZN/)(É/ G"WōY+Ga`k„ķņCÚĸā”å†ô\iąfpÎö2ŋM3ôø¨Ĩ&ÄÚŧjŌķrs%7zTXš6ƒßWžxâ‰$Y#y|;ŧ?/ÁL+K¯Í{§>éōeĐút5ŧ. ļ’’ŦmąÅRZZĒ“{ii‰N„Č0ģŋráĀ5´ëËuŊ(!sōK$GÉMY¸ĻåÄ[vļŪyUvŨë@ …K^"Xׂ…-øÅ9Ō{¯nōúCŸËŅ'u“FiŸ¨íÁę[U¤ÜââųcōĖ`n*eTXk.åÉĸE åwŪ“G-ͧΠũķahOi™´k×6,—[ŒŊ_7œûzeėīôã†æœŦ՝7ožäįįKįΝkA›Ģ¨.LDĶĻM“_|QÎ8ã ÍÎdQ—Ž2§N*/ŊôRĘ2I/..VËK§Nq+Õ ĸVT\ŦlMtRf \°`<ûėŗ2|øp9õÔSeŗÍ6Kļá†nPũmÛļM™Ļ%#+9aōÍÄEõ2iÄËD‡É,Z´HĪąž””W%R,Ĩŧ1ŲSîC=$?üđƒ^söļĩiĶF Õw×]wéK eÁr|ŌBœ“_ũZ§Ģ¤ŅĘŗúh;*ʏÖ7Z?ČÚÃ?œŦoTŋé‹ĘĶŪúĻŊ\C|ČZAIB Ãõ\\R&ų|Ÿ¸ų‹ åŪ¯ĐnußM—Ë܅’â‘É/– 'øŽ, qymšË… “}'Ú­? 6LļÛnģ¤ ņ™8Ë_Y4ŧÁœcüŦ\ųmzŽŒš\,oŧöŠü1ŗą|öŨx)˜;Uznē™ ųü'ųæëĄŌ´Yķ`! ĩČiō-éŸv}ŅĩÚjĢÉĻ›lĒæ>}úČ#<"ß˙ŊlēéĻZ–öŖ€_ēëM˙æ›oä­ˇŪ’x}-\W÷ÃĒŦ?Ûũ=“>Ŋ*ʸe­šW=:@~ũõ×2räȰ,đŽj)((XJ˛<ÔÄŨsĪ=ēĮÉō..Ķąŧ~´íčbālŨēuRm}ŠcϘ[{Ə/‡v˜N ֘LtXūTífâ)**Ōe-lB8˞:Á_&6y?ūä9ö˜c¤W¯^7jôč0ųąUŦé%!oq {É:a•RÉōLŲĩféËôQŋOBũŽŠ¨u($…=8æŦ|d9âõEF›BC’úŅgųãúęk¸4ä˛pMhí),i"EÁJ––5ËrÃiiX đŧ=č1™>y‚4iÚ,øåõAČ~Įœ%A"Ö°tŽüâ2). {šš7–Å‹+aI^į˜™Ŗŧ÷Ū{TŸô¨üR‰‘@eũ‘6ĐŅŲYúį°sƒxž-š#_ ūL¯ļ‡|ûŅ›ō§=6‘šų"#GMysgËop(•ŗËęísË÷e†ruVh—Õ˙Ųįž•Ž]ģ–×(\sđûđÃËûEˆÕŪn‘x ŋõΕĐ?z?žĒ?–04ũŽĀ;C<˛Ųß횹ŋ,nY[“Œb80ķcYúå—_tkÖŦ™N¤Ũ~ûí˛Ë.ģČqĮ'C‡MÆ÷īß_—ŧvÜqGĩ4ŽRČÓõūûü•W^Š3i|ōÉrĢ­ļ’wŪYžøâ Íķūûī Ö<–XŽ3=Q˙?˙ų ë/ų‹y䑕æûũ÷ßÕJ/įļÛnĶr˙üį?ˏ?ū˜,‚ÃōãYg%üąâFŲͧŸ~Zå,o‡ûīŋ_ÛJ{>účŖ¤ÎhŨĶɘNęŖ X~°ŲmˇŨ–ÁâąĮ{¨…‚ëÃōõ%—\"3gΔ}öŲG^~ųem‡•¯7“åöÛo¯¸›UÍĘԌ‘:0ą° rļxq hXĶBņv`‰úú̝äškŽúÆîģī.ũÃAŊ ¸˛ās>fĖ­ãŽŗoŧ19šmĨßЧnēéϤŧ•A~ōrČ!Ōˇo_Ųq‡|,}— īЧžŌūE|"Vŋ¯*ꇙzŒûí7Õĩå–[j™„)‘Ēžƀm ûĢp´…ē0°A pÁyL•°@ūë_˙’/ŋüR—H ׊*Ģ—ą‰lėØąKՇ=R”M:]œ˙ũī_ kãßūö7%Ž\7äØ#tũõ×˟ūô'ášāŌ՛´K/ŊTąėŅŖ‡<øāƒDi™zūŠe ÔÁú„ž¸Â°÷Į ^,( õ[kerėąĮé„ )ÜsĪ=‚\QX.Ú\÷ą-^\¨z.\¤DūēëŽ “õ@Ų;L0§œzŠ~dË-ˇ&Ŧ“O>9LÚ{ũ‰waÅŖ3õ(ˇbAîļŪzëđ€đH ÜC•}ō ;W˜č_|ņ…`)mĢųągĐĢ“õc?Ķ A×6ÛlØ#,˙¨ēĘÉzyĢīE]¤ÄŊG÷ōčc*ŪķæÍW+ 8ô\¸ZËž°í˛ëŽĄ6–É“§ČˇaōÛĩÖęúŨ{ōSØË÷Úk¯…ēĸ_–jõW̌ū#ŊÂjW‡a*Q–€0"^"“6’ļŗƒĩ(§‘”`] ûÖÂûž\î¤ŖŪ:z„XÖcq\^#V.WķF!Ž?ü¸#Ë[øÔ’Ę‘ÎũĮCŅ3Ī<ŖKƒ<Üpâ7‹[ToĒūX&†1‡ûrSüÂĐļĐ[ĨQë–2múTY¯sKY¯ËZ˛`á —.w敇mŧâĨÛ¯†÷Øc…{Ŋ}ø–e•ŪđĪ€Y™Öãģīž×-(_~ų…üõ¯•¯žüJØĒpĐA‡úŊ/wÜy‡\{í5rīŊ÷'û_hFĐQ÷ũOģvöī¸ūШŦ÷wúŒģĨp˛ļ4‡ÜÎ?˙|ŲvÛmÕ:ÃSßã?×u°drEŽåB,%XŪp\p5ÎąN1]~ųåJ: vč5ũČ„„ü¤1šNŦX8+Bf„AÂ?žŲëB^&Bębų,‹KĒr˜$Ņm uboŽüXu < ĀėEéŪŊģŦąÆrįwĻĖK;°Ę{ėąjQ‚DPFtr‰Ë`UA&ļ¤q@†¨CŧāEy„=†8ĘŖūäÁᗎ͐8tđeņųD‡M‚Ē(üŗúđ\!é8âyk°ü…Ŋâ#\åō*Ąrå˙tØTâÅDͲûŲžųækÅúŗĪ>SkĶŽč@NiķĄ‡ĒY KäÅbÆ^ŸFōÔÚE; Z\wũ¸M›ļZ/¨ā ŅúQ‘âđr„éĘ o’ŋ\×PŨ“¤yCĩą6ßģwoÚi§ôĄ Iē>đƒZćkF%ũ¤“N’ĩ×^[ķõčŅ]f͚Ĩ„‚G|´mŅs͐…z­Xö ¤ Ņ$\ßâ0I‡fjÃ5Ë o{â—;#¸úáŌķ?¤2„ƒ )ÍɓĻyá ŌđQ\ë3HEÅããčo掞újißžŊtëÖM 2Š01Šú# [˙4Ũŧ Ë DŦ$Å… dę˜ōT Ũ9yMdį]÷>ĶGx1"ģâpĐnޟŨ åu)¯i‡ô“‡ÂhũĘß&-—a`õÕ;HˇģɓO=ärƒÅū#í<Ŧĸ7Ģą0âŪ~›í' šéæ›4Œeū™Ž ãΉ'ž¤ņVúĐŅĻm•ųüķ/dôčQÚŋ$7đā:>÷īŋGhË2üįáúM 8\e?üpŊ×ĘĘJ—ÚŽm 6€Úw˛ØßduŌ'k5€U;o¸éÍg’yõÕđz~˜4ŲĮÆ[‚L*Xēp˜äq6’Īˆ“+¤ëVĒM6Ųd9dąļY~tąüØŧyķdĻ6ÚHëD:yĘb°˛ŧÔ-žoƒ 6в)‡ÁÜdŅo å ĶdđąōD˙Ę+¯¨ĩ፪ŽŌöÅķ‚ƒĩR Ņ9ũôĶk—(ĘÄĄ—o9aÅ;í´ĶTŊlT_gu´Ũč2ŒŖõI×FČíڊŗļ˜O\ēzŗLL[)Ëä9G':âŽëÆäeŸ4@ÆÂ6‰‡s;ĸaĶAÆrҝ_?a“?XŽžúęš‹.¤  )e˜Ŗ~,CA€­Lˆ$ÎÂČsX˜ŧŅöXŨĀ~ÕÅŒŽh~Ŧ&­ZĩR}čąüøŧ ‚…˜žD˜k¸á†&ˎꡍöؘ‹ÖŸ8ÂāĘĩį ž6™qnaääm‚‰†‰įĐ7ęÂųčŅŖu9KŖM~Ô\î¸ãÅŌôZ´ũ{,UĸkŌ¤IjM(ˇd-™üŦŽ–Īęmu lKîčĸž,ËҟĀ9Ģ;Kã`šÆŲ32ԝ<čÃĒĘ)CŸ•…O˜û‹kĮžBŦsô/k÷†ÄŲ9~]† +§Eãŧ@ÖIËđ ­*ŽÖÁRļånƜ‰Ŗå‡Čô1?ɖũ“6!žMĶÆAļą´˛-›ä…#W…=kÖg°Č?ë[æĶGé8;ĮĮ™“ÕČH|Uũ‘ļ{QØWP¸X†}ú¸|ķū]2jØ{úəf͚rÚH>/<úā ōŋgīo.˛,ZášĨęCԝ֟đ [ŧÛĩˇ0>÷"Û%°ÄŌĪ­#ËÃ1ã oĨ[?b Žæįœō°æŌw8‡Ŧ1^AūÁ‰qÆúu⡎0ûę dÜg8ʧŋ“ö駟Ęîģīžl/zŗÕ˙ŦßeĢŧl÷wÛ˙-ƒ€[֖¤ęnVnzöaÕ`û  ^ &P,e,˛¯‹ÎT;gã7Ãy2Œē„ą>ą‰ŸÁ Ģ›ŅoŊõVũ×ēëŽĢÖöõë×ĩęŦœ¨ĪrD4— /ŧPëĘK|§ĖĘšøâ‹ĩ6WÖ&6ˇĶN–†8ęĮ2VÄwéŌE'ãk¯ŊvL°nA^×[o=•aš,Đ¯ûvĖ!CŲG[ĀÆÚČĀĪr!Ëil†˛Ÿy~ ŠMĮ`AûãõæúAÎ;ī<•Ã2tđÁ'qļōņÁÛ“9¸Æ9 &žIÅō"táĨöFžđ Zd—ũdČŌvú@4¯Õ…|ô#^$?~ŧâ@ĖYŲVOâŅGšĻ“söņĐWĀ]ėdâ°˛ĐE_gšŸŊ€LxôqųųîmA‡]ú¸›ŒĩũŖđō ûé+ԇI–ēDë‰Îl:ÊörIköÛ%rƒU:, ‡õÁpäJëåˆsn”G¯(‡ūõÚđ ˇvXū ¸†|l’/ŧŧiUÔHZˇâˇAk3 GvŽoįā`a| ›ĖCã({†y˜0 /ņyČÛ;LŠŲK™c|ÂōnʉĘY{‚om¤q^—ũŊ!āUWmđß­˛6čá31¸ņäĪĶ˞tdéXn°Ø0Č⏙S9ĶO‹Æ“—7ᰂQiԁƒx, ’6hDĶ97]vN>ŦÔÍęMų”C<åpnō<}FÛ­Ģéļü6˛dyŅizŠ7#ʡz[šMėW‚$YŧÕĮt’?îLŸ2hŖ•‹,ņKģ.&OKw†G´ ō›ãšƒĩMJÔ=zŧXĒfPįĨk'ņä§lÚHáāz⍋9+Ķâ˧MX¸l)’xöâĩœfVrŧ¸ž´ŅôSõˇ6YųÔÉęČšÉ[=¸6ÖO,žĨ#oXĄgu2úšYÕ w“3YęÁÃ(Îņ6ÄëWWaÄk áúˇļŌeĩšÛ$ö1Ōo›zčG”M=­īQ_Ģį8ęĪaí!ŽzĮÛE:ã÷ĻĨ!kŽöŅ?čG†žaaågu‚đŅ^Č+ēņÁœˇGŲ“I_‹Ū?ũô“>üaQCž{ ykĢ••ĒūVgĢÛĘÎfˇkęū˛,y´^6ÍcĒ@€› “§~nĀčAVnf#vŖĪ9‡É—Ę™ŒĨĄËôDox##&g~´œ¸. næL/a+ĮĘĀO×Ōĸē-z,ŪōŽ–ÃD#é҈Č?d,=­õąüQVž•eØDeŧ-ŪĘŇÄX~ühŊ)ÄsÍÍY9Qũ‡”Až €É€r9˜ĀHŗA0įĻßę`eļƒ8,ˇĻ‹Ę˛ōāq†1×&ęĸmą4t›Ëm¯Ĩ™eX:žÕßdȃžĨŖy&Ĩxūhšxˋ‹–ka|+ĪęA\ôÜúĒ厴hžhŲ–ß\m§[ŲĻõÕŲËęÍh,hô@ŗĮrŽ=2üÃĒÆe†Ŧ•’“7}¸ŦŨ|Žö—x]­ |Ō,ß0‰Ļ™ŒÉY~ÂUõGÚ%ū3ĪévÕɞ8îUËŖÃ?^já%2ĶõŖ÷éĩ|øÄEŨĘĻ­Ņ:gĢŋG1ķsZ†L°k~|0ĘTË­Đ?؇ÅŪ.> É[ļ÷*:ŅD'ë[ d2æ#g rvXē…SĄKųm’DÆĘŎsâMį–Īâĸ>į¤ã,4x sŽ3y‹'l‡é°0ōÄQg\4žüÖâŗé(—ōíhŪ˛8,æE\¨j¨Y¨NAˆT,§âsyšAĸ¨T& ˙M~xëu™;ūGũxvĒņÄ0I•QŅiUũ1zMBSá¤_@ôƒúŠūƒ>Â͡ôĸV%ęÉu0Tˆsâ,8ģVÖŽ¨ŧĨgņví-Œ .^át‡å5Ŋ&G,Ž\ĢčÛĨĻßâđyЂđ‡mzŦ?Ē@ú—ÍūŪ€`ĢõĻøžĩZ‡ÔŽęØ>–†ØÆdöÁ°×…å–,ų"ēMb惛M$vnXÚä€oŒų–‡°-Y˜5„4,cv˜Ŧ ĀøČہ䨓ŗÕĪōŽÆ™.ōEëM^ō˜#Y‹Ã'ÎâŖzL—ÕÁdŠ#˲Ņēšūlų`‰5‰kɒ–Sļđ–3–(ęG¨Ę}ˇ°yģ‹¤ĀŽUUų3MĪ´?BžX*e?Kƒ´°‘2ށ”Í5 ŊXŲ3ɞO>ÂM˜2‘öޝšx"ŪúųHĮEå4"üŗ~­‹åĩ4|;Čg:ŅžV¯¨~ΑÃŅ6ō›CžtʉâÉ=N8Z–åi(ūĘÖß îņv8Y‹#âaG`9` gg į`gcC>“2“<ƒtR¨Ŧh›H*“ąI Î-ž[~ŌÍŲšųoyĖĮ[8“|qˋO#-“s“Áˇķ¨Žl3i3yŗŌ įšI‹OôņzŅöHōņVzĐad ũĩå2폆9uŖ#Äc IDAT|&i#0ÄáĖįÜŽƒé§ĪsÎaēKįĸēĒ’1ŲĒŽ{4=znų)‡ķx8OŪx~ōX<žŨŋQštíX™ãWļūž2c]YŨ}ĪZečxš#Pl2`ÂãĀ2c…Ás{Ī”ŦÕ * >KtŌÍVcíFɌMŪFVĒĒéÖ7ĖrEØúNmļÅtĻëÄSīĒúc*R’Ē&—*­6ÛUßt5ÔöŽlũŊžõ‹ÚĒ“ĩÚBŌõ8ėi” Ũ&/&EsÄŲ“š“5CĨzūŠœ)›ƒëĖaגkl×;]kĸy‘‡ŦŅO8GW]¸Ēú#e[Ŧ?ĻkņqėãáT2uŅŽúĸ3ŪūúR¯ÚĒG´ĪŽ ũŊļÚ]Ÿôø2h}ē^GĀpGĀpbÔÍc\Ŧ:Ž€#ā8Ž€#āÔ 'k5ÃÍs9Ž€#ā8Ž€#œŦef/ÄpGĀpš!ā/Ô 7ÍÅ&Z>É0zôhũmēĘTņķ&oŧąžĻßĐ7ŖV†ƒ§9Ž€#ā8Ž@õđ LJ—JGߒâˇų æú믟öM.ŪŽ7nœ~gkŗÍ6K–X¤Íęöũ÷ßëˆķŨĻē('؈žPO>;fĖéŨģˇjŠëzRæĸE‹ô#ĩŲ*ŗ†đx6GĀpG ‰€[֒PT˙„oaY[guŌ5͊Ėĉõ{Fŧ&3bÅų#<ĸŋ¯ĮGTųPævÛm§_'-ÕEžaÆŠ%˛fi™č!o]:Ģ e@Öø&#N––i=‘ĪDÖôR&×̞23ՉŽtŽ6t¤ĶíņŽ€#ā8Ģžg­†×œ ™/–Û7g8ˇ/˜ÛĪ‘—”ĮŲ'‘E†ŧvP<į¸}öŲGŽ9æũŪd˜Ĩ[¸*ßäͯJ~EĨ[ũĖΤČrđķ6Ī<ķLĮLu˜œųV&á?üP‰įņt“Kį[žåŅ‘NˇĮ;Ž€#āŦÚ¸em9Ž?˛Xv gáכÃ/ųIԒf“8„°}pԊĩt–ֲeKĩaøá‡tšßęÛrË-õ÷‘á…Ô*5tčPũ¨fßž}eŊõÖK ĶũņĮëīöQOŦXėÃņ“GŸ}ö™Ė™3GķīŧķÎúe}–PYžŒ—;vŦū„Ō;ėüŅcUVņ/• uȐ!ē ŒÕ6đ;ˆÖ>ķ˙øãųæ›oô#Ą›nēŠū^"j'Mš$_~ųe’zčĄĒ+ŲK/Ŋ$,-wíÚUžûîģ”õūũ÷ßå‹/žPÜŠS'­Š•I€ë‚ åOžâ˙ū÷?éŌĨ‹ŦO>ųDIfĪž=ĩ=X(!‹¯ŋūēĐv\ēz“ö駟J˙ūũƒáÇ'Ë% E šk¯ŊļŦšæšB9ÄÅë=räHéͧD~„›ßúDųČ×á$ ”Ũ9Ž€#ā,NÖjˆž‘ ûŨĮĘÔ ‹CÖōŲ$Nĸ‚›0a‚Ėž=[ÉB‡4K2_}õ•úĶĻMSrņÃaŅa{âĐ9}út}á4Ķ…lƌdƒ=ņĮņãĮëŌĢũÔ yR•‡eŒō°JŊõÖ[˛ũöÛ'ÉI´č‰Ę`EŖ,t’Ŗ|~Øk˜ĩŸzCö~üņGĒĄųĻNĒų DXŅ…CžúãĖb™ŽŪ8ĘOōķ›œŖFR>âhžč'.^oęąÅ[čuÜ}÷ŨåwŪQb Á$å7_+ūFvßpGNÖǃVL–I"¤ĪÁ¤Ÿ˜‘ÁADĩ0q6Š3ŅãXĸ„`!ÃBɂܰ,Š• ˇ~xë”|–ÂbzÍz‡,iXæŪ~ûm%GĢ­ļŅ*O}ČCŊMiŠĘŗ2öØcũL Ë~,šöč҃,I‡Üž{îŠdŦP,^$ Ū%œ•iuĻū”KŨ­ømÛļÕŊiČ#ksĢŗų .\'Ōh?$™s;¨ƒå‹ÖÅôŒ×›ëgu?Ž5ųņ‰'ŋé@ŋĨQž;GĀpG Ļø 5DŽIĮō$ƒRĀ„=,Žtdq–×Î-Œhà 7ÔŊdV§Ö­[kŸ ÁiĀĮųŦYŗ´ČAĐŁu Ōiĸ^¤a)ƒHŦģîēÂŌ城<Čy(‡%T–0ŲÛeõļvßd žXōĐK°ėąKûđ­Žäåœx,nvNėđЎYÎЏ iÔ rK8NÔëÖ5^H /KŧV_ķ +Ž }ČFë îVoęÉŌ*ä•8ö°‘‡ƒˇoM‡éÕũŸ#ā8Ž€#PCō.ŧđÂĢj˜w•Íf“0d}d$#b„čH„Ų éÂZŅ0‡.&yž×ļŅFi{ĄXĒc/q Čé—_~ŅũUö_ĄÂõķĪ?Ģĩ ũ8ÂĢvíÚiôąĮ yŦMėą‚Ä!ĮA:›ūąčĨ*‚ōÆočR-ÄËōčÃŅôŋöÚk*.:öÄA¸øl {ŪđYîÅrŠaC~÷îŨ•Qw–J!T|h‹"æ€AØh?yŅ ŖîÔb¯7dō1%?{а.BŪØ—Fŧ9ęĪua–ē“‚–ĒŪŧ”A(yŠ2qŖ˜Žõƒ5ŅŦk†“•įž#ā8Ž€#)ūQÜL‘ŠČ™å2‰bs:we+Äd§vRa“7ē œ›#‰39Ȁå}ūųįõe␍’ō˜: – ô11ŦSF6IãžD Ečá Yâ( ÂM3ĢÄ’dÎtRäãiș >¸FË5=•§>´ Ŋ8ÚG9–_#Ã?â #dŠģ՟2ÉgĶnęhuŠÖÛĘą4ĶoņøĻ¯yķæK•i˛î;Ž€#ā8ÕAĀ÷ŦU­˜,“?Ö+Ŧ=Xˇ˜¤S9&p&˙¨5Į&uä97ĸ…ÂqGēĒhōsņŧV'“‰—Cē@“ŎōĐÕiu@†#šfu@ÆŌ‰ã‡åĘäÍ'ŪŌ‰ã0ĸ•‰Æ[šøV–éĄŪ–Ÿ8ō!gíˇ¸¨n‹Ã‡ĀF„qVīxžōÔ%¤ØŌÉ-ĪäÜwGĀpj‚€[Öj€ZÜ Ãæx–‰7âaj™Ā™ŧY*eYIœƒxd9Ė"Eū¸‹ę32`yŲTo֛hšé°ŧVņQščy4å#Žē›\<ž4K'úĶ+/*ĪšéÁˇsʈË[šųČØšųŅ|ŅsKĮˇsĶŽ:)CÆŌíē"cqœãĸúGĶãi„ ķ‰sį8Ž€#āԁ%&™šä^ÅķØ¤Ėž),<ŠČÅɁÁf8é8 s0Įy4ÍâŲ˅ŗ4|;7™(а8“1ßtX9Vv\a“ą4ķMm‰—iúL†ęRɒN<íąt|‹KUf*ČGˋž[–4++žF¸ĒŧĻĮōZŨ­Ūäˇ2L—ų–7ZžÅĨōMgĻōŠtxœ#ā8Ž€#`8Y3$Ēá3ŅãXJ‹žŲY  RÔpiķF9Ž€#ā8+%ß.XAđbGĀpGĀpŌ#ād-=6žâ8Ž€#ā8ŽĀ GĀÉÚ ŋ^GĀpGĀpŌ#ād-=6žâ8Ž€#ā8ŽĀ GĀÉÚ ŋ^GĀpGĀpŌ#ād-=6žâ8Ž€#ā8ŽĀ G Ņƒ>¸Â+ápG üâGŋ~ũdƒ 6P‘Úø~}CoܸqōŅGéīāĻ+ßãGĀXŅäüôĶO ~x›ÉæŦm[ŅķōGââb:t¨ūļnßž}“ Ô„´EĮˇīŋ˙^FŒ!}úôņī%&QõG0žņ ĘīŠķŗ’ˆāāƒĻ$¤ûɤúPy¯ƒ#āŦz06mąÅ2räH™3gŽėēëŽ:VAŧĒC،¨ņPúÉ'Ÿ¨.ˆ?W=ĢŪđ;Ž@ļ`Üã0Ž–ž,‹/VĢ?ÂíÎpú€ä*z`a3fŒ0^íŊ÷ŪÂoōâ2!ZFÔōķķåwŪQ‚ÖĩkWĩ¨%Ê×úĐv¯ƒ#ā8üJF4} 5jT‚%PˆV5Ô&GĀpV46&1>Ų5qâD™0a‚ėĩ×^ŌącG­be„ÍÆ´3fČģīž+ëŽģŽŦŗÎ:úÔĘ`ČA~žbŨ9Ž€#P°1‰ņ‰ĨМņãĮ'mŋš lõĄ˛^GĀXu`,‚Ŧq0>Ų8U\\*Ķg˔Ҫ~‘vÚI6ÜpC)aŗņŒ † "Ũ6î):Ž,jåOŦöä]rXu÷–;Ž@}A€ņŒ˚>PN™2EɃšõĨ˛^GĀX5°ąĸÆÁ2č܅‹eĘŦÅŌ8¯LrJĘč‘ÃĨW¯^ņ€|æėE‚n=6•DŖVR\š+;4•v­šę2(ƒ!‡ ŽŠHŸérßpl ”Ŧ͚5+aK Ņ.•ņ2GĀH‡ãc5ļjLžU(_ū:_Z5.“VMˤ]‹Ri"Eōë¯#Ĩ]ģvÉL fĪž-=zô’Men~ž,\œ+ ‹seģîmd­Ít‰ÁĐ6ķZ~÷GĀX‘aĶąiîÜšJÖVd…ŧlGĀpR!`K ŗįÉCī͒Æ9%ŌŽyŠô\ŗXVkQžĮ27vėX}ņ€}l-[ļ”E‹éū46æ˛LĒOĻaIav~ތœÚXæäIqĸ‘œēgY­MĩŦųžĩTWĀãG`E# dmūüųKÖ Vtŧ|GĀp*0‹?ūM/͔ßĻJ›fĨŌã"YŋCIō…(,paK‡đō„ x‰ sįÎK-o2荟ÕHj"ķ ķdŖÎÍä’CWOZ՜°y÷súˆ€ŋūT¯Š×Ép”dð?ŠäË1%2?,_ŽŗZB6ę”PrĨO›oq˛\1ëÖ­›ŧųæ›ęQ‹ĘqN~ô ŊčĮų^5…Á˙9Ž@=DĀÉZ=ŧ(^%GĀ(Grõėg Ĩ$|˛,‘#ģw+]Ę 'bíÛˇ—íˇß^đI‹§CȈCúЋ~âÜ9Ž€#P_đĒž^¯—#° #`/;Í]T*Ã˙Kž‹m7(‘–ÍĘ-`ŠH˜1Ō,=gįøčAzŅO98+WūĪpz‚€“ĩzr!ŧŽ€#°,_Ž*0âÃON­ĩ*wFŧŒ”Å ZeéĻŖ\_Žę§wŽ€#āÔWÕ׊yŊG`ÕF+×øÅ B“ŧDxŠ Lrsš /ā dvØËQ˘ĨĄĶL˙ˆCz‹Js´ō’Į#ā8õ “ĩ‚ĸ˛°|P$Ã'Ʉ™Å˛  |iÜß+­o××ëãŦÄ$dÂŦ­ģæáĨ‚ Ņ2ÂF"‹8ČV*˛'`ČâĐ×6蝱0G>üšPÆL‰6MķŽ€#ā,/yaYŊMŽtjĶH:ĩ͓mē6 áŧŠ­6Y›6ˇDž r?ž/EÎÎj„ēgrj!ĐĒŲŌcM*Â)‹“ĩx!FÔ,žuĐ;cĄ„=k‰p”[ņ,Í}GĀpjwčŪ\Ûļ•lÖĨiRutÜJFÆNĒ$k €ödúÆw åūwį.EŌX5XŖĩH›æ<áÆ´{ĐpZ@`ŊÕōôcˇqUQ [<-Ž5Ō7ę$Ō¸ĘQ0ŽÉ΀#āTĢsķEæ„Ŗüv‘OGčqânmåØ]Ú$•TEØrĒú(Ž‘ĩ^œ%ƒ %V¸-ÖŲuc‘Eš7q–f¸¸ī8Ž€#ā8Ž@ßg%äã_E>#RXaÄīŋY šė°Ëláˆæŗķ*É‚Ī~ēPûpžæéŦh'ī Is‚f ēī8Ž€#ā8Ž@UL—;Ū™RNŠäüÚËž}ZT•M*%k˜å~ /üíI6ۊtn+ōįH ˇ¤U Ŧ 8Ž€#ā8Ž€#G ?ė÷˙Į‹ ™ö˲2ųāéôÛr—'œvˇ†­ŸžôUĐ\ŗÆ"įī+-›ÖEd.,,Ŧņ×ÄŲŋŌŦY3ũŅf­´˙sGĀpG !:ĩ_BnxŊLßāĨÍsökĢËĄé[J˛fDmÆŧųbTĄ6qĮn9˛fÛ%/Xģ‘M§<žŖ#ˇxņb)**’ĻMËߒ°4ķŖeÚšųԁŧø-[ļÔčTųâuË˜>üxZ<œJÆķ/A ŽW<ėø-ÛĮ– ˇlšãˇėX“ Ã0ž{˙[ļvаqüŧ˙ųüš´ąŠ{Ķ„ dʔ)2kÖ,Y¸pĄ´jÕJ:tč ŋWŧîēëJķæÍ—áŊÖʑ>ë•Ɉ~]ãÔū­¤yĶŧeäėžLIÖ,ņë1…Éo§íÖ37%)‹_<ˋO‹‡SÉ@Øzč!™9sĻ`iËË˓F%ŋĢ88;/))‘ÕV[MN=õÔ$ŅKĨ;“ōUqÅŋ¸|<œĒŒLķ˸qãô‚RwĶũŨwßÉk¯Ŋ&[lą…rČ!QuI™h¤å‹Æqūä“OĘØącåØcÕĩN§7]ūß˙]qīÔŠ“4nĖĒÁĨ’M§Âųɓ'˯ŋūǎG–Ŧ~&ų-C*ŲTqéäSÉϊķüåÄą‰‡‘Jįø9~ŠúFĒž’*Îû÷Ÿ•Ĩ˙L:U~ųå%kÖoņ,X ĮøņãeâĉԺgO˙ĸ2œ÷ë‘ČZšu-gÛt ŸÕHãŌ’5ˆßTÃ5ßp[õėü2 ’ąĮ{(Y2dˆĖ˜1CIi8ęÆšųœķÃ͖^Ųđį?˙Yžøâ ÕÃŋõ×__öÛo?9捪d­ĩÖJÆ×Õ ėû†nO>ųD8å4iŌD>ũôS%œcƌ‘gžyF äĐC­q5Ū˙}mįîģī.oŧądĒ÷ß˙ūˇŧūúëōĮî–×]wyä‘5Ž ×đī˙ģvØarķÍ7×XgtGĀpęĖåß˙Ŋ–*ĢV7æķ-ˇÜrÂÖkmŒ`eËđŋeëđŅÜtüĨR˛6}~99jVĶ)¨Ŧ’5IÃJÆŪŗ9sæČgœ!kŦą†’›-Z¨…‡4ŗ¨áG]&dÍÚҝ_?Y´h‘üđÃrīŊ÷*␍ēv•7ß|Sz÷î-ĮwœZœŪ{ī=m“Ս:p Wˇ^Ņŧņķh8Ē÷wŪQ,Úļm+—]v™î|÷Ũw•§Ë͟îŧ{÷îrâ‰'Ęæ›o^­6ņTōÔSOI›6mäÜsĪM§ŪãGĀpŦ!ųÂĸÆ nĶM7•áÇ/SžÅ#‡įÁOvڜ…OZÔĨ\ÛDŖ´âĮ>ų‰2F”†0ą„÷Á(ņÁŸC˛ĸy9ˇüæ›.ŗœ 4H^}õUaoךkŽ);vLž% Ąƒ´Í;WևyšĀˆ^TĒs-<ü# k.??_Ë"ޞ÷Ũw_yôŅGU†ô‹/žX—KüņGŖL–OYǜ6mš’›­ˇŪZ aXėpčŠ—ĪÆCܡß~ģLņ&Ī9Dō ƒ–2Š“éÃg’Ų§OŲyįåĻ›nJZĀĸ:ėÜüh‡Īa/fĐąØ;hņ–‡0O`A™tÎ}öŲG>üđC•Å&\īK/ŊTÍž`%‘øÛnģ-Š3* Yģ=÷ÜS>úč#•™4i’\}õÕ­X‘˙ŗĪ>Kæˇ:™OŨ29ˇ)“üĶO?­É;î¸Ŗ°ÔŠã6ÄŗW΀…Š#Žō ŗßė„NаđĄÅūŦTîĀT‹!KŽŖFŌåFŪ‰;đÄÚˇŅF ˁĀ8@Zˇn-áW'T?DÂÆRîƒ>¨„ö”SNYJuĩ6XB+‡ē˜.Ëgú-âxđÁërác=&ˇÜr‹Zš°ĖĨr+Ę|ä‘Gä…^Pë˯XĪpV6uûĪūŖ&S.>䍗ÃâĮE‡B˜ 4ŧņŋ˙ũOßūDOŧžĻbduG.ęÖ_}yāäoû›’+–C?ūx CĘŠ3e­ˇŪzú‚-ŖV&{˰ļÚÚ|ǞMĸ)G"oĄ’w‡vP‚ÆË˜Ži§•Ŗ'ūĪpGĀXđyޏ‹ļTD yōÅįß2ŨmVÎØŒī,CčBŪ”d Ĩd ˙9 ËĄeÁĸTūŊ5HņouÖŅ%ÉhûÔ°†`‘ÉÄŅČĸdÍ&vP^¯r2šĨ‘‡stا&ˆ‹;ĶåŽOf@œxŲ+žÕĶČžÅY>ęDœN>ČqV:-_ŧ|Âŧ8ĩņÆoTëŨ9ᜪ–1>×iÁAĘĀ=fyÃBE˜Ž€1b„×Ö*+7^_Ķ Ž&cųĸ>Ö,6õ_ũõ‚…í‰'žĐkqūųį'˅HCÜY™ŧqËĩąrR•m˛ũû÷ObšŲf›)Yƒ”‚…•Ŧ銗éaGĀpG ›`€bžē¨E͖Dã–5ōÅį˛Ō˛fA {å—|–,Ē×ÎSîYŗÄ Ž– Vvi‰ú‚e0–ˇ2u-5ŌD~⍨ŲDoz‰į Ūd,-˙×ŋūUnŋũvũ–Ø}÷Ũ§Kédë"~×]w•gŸ}VŋFÛŪ~û팋A‡å BĮ1pā@9âˆ#–"¯+Œ rŨîšįž¤•Ž=g”iä‰k]ŽīéáŦœē(Ãu:Ž€#ā8˃€fLG”¨AĐ0¨a3üxžhšņ­t&%YK'ŧ”â>ŗaä ÉUĢë \ņĨШĢž‘Ō-léŅ<éÎŲwuôŅGĢ5ëĒĢŽJZõly—p,Íņfbm;.{åp,{fę6ÜpCÅbéŒņˇn3Õ—ÊiKš|FKâl bXžęÂŲFL–=qf!?ÁÔEŲŽĶpGĀČļw™c/ļŊL`–´(a#Ũ\4ŸÅeę§]ÍTAT’Ã~&ˆ D(ÕēkT>~ų‚€@Ö°ĒŲ˛gœˆ!ĮaņFđČ%pqũŠÂlČĮrQ`ų Kp8ŪjŊÄێFāRé¨NčŲ#Įį,ĻOŸŽ{ŋČĪŌbĻnĀ€ēqöΛ”,%B,iojaÎTŸÉņ"ûˇÚj+Ũāo/_đM8Ūå*XyŠāŧķÎĶ0{į°Äņ6gMVM,j|8—~ŪŧL€ã:fšË#¸ąŦîÎpGĀXQ0ņ>ŒkFķ­N6ˆšÅ“gyæ¯Z%kTkQ׎]“Ÿ°ŠgâC´ jXpø0+ÉHÄ,j5ŗxôrnŋ`Āyu$äėŗĪ,klŽį“öąaA‚Č]tŅEú2ĀĐĄCĢŖ:Ĩ,ăŊ`ü¤Ž ö ˍ™:ö°ArؘĪŖˆrŖLõ™Ä4´) IDATëå—_ÖˆÃ2ĘËüŒËéŨwß­ûŲx €bxÁԘŦņļë%—\ĸËŪô^ļ0S1ÖYČ4ž_@ā:ņæ­;GĀpG`E!ĀžwV¸ø+OFČâõąxø ōöģįqšLÂ9á3K^û 9˜ėÍRué3sdÄä2éÚąTÎÛŊō 2)Ŧ*Čo=bMtÅ-sFDĖâféÄŗüĮ^'6НžúęU•Q:V&ŪlŦ­ĨE+töėŲÂoŠÁ˛šˆËãXž¤ŗ@¤jÃúĮ~Ažhŗ-{ĻĒ–<–'!t5Á‡—,žųæšãŽ;dÛmˇÕˇ[iƒ]Ķh™\_Ŧ”•*=*ëįŽ€#ā8Ž@6āķ^Ŧ41gĻsĖķĩtK ˇĐLÆĖȓ^kåʍĮļWà sy|ŽĢuËZē gqÁŌ„u-^Ņxūx::ÖĨå%?ŅrĖÂĢsŪBå¨ ĮKö‰ŒÚЇ5 kWUŽīŊqԆãēņáãtŽk ‘sį8Ž€#āÔ `t˜Ÿ nx0x0ÂH‡Ŧ-EÍÚZ¯Čl2ūFŠUÔũ†…KÍöų”†Õ2o#ā8ŽĀĒ‚ķØúáĨuéęYĢˆēîú…Ë îGĀpG jR~ēŖęl.á8Ž€#ā8Ž€# œŦee/ÃpGĀp"ād­†Āy6GĀpGĀp˛@F{Öf͚>Ūúa6ęãe8Ž€#ā8Ž€#°J 0Ģ`ˇĐÎĒí)#˛ÆĪ˙\tâEĢpŪHGĀpGĀp˛ĀųM“9ŋ/ޞ(_­"pGĀpG`Å!ādmÅaī%;Ž€#ā8Ž€#P%NÖĒ„ČGĀpGĀXq8Y[qØ{Ɏ€#ā8Ž€#āT‰€“ĩ*!rGĀpGĀpVNÖVö^˛#ā8Ž€#ā8U"ād­Jˆ\ĀpGĀp‡€“ĩ‡Ŋ—ė8Ž€#ā8Ž@•8YĢ"pGĀpG`Å!Ņ/Ŧ¸ę-_Éeee2räH5j”đ“Y7–D"Ąšsrr´â<Ü0đxôĻ\ÉËĢŪ3HN¸ü×l)ũ÷ę">gSiÖŦąö˙į8Ž@m#āķRũŸwëã<Ō`É7ÄÛoŋ-šššrČ!‡HĶĻMkûžs}õˇŸ!ë¯ŅFr‡‹‡˙ZËDš'3\ ė´‹”†%Ĩ ™6i<˙äP9īääŽGû‡ūŌ`orüŋ#ādŸ—˛y ŦķHõL5jöŠÉôķĪ?Ëâŋeŋũö“&Mšh%°¤•OâLä凇—`Ņđ™^$RČ•ü˛ÉĮd­ …­qÎĮi‹‚_P–ŌsĨŚmdĀ9ÛËėäÉ~Z1ÖKu€ĪK+Įŧ[į‘i>(--•aÆÉf›m&œÛ2gn.%WÃâŨoX8Ė^”9Ĩz]ÃåVŋ|ôĮ¤–#ŊķĒėēׁÁŽŦká_YY"Xׂ…-øÅ9Ō{¯nōÂ#_ĘIgõËŠy zâđÆ9Ž@öđyiå™oëãįyá%ƒ¨%ÉęUž0&ōæ›oʞ{î6šrWVžlJ>K7ų'ž_™ę%.žĪ dŠ}síÛˇ×*Ī?÷œŽ¤íĩ×^:ŋ1¯ÎŸ?_¯ÔsĪ>[&OžŦųĶÍ›Ė‹7…ųyŦ˙nģiߍÁJV˙0‡˛R§+IĄ6o§jŋĩ׿՚†ëãúhí„={öP’6āđac‚čārüņ'Hį5הũë_rĘ)'Ë{ėĨVŊ… Ē~Úūd ŠÜ,īžûŽÜqĮŌˇO_Íoå—ˇÉ%í-di¸áI ƒelzqč{Ąõá‘,•a,đ\}Zã–5Âė[[PP&Ķ Cžæĩv[ž;G@€Iœqņūûī×ɜčsĪ=W—GyX?1Ŧ^@| äēëŽĶ‡˙ÕW_]'zd!FÇWōjĩV3ĸß˙]Įɗ_~Y c%ŅČ}÷ŨwrėąĮĘO?ũ¤$ėę̝Öųа°P fææĖ™žŋØL:wîŦķ˞ÆŪhæŽL\&ķŌĀĘÆŨ7֗äÎ?˙|ŲŋũĨpqĄ’™?ūD:ŦļZ¯ĘÂÖ ōy%:Οōvß8äũi˜wŋ—t )üąŧøâKŌĻuk%n .ˇŪz[φvžū—ĶÃˇHg’ĩ@ĻOŸŽķ é‡hŅ~œ3ŗĩiŌ¤‰Â<Ų~ë­ˇt+ŅķĪ˙WN ×đŲįž•V­Z…ĪgŊæÎ{åąĮ“ŋūõŦJįÍ3Ī<#ŦĖ}!wŨy—ÎcīŊ÷Ž^—7^ƒQ:´"lg õ‹ļ׿ņڞ×ęã=č õãÉōŠ+ū.¯žúŠ4jÜ(ĸ_SęĐŊ{%‘Č[ųÖžU-Ü$`WˆqqiŽú%œ‡ĨM;‡sâJԗŸ+Á'‹ÃQš“'MCū˙(nUˇ—§;5B̤•{élã@. j #Y͛7×ņ‘odō0Ī8†c<…LüņjÅaLÍÄa)bŦÄĸá0Į܄.ˆ$‘ųĀļŠ˜LU~›6m„6dâ2™—ēvëĒ„”vCי;YÁ9ņāōÃĐt›Í+Ņqŋyޘ‘׿ęÆžėvíÚĒžwŪyG<đ @¨Z å­ŋūúa~+˙ xtžŗŒÛ¯•âVZŪ ƒÅĸÅĨ’×ĸ‰Ačž#āÔ"|`Ŗ6JjÄâÃ֘‹/žXĮšdB8ÁöøãĢå C•p1ļŪvÛmēÁ~cö¨UålŠŽ‡ņ<Œ—ŒŊŅņ9.ŗŧatW6/AV™ øķÎÆuötą,ĘęÍE]¤+3¤Û8OŪC=4X°ūšĖKy¤ãøŪ¨…Ų"dķ‡åˇš œ Ίáčy4L<ųŦmęƒ>¸|{Q(ŸųyŽtķĻ•kí…HŗąįE=žŌĀ×ŦžÚ¨đ¯.ÂõqŠ5˛Æ|Zƒ'". ~—.]”¨qŸõw–Eīģī>%-ņôTa–í§Jˇ8:&=ÚÉHŖSqāXˇĮžöÚkk˜‹Žņ8Ō8ŗĖLXâ69Æa;Į'ls*a–ģgΜ™ÔĮ–$âXbfOÛ°aÃdķ°íČÚ[—ķ\}œGjŦą9ņī˙ģîÁ‚Áū1‹ō›œél™Ī}`…ãÛcŗgĪ֟ˆJ'O<ųŲW@g¨ĖņÔ` Ÿg˜s ˆu â8‡hōäÆFULš< o‘sôĄ+UGEf_–w-8ōCjšÉ~üņGĩ(Bhq´‡ũ~ļ.ąTĖËx•Í›”ÅmH#{!ŸW]u•ļ™kÍ"ĘĖ†ĢķHNØđYn~Š@Ö ‹‡•_úĖ1šLzwi*ˇ¸F•ŲÆN:.SĮl!x°čåuÔ‚Ģg:é~ŋ[ŊR•ƒ(Ķ9Ģ:힔Ë\ĖĢāAŨĀĢÎęŸ˜/Ā’9,íË éäą`a4ĀĀ9EņĖQqũÕ 3įqŊĸØV•Ÿ•&pĨžäĨ=\ëtõ¯J_MŌŗ9œ˙Ø4öûbéĩVŽÜxl{%¤FjŖũŽVi*O ŅũŅ‚*;‡LeÚé+ĶC”ŽÍæ~žˆ¨“™žíb›E+–…íĸÚ ,ˇšN|KËĮÃ,]būÅBÍÕGãúĸéäĩtģŲ,/ĪÃåŦ |ÚˇŋBĐ>ėķd-t…rÂVAÚ¸/ģ8\Čr’Ū &á<øa\“Ļ¤I8iģđĮЇ6Iö ŊˆūĪpę ČŽš€Ã\œ¨ĪÃîō5Ķož•oaķĶœ^9‹1:Ķy‰qŒņŸ<Ņy€đ:ëŦ“œŌûŅy„zϚ7ūûß˙ęį9°Üņ&,/ °Ä•§žŅpēōRé'_Ēúgĸ9ˏoķ_MĘ'eõK—^į‘Z%k4ŧ>8nvnhö‡ąīĖĖĩvą­Žņ×­ãé5 ķ­´TŽĻúL—į°ŽJ*<0Îļ dÍ ģ–ĢZô\ÍɐļY+ã)tŪhY§cÉR†áīž#ā4 *öũļl´*Ķy)Õ¸­_m¤ŗŊf÷°õ†Ĩ_–|ąä˜Ģ ũĻ eÔWį‘IÖčxėmãÅžīÆž4ŦlŅ'ļhgōķ†ƒ@ķ–ámNšŦe2%e͋žį„ĪwāōrÃ/•Ę´QdäGƒeҤrLØ/ŧ*˛ģį8 æž›–-Wßæ%Ŧ–fšdšŅŨęã<Ō ÉLS*//đŨ7žPíqIGôŗeĀËĀ}tč3ôøĶā˛9<ÆpĖđy)sŦVVÉēœG$YãBûḊ3¯`ķf[ģ^Y;‚×ģn`eĶîšá#xÚvĸV78ģVG`UGĀįĨ†Ûęzi°d.xŧ\Ā7ĘlĶbÃí*Ū˛åA€žâ$myôŧŽ€# >/e‚ŌĘ)S—ķHƒ&kvšë@+Ã}GĀpG S|^Ę)—Ė?†æx9Ž€#ā8Ž€#ād'kY‡Ü tGĀpG sœŦeŽ•K:Ž€#ā8Ž€#uœŦer/ĐpGĀpĖ¨ĩ xāĖKuIGĀpGĀp0§Ÿ~z­ĩŽÖČ?†žÛnģÕZÅ\‘#ā8Ž€#ā8õņãĮëˇ8ų$ßäÄįį,ų~Žīš–†ūėŗĪjĩÚž ZĢpē2GĀpGĀpjBÖ>˙üķÚmEÚ˛]^ĒęĀ´—ĮUˇ Ų.oyږ.īōļ!^ox”””hŖĖ¯š.ķkC§ëpG &dŦũņĮrÖYgÕ¤ŽËä)..^&.Qå 4HŽ<ōHY´hQ\ŊT–ŪxãåûīŋFéyuÛ°ŧå-S ŗÍj°Q_ũĩ 0@FŒQkm¤¯ĸķŋ˙ũo­éŒ+ēčĸ‹ôžZ¸pa<ŠÚa~.löėŲŌ­[75jÔ2ųO:é$ųũ÷ߗ‰¯,ĸ*•åõ4GĀpjŦ“ĩÛnģMÎ;īŧånV—-ˇÜ˛J=ĩQŪžûî+ÇOIÖ*K‹VîĒĢŽ’ 6Ø ĨëÚÕmÃō”ˇTá•f•4¯Á%mžųæúSY&L¨ĩļmēéϞíļÛĘwß}Wk:ãŠøŨ^fmĩuÖYGÚˇo/:u’5ÖX#YÔ°aÃäC‘‰'ʁå/ųK2Í,f}ûöÕ:XØŌé´t÷GĀČY%k<ųžũöÛrĖ1Į$ۇU`‡vŽ;Ę&›l"˙ûß˙4íÎ;ī”îŨģË3Ī<#;īŧŗė¸ãŽōėŗĪjÄéÚk¯,@W_}ĩ/ŋürR§ÄË+**’Í6ÛLzöėŠOŲø{îšGŗ°Ôȋ öûėŗOŌRŅĻMiŪŧšŧųæ›úõyîšį4Oei 2DŸöŠoAAæá_MÛPĶōŦ—^zŠ’Æ­ļÚJR-­ŽŦ˜1ņcU9ôĐCãÃ?\ÃûíˇŸ†ąmŋũöŌĸE Üėĩ×^2räHMø@.ģė˛dÚi§&ũû÷—šsįĘ)§œ"Ûmˇ]2“t:—ō€#ā8Ų@`ūüų‰č1oŪŧD˜°ͧOOœtÛ¯‰í.ú%qÚŨca °Ō# „á%ˆĘ]˜˙ū÷ŋ“BĶĻMK„Ĩ†Ä“O>™Xŧxqâũ÷ßO„'ãD *ôĮoŧ‘xâ‰'k¯Ŋvâ—_~I„eŽD X‰@´÷ßŋ}ôQR¯ÄË#>ļD׎];í´S"L‰@šáé[ŗ„I-&œDYYYâîģīNœ}öŲĻ*,`‰­ˇŪZķ„ĨĄD˜aâŅôĘŌ“]"ŧÄčŅŖ“ú–§ 5)‚Ãkĉ@zÁĘ ˜R’ŦŦŦ˜q]×]wŨ׿ë¯ŋžúôgúÕÍ7ßŦũ:šD #‰O>ųDešŽa‰LĪékûīŋŋžWö¯Ēž[™Nʧ_Ī™3'ŪW\qE"XŠ++NīÉĘÚpꊧ&JLž<9ņČ#$Ž8âÕĮũHW",ŸkāČL"Ž*u†ĨD ÷‰§žz*ČlbܸqĒ3ąD ŧš?ÍDxIÜwß}‰`=NT… ō\‡@Į|"Œq‰ŠS§ĒŪĘ0Sü –AŊöG}tr\‰Ēyå•W­[ˇÖëĀ}īÎpt02ŋáEp—°IĮWÆņ`Ą×88QUŧ‰tø< ž…^æ+Æí(/ã\âuEւ!žĖuō4 `‡¨;įœs8HÉ[oŊ•LžņÆub#pÖ[oŊdZü$Uy&ö%~ũõW &}&°°&ŦJŽ‚õ)™¯Ëŋūõ¯DxJ×ôĘŌLi”Ŧ_Ķ6Ô´ŧ°W0ÁŒƒÜ@~ŖneĮėēëŽK\|ņÅÚ$úÖ\ įĪ?˙ŧ’Ŗh[™¤!¸`aIK›âƒĨ%*šōŧĒž[•NŽ÷„%WU köØcēašUĢVIƒ!˂,ĨDáčr!ËŖæØÂwNĖUļ9?Uy–?ž,\9î¸ãd›mļŅåÎ[oŊU÷”EķÄëōĶO?%“+KK Ĩ8ŠijZ^°"h-øFŒ-?YĩVvĖXĘbC|°i>ãŒ3´iŠúKqô'×:< H^^ž<účŖ˛Į{h|e˙RéŒöŨĒtvčĐAŋĶÃ˛s|¯TĒrS•myėÚ˛´8öƒĪfy;X2–7ŊĪâ÷_\g°Bˁ¨ÛTaŠ”Įˇ†(3U= —đ°"á!Ё­Vg"ĢÂ,™ą'Áj¯Kė\r‰ËŊ<øāƒÉÜ͚5“`5ÔåOúMxøKĻų‰#ā8õ q‰”ÜĖIDATŦ5^¸÷Ū{%,+.ÕvöŊ0€ÚŪĄ3fčā,ƒ5@ßō‚¤…Ĩ ËǃɁŊ&8ö°™—Ž/Ú>iŖG°2+ŽÜc•árô~ĨÁb§e„—A´Œt˜ib ˙Ŋ÷Ū{ē‡/X÷O?ũ´î!ŠĄ*Īæ8Ģ8+r4G7ŽEhd¸j™biæŌgæČˆÉeŌģKSšíÄ%¯ÃGē§ŨĪM™åž˛BÎlš û}ąôZ+Wn<ļŊZø™ƒâ۔˛b÷+ĢĢĻE_ˇ'‚O„7ۄeŒ`õHû!]>1Āu™”•žĮ'hįŠHšÉT–f2ŠüšļĄĻåĨĒCCĀĖڕЍ‘Æ 'jÄŅīÜš3ÁjģxßEÁōęLW‰tmH'îsŒÆ/Î¨žøy*\ĄŧT÷Y]aÆįZXvvį8ŽĀƊ@VČZMĀabšũöÛ5+ßBsįd6ūŗŋ+ ŸÛЗQŌĨ{|ũArČwõÜ9Ž€#°˛"PoÉZØS&oN†ĪxŦˆĸŊLGĀpG`)˛ō6čR%zĀpGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/ŅpGĀpŒp˛–1T.č8Ž€#ā8Ž@öp˛–}ĖŊDGĀpGĀp2FĀÉZÆPš #ā8Ž€#ā8ŲGĀÉZö1÷GĀpGĀČ'kC傎€#ā8Ž€#ād'kŲĮÜKtGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/ŅpGĀpŒp˛–1T.č8Ž€#ā8Ž@öp˛–}ĖŊDGĀpGĀp2FĀÉZÆPš #ā8Ž€#ā8ŲGĀÉZö1÷GĀpGĀČ'kC傎€#ā8Ž€#ād'kŲĮÜKtGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/ŅpGĀpŒp˛–1T.č8Ž€#ā8Ž@öp˛–}ĖŊDGĀpGĀp2FĀÉZÆPš #ā8Ž€#ā8ŲGĀÉZö1÷GĀpGĀČ'kC傎€#ā8Ž€#ād'kŲĮÜKtGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/ŅpGĀpŒp˛–1T.č8Ž€#ā8Ž@öp˛–}ĖŊDGĀpGĀp2FĀÉZÆPš #ā8Ž€#ā8ŲGĀÉZö1÷GĀpGĀČ'kC傎€#ā8Ž€#ād'kŲĮÜKtGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/ŅpGĀpŒp˛–1T.č8Ž€#ā8Ž@öp˛–}ĖŊDGĀpGĀp2FĀÉZÆPš #ā8Ž€#ā8ŲGĀÉZö1÷GĀpGĀČ'kC傎€#ā8Ž€#ād'kŲĮÜKtGĀpG cœŦe • :Ž€#ā8Ž€#}œŦes/Ņp˙oī<`ė(ļ4|rļXŽëG׏_#ž×GÎËuũtŽëįŗWúÚÔ_ËĪ|ķũBb­žžŪz÷îŨŧv°šđ‚{ŗŦęˇ.|›A ņŋō˙L…ËŖÕŦŽ]?ē~– F´úĨ úūčûŗĸßôU‘TPŦÕYßž}S{ņĸôŧoqđŧoŖ­R>᛺ŠūRž‘EŽUÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[ŦķõõķŲm5kuuõÖŗgĪ4åY~ôāŠŌËØzĸĖ÷=ũU_üâõā׈ޟČÃķ‘—ž?úūÄëÁ¯}ôũņt˙-é˙nÄī‹3b[+ũRWˇ¨ą÷…B‹ŠXŖ oŖÍ{đ2ߖÛËëTōĢdWũĨįĄœEÜŋe§3"Jyņ[zmEF‘KKųXĻúēū¸<ÅëĄR_/ķ­ę—D•ōâˇę_?~ŊWÚęÕ•ČČ." " " +‰ĩ˛“đŪ{īŲmˇŨfŗgĪ.+ŠŪîÜšs×ĨĖ™3įOuúûīŋã™:uęŸj§#Wūá‡Ŗ ,÷0Åwš‘Š‚ˆ€ˆĀ (< ēmˇIæ‘wß}÷Ļļl;밃qÄMļļĖLš4É|đAÛwß}Ķ:=ÚF4õčŅŖ-ģÉļ5}útģūúëíå—_ļŽ]ģÚüųķmë­ˇļã?ŪÖXclr#"“õ…¤/ŋüŌÎ<ķĖôŲqĮË]WŠũSO=Õ>ūøãĻcYk­ĩlÔ¨Qvä‘GZŋ~ũšėí•yá…ėž{îąûîģĪV_}õVģYÕøļ: 9ˆ€ˆ€ŦôV‰ČZ]]íĩ×^vã7Úúë¯o÷ßŋ}õÕWí—žâē€ƒ:ČŽ¸âŠvéĢŧŅ‹.ēČŪxã ģôŌKíų៎̝žÚ&NœhįŸž-ZÄ"ĖĶ%—\’DŽ{mļŲföØcŲvÛmįĻ•n īØ<`7Ũt“íēëŽöĖ3ĪØ9įœĶô`J{4įFĢ­ļZĢŨŦŠ|[”D@D@Vz+}dÍ ŲÚ`ƒ R¤éÍ7ß´3f¤"ļ×^{­ŊķÎ;Ö§O;účŖÍŖHnÄL)™ēõÖ[“;ûėŗSôéŦŗÎ˛_ũÕN9åÛoŋũ’ ôūØŪqĮ6mÚ4{ë­ˇė¸ãŽKũ0õ…ˆúđÃS[‡rHŗząĸyĸK}ô‘mŋũöļų曧hŪ&›l’Æ‚xyûíˇmôčŅIŒYœ2eJrcĮŽ5õzDãˆ:^xá…Æą"üƏŸę~ûíˇvŨu×ŲgŸ}–XíļÛnv⁂éâ‹/NūôpZoŊõėŒ3Î0^ˆÜ^cv6ôX"˛5lØ0ûúë¯í•W^IŒaA¤‘sņÛoŋ%6Dãxīß'Ÿ|bˇß~ģ}úé§i˙ÜsĪĩ7ŪØfΜiˇÜrKâATtĢ­ļJŅÅGyÄüq;øāƒíŽģO>Ųžøâ‹dãœōz"zÕæë´čøf͚eŊzõZށŽ‘5Fôũ÷ßÛŊ÷Ūkwß}ˇ1ˆ‘¸ų"rnžųfÛvÛmíĘ+¯Lë͸Ißpà 6dȐäƒ@ķˆ7}_ĮÅ4ëO?ũ”]Ŗļ˙ūû'Ā´Q/ŌOvįwÚSO=•Dņ/p@bJģ¤ösj|ÉÎãEl›1ûēŊË/ŋ<‰VÎ1kđ}ôŅT ÷ķĪ?ÛÃ?lø0fSÉ\D+ëâ$ž Îī°Ãŗu×]ˇÉæ‘K/‡{ĩøĻƒĶO€ûK­–7­2bč ÂQADŒh éĨ—^J‘'Ÿ|2•ąĻˆ‘8nŪ/žøĸ]uÕUËLs!øb>Â_ûÕŊ{÷ĻúCÅu8†wß}× jũ7ŊB“ŗˆ’Ģ’#}MÛc=덪ŽJkÛ8ކ††ôĄ>Ņ0+˛1H4ލŅÚk¯m{īŊˇuëÖ͈RzZsÍ5S4ŠHęũōË/ЍŊÆėũ–ol$Îáë¯ŋžÄ&ëų8˙üo„kD¤õĮLQ3ĘũÅÍD7ÜpÃĈ)ÖáÇ'ÆÄ‡Ü.ģėblvū)¯6ßtpú#" "ĐĄ 0ëƒPãŪŊŧi•kD9ˆ!B| ‡iLĸ"ņ´hÉ>-™,tsŗm‹ôéQRkĶf-i­Yõę¸ÉōJįž{.=ĘÚ5^kčđ5iD`x’).Ļ*YÜČwÚi§$hcĪ=÷Lb‹×ZŽôčUn4Ŧ[c kŧXÅZ(Ļã˜"Eôąxŋ-ĮÅSŸDO;í4cę•q!FN:é¤eē`L\pA$DY_Ebú’‡!XE9͜žˆšŅ>kīx(‚ȝDņõ\î—ÛļטŊ/â8üđÃĶy"zÆC<@D ‘I´”sƒœKÄ)S™mĻŧÛĻ›njœ+Ō‰'ž˜Ö ōū<´ĀTxŅTmžEK~" " Ģ(ŦŗFk<đ5kÜķHSg–ôՀ>-ÆÎŦKc”e%†h AnæˇO˜aŧ3ßę5۝ãûYĪ†Ú„ÚX§Ä ”‰ĩLDPxˆ€ãEØPÆ>6Dvüūøãt3įĻÍB{yŸ*ϛ=eŒÃĮ•/ž|Øgj2úĻ]ŪFŊōiļÔÉ ūáX8"MŧsŒūčƒãäÃZ5^c‚€ã˜`ÃxI,ˆœ1v[Ę9§ŦgŖ}.žĻdߙPĪ™R/2oĪ1Ķ/|I>FŽÕĪ5vĘ9nÖ+˛.ãä¸[|9^įD9ū\´ÅXaĀ8øøšĨíhĢ_ŽCID@D c(jč‚>.Üí]=Ũæ7ŽÆÚwĢnvÄßû%Á=ûXL-FÖ6ųKIéĻ›8yŪpi¤&6ŌŪųxsĨ/nÂ1šXáy€<ƒæ†ÍĮ“į] Ž%qV.ԜHVŦšķđÁ]­Gˇš6§1 õ¯įÕLŦųÁvĻ-‚ĄŅ Ĩļ' žmĪT-Š€ˆ@g#Ā,¯ķZ.ĸ“į'–fû˜Ŋ54+ĮšĐUœ$åÆÕŗĄÎļVR{ošĀ&}ˇ4ÕԂ2U%Ā4¯ŋR¤Ēw’Îġ“œh SD@ځÂŦˆPûaęB{é˙JbmÔ_Íöm>õ/+ÖjūŲ{dŊuīZŠō\ûÜl›9ˇyÄ'6¨|ûČEÜÚˇĮÎÕēøvŽķ­ŅŠ€ˆ@[( •ī{?訋›•f-WkÛn#JBÍu—ûÅmönXŦbũk…žų`ļũķõ’ŽÜŋÎūû?zŲ_ú—…ĮƔČ`†’Ā×OĶKŋ÷ũŸ#Ųū[÷L3fŦ7÷‡ n1eň5_ŗˆÁvũŋØ[_—ZÆ%SŪ`˙>ĸÁ†Ž)ҁ*/" " " N`öŧÅé!MÖūŗ¤ĖĶč! lüØnI¨ņëŅk¤VÅNDÖxr'‰Žš`{ôŊ…ö?YÜžTņukl—÷ƒôīŨ%ŊâƒúJ" " " "ĐŲ đžÚ)Ķ™ŋü,-ÛįßæÚØŋumjŧĨˇđJ­rĄFf‘5Œˆ5Ÿ %ēÆĢl|áMø´ĢMšŌ­ąķĨĸzJ" " " " Í t¯_dŖÖŸoģŸoë hH¯Ŗ"ĸ†Pķ¨ZĨukŸĨ ĨG”îoëšm4hžũōûlûßģÚo3ģØÔŲu6cNŨ2ĘąųaĘ"" " " ƒáŦ^ ‹mPŸ…ļÁĀ…6lĐ"ëŨƒ—ë7$Æ5i•"jNĒĸXÃ! 6„Z´­U?ŋņQĶ…"ŽôƒØ^žœôGD@D@D@:9”ą­žžô+:4„būPAK¨˛bÆ_QŦ҈īĶ0ąĻ-FŨđ‘hƒ‚’ˆ€ˆ€ˆ@g%€^"EŨäÚ ††ĘEÕŧ^9ˇŦXķĘ[ėÔ†Ib­ŠöE@D@D@:;4“ë&_VVаÕ7=L§?+ 58VkR1 6ī”Î\¤ųZ6üUƒš’ˆ€ˆ€ˆ@g'€fōĸŦüãep"ßRjQŦy.Øŧa:tqˇ-u¤2čL\7åļÎĄ5Ą†_Ģb 'o(Š6ōžbž%›—i+" " " ‘€k&›īûļÜîû-m ‰5o ŧŖÖė^Ž­ˆ€ˆ€ˆ€tv•tTk\–KŦÅÆV´Ã؆ō" " " " -(ũ:{Ë>*¨‰ĩWˇ" " " "P„€ÄZJōXĢxu+" " " EHŦĄ$¨‰ĩWˇ" " " "P„€ÄZJōXĢxu+" " " Eü?Ÿ€ķ_ą÷{IIENDŽB`‚document.wflow000066400000000000000000000160611445560650400343740ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Check for modifications.workflow/Contents AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx checkmods "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 7B0D7627-FCF6-4B19-8E80-E78B97E72B6C Keywords Shell Script Command Run Unix OutputUUID 89C40097-B2EF-40B4-AF00-209D547885FE UUID D9F8C5A0-2CF6-44AD-BB94-8F63EDF48639 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{191, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Checkout....workflow/000077500000000000000000000000001445560650400253365ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Checkout....workflow/Contents/000077500000000000000000000000001445560650400271335ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Checkout....workflow/Contents/Info.plist000066400000000000000000000011761445560650400311100ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Checkout... NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.folder rabbitvcs-0.19/clients/osx_finder/services/SVN Checkout....workflow/Contents/QuickLook/000077500000000000000000000000001445560650400310345ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Checkout....workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001100671445560650400334720ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëViCCPICC ProfilexÕYy8U]Û_ûĖį8ĮpĖķ1Ī2™įyž Į<ĪCD"‘Ą”D‘D*C(eLB¤"’(¤¤¨I!ßVĪķŧī{}×ûß÷Ύ¯k¯ũÛ÷ē×ŊîŊ×Ŋ×ēkĀžLˆAĐek¤KqvqĨ`§pČ@„ęĄcmmßũ—cũ€vĢFĨvmũĨ˙&fđņö˛†ŧ|ĸŊCa| „ŽwDT Č Xū$>&ƨ0fŠ‚„ņô.ö˙ƒWvą×oŒFũÖąˇÕÍŽHĨFų@„å”8oØI 9Ė'0 FgkzP}`? ëH†††īâ^‹zũ›˙ÃTĒ×?6ŠT˙đŸg[ÂëFG„P~ßü_Ą!ąđûú}á’bš;6,đščCÕ7ƒ¯\đų+"ä÷˜Á:‡o˜ƒ,ÛŒa^–VaMŋ(C[Ãm!ëˆŨ] ŋ3Č/"ÆÚū/ųĄÄ=Kayo´Áßv.QMwĮŒ–7FÅÚ:ĀXÆ]Ņqv0†# z“`īô—ʏ¯ū_rÂ/ĐĐ䏂c˛Û<æüÁáfģ>Ā}!”€ž DÁeæ@č˙UJ?@…kâāēh ` ˇ‡Û„Øō—žŪ˙’ūnįˇûO‹ā ëÆūĶįŸŪ(pŸÛ >0ū[N…ûØ­Ûõ.Ú#0í_}ū­ąkīˇ72ĩ2īeļūö %Œ’C)ĸtQ(M”*  XP@ Ĩ€RAé ´Pęp*0o`Ëūû¸k?´Ņ/îlx‚šc\ģûė^×Įßځ˙Ü˙/@āĐrËōßã{ūĐ Hˆ ôˆĄčĀ_ޝ$Å$Ė[Z’"'#+ģ[ũ˙æØŗū8ģjû{.‚X†˙% P@},ú_˛Āj?Āįø/™`ūâԌxĮFÅũą‡ÚŊ ĐÁĘx€…ßŗPę@S`ė p‡ã'ŽÁ(’@*Č9ā$8ŠA¸Ē@h- tƒû`<ã` Ė‚ˇ` Ŧ€u° A"AŒ;Ä A¤iB9d š@ž?ÅBIĐ(ʇŠĄr¨ēĩAŨĐChš„æ ÷ĐWč'‰ "˜ÜaÄ„ Ba†°GėGø#"‰ˆtÄ ÄYDâĸŅ@Œ#fKˆoH€¤A˛ ųRH¤Ō éŠôCF!!ŗ‘…Č d=˛ŲEÎ"—‘?P#Š‚’‚ãÔå€ōFEĸĄrQŨ*T3Ē5ŠšC­ ~ĄIh.´Z m‚vFûŖãŅčBôtē=Ž~‹^Į`0,Œ2Æ゠ÂÄäbJ1 ˜.Ėfķ ‹Å˛c%°X+,ƒÍĀžÃ^ÃŪÅ>ÅžÅnāhpŧ89œ!ΆKÃâjp¸§¸w¸M<=^¯†ˇÂûāđyøJ|;~˙ŋI` ˆ4ö„ B*á,ĄžĐG˜&ŦŌĐĐđ͍ԨĐŌĻ9KsæÍÍ"™(NÔ#î#ÆO¯ģˆ“ÄU‰$LŌ&š’bH'HÕ¤{¤W¤ ZFZiZZÚÚÚfÚ§´ŸčđtBt:tît‰t…t7é†é–éņôÂôzôTúCô%ômôôßdŦBrj2,’ąda˛Ų‡œNžDžGžgD2 0ę1z3aŦdėc|˄aa2a bĘaĒcbZa&3+0;2`.ažÃ<˂df1a aÉcidyÆō“•›U‡Õ—5‹ĩžõ)ëw6N6m6_ļlļļqļŸėvö`öSė-ė/9Pâ6ņ8ú8–9™8Õ9Ŋ9ŗ99_p!¸Äšlšr]âäúÆÍÃmÄÁ}Žû÷2 6OOO'Ī{^F^MŪ@ŪŪģŧ(ĖJå,Ĩ—˛ÂĮÅgĖËWÎ7ġÉ/ÂīŸÆßĀ˙R€  "ā'P Đ#°"Č+h!˜$X+øB/¤" T$Ô/ô]XDØI8S¸ExQ„MÄD$Q¤VdZ”$Ē%)Z!:&†S +{"ŽW/–@H(IJ”JŒHĸ%U%Ã$+$'¤ˆR:RqRĩRsŌ,ŌæŌiŌ-ԟöîqŨsjO˙ž_2Š2!2•2S˛dYSŲ4ŲvŲ¯rârŪr%rcō$yCųųVų/  ž ž+2*Z(f*ö(n+)+E)Õ+ŊWTöT>¯<ĄÂ¤b­’Ģō@­Ē̚ĸÚĄúCMI-F­Qíŗē”z°zúâ^‘Ŋž{+÷ÎkđkP5Ę5f5)šžš5gĩø´¨ZZ¯ĩ´}´¯hŋĶĶ ŌšĻķIWF7JˇI÷ģžš^˛^—>RßH?[Ȁlā`PlđʐßĐß°ÖpÅHŅč Q—1ÚØĖø”ņ„ ˇ‰ˇIĩɊОi˛i¯ŅĖÎŦØėĩš¸y”yģÂÂÔâ´Å´Ĩe˜e‹°2ą:mõŌZÄ:Ōúļ ÆÆÚĻÄfÁVÖ6ÉļߎŅÎÃŽÆnŨ^×>Ī~ĘAÔ!ÖĄĮ‘ÎqŸcĩãw'}§|§Yį=ÎÉÎ...­ŽXWG×+ŽßÜ ÜθŊŨ§¸/cßŗũ"ûėčÎáâ~ĮƒÎƒęqĶíéäYãšEĩĸVPŋy™x÷ZņÖķ.ō^ōŅö)đyīĢá›īûÎOÃ/ßoŅ_Ã˙´˙û­€Â€å@ŊĀâĀ/AÆAeA߃­‚¯ī„8…4„âB=CÛÂČaÁaŊá<áÂG"$"2"f#Õ"ĪDŽD™E]‰†ĸ÷GˇÆ0ÁÉá`ŦhėŅØš8͸’¸xĮø›„LOČJx—h˜xų ę ÷Áž$ž¤Ô¤šdäōCĐ!¯C=))é)oŽJ%¤§>N“IËO[;ât¤=;ũpúüQŖŖĩ´Q™ę™eĮPĮ eÉgËú•í“ũ(G&§0g+×;÷ŅqŲãgīœđ;1”§”wá$ædØÉg§´NUå3ä'æĪŸļ8Ũ\@)Č.X;ãqæaĄBaYĄ(ļhöŦųŲÖs‚įNžÛ*(/Ņ-i8Īu>ëü÷RŸŌ§´/ԗq—å”ũŧxņyšQys…pEá%ĖĨ¸K •Ž•ũ—U.W_ḒseûjØÕŲ*ÛĒŪjåęęޚŧZDmlíûkûŽ=ŠĶ¯k­—Ē/o`iČšŽĮ^˙pÃķÆŗFŗÆž›*7ëo Ũ:ßÄØ”Ũ 5'4¯´´Ėļē´Ž´™ļõ´Ģˇ7Ũ–ž}ĩƒ¯ŖäķŧNBgzįÎŨÄģßē"ē–ģũģį{÷yž82ųåE܋ͩÃĶčéė—ô/ _qŊǘ›i˜UšŊ3§?7øÚîõÔŧ÷üŌ›č7[oĶH …īxßU/Ę-vŧ7|˙äƒÛ‡ˇKK›Ë>ž˙$úéÖgí΃+Î+oŋD}ŲųšģĘžzuMa­į›õˇWëĄë›ßŗ7Ø7Ē~¨üč˙éôķŨfüvëėļØvû/ŗ_Ķ;Ą;;Ô(ęī\ —??ž^…9„ Ėž@ ũÃ)~kĀt‚u`Œ„ķ_a` į§×ÁwH J‡&ęˆjxŊ€EuŖŨ1Ķ‚=„ŗÄsã734O‰¤G´éÆč—Č8F)& æT–kŦ/ŲŲ8,9s¸†xx-(š|ã|‚ūB5Â_DÕÅâÄīIĨ ¤“ötÉlËÉĮ+\Sü¨,¤bŖšĸV¯>§Á¤Š e­ŦS­ÛĄ7¤ŋbHcÄjĖg"eĒlĻgncábéo•f}ÎĻž ^Ų¯8'g1W[ˇČ})ûO¸WytzŽPgŊžú |É~‚ū z–AÎÁž!ĄņaIá™Ų‘ųQyŅ'cÎÄæĮÄ8p21ã`JRlrĖĄ ęaįTŖ4# éRGy2č2v2W-gMgä´åÖo>1{’õ”Q~ÂéŌ‚Á3;E2gŨĪĨוŧ.%]/ķŧ˜[ŪT1Y‰¸,zÅâjlÕņꆚĄÚutõ˛ Ļ×Ŋn$4æŨŦēÕ×4ŌŧØōĢŽīļL‡æ‹NĮģ>]áŨzŽÜËī=ßW{ŋĨŋįÁŨ‡CÆß<ē<ûÄ`„<2ũ´aôā˜á8y|æYũÄÁįĻ“ė“o^´NeNÛŋ|šųĒæÂläœūkÖןį{ߔŊM\px'ģȰøķũŗKÕ˧?Ļ~Šûŧđ%đkđjÂZîˇęõŒ?ŧ~Žl…ürßŲŲ€ƒķE!°¸‚C LÁ™t šBČ N!~"C‘Pqh"ēc‡%`pEø‚)Íĸ(‰—–…Ž›^’AlĮɔË|•åë:;…Ø3˜+Ÿģ™į%ΧĖī&%Ø&4/B•ŗ•8-y[ę…ô7&YU9ų…bÅ&Ĩnåį*[jŒę{å5Œ5Ŋ´âáh8Ŗ[ŽWĨĶāŽá Ņ”ņĸÉĒéŗ-ķmK”5› -Ÿ¨Ŋ‚ƒŠŖ’“ĻŗŠ‹™ĢŠ›ũ>§ũÖîļļžöT7/Go'_+?sĶŨ@Í õ`ųņP0Žp–r$}6Ŋŗû)î]üˁɄ§‰ŪOęIn;Ԟrķp}ęÕ´ō#ĶĢŽöe,#eIdæøææŋ~b8īã)BžâiĮ‚č3Ņ]EķįPÅ%–įcKË.ô—}*gĒPŊä^™{šåĘtĸZ篺6÷Z[ŨBũuÍŅnÜúŲŧ§Åŋĩ°­÷6Ô!}'°ŗėî“nLÎŊÔŪŽžĩ~*÷>ŌPTzŦ4¤4ŦôDvDüŠÄ¨ČĪ8Į3Ļ âsü$4šũâķԇé÷/ßŋš›y;;37÷zvūå›ųˇ6ŪíŧĮ}āX’^Öųh÷)âsöJ՗¯_Öxŋ™¯'~¯ÛXø)°šĢl{q‡˙¯ņĮ˜o) ˜æƒ;āÄšÁyû Bq1Š”E ˇQĄ¨7h/ô"&ŗÍÉāâÃŦ„šĸ$q‰TOC§ᑪ •äDFk&fˆyŽĨõ*[&{‡=§—07–{į-ī Ĩ‘¯„?C LĐFHK˜_-˛!:.Ö,^*qXŌCĘPš"ŊĩįšLŊė9WyqŦ„âĨĘ*"*;ĒãjUę‰{-5$4QšSZ×ĩéøę*ë1č­č\6L2r3V5a6ųlúĀŦÜ<ÁÂÎRÖ kõÚēÃĻĐ6ÆÎÄ^Č~Įášãu§,go%Wzסö}yûũŨu<8<>yvS‹ŧÂŊ |¸|V}ø•ø‡hrĀk}o𚐸PÃ0ž°ux]¯<å­Ã bgãzâ+¤&ø$ObHÚH~u¨7ĨîđųÔ#iQGÜĶmŽjfHeōcĖBgũĖūœ3Ÿûüø?ũ';O5å7œn,h8s­°˛čōŲ‹įƊ+JJÎW”^ŧpĩl¨UĄp‰Zyârį•Ĩ*†jÕīÚã×ÚëØŽ›ūŽĄą&RŗnKTk}ÛįÛrîÜŊKî éž}§7ĨīSŋ΃éGÎĶķ<š˙4vĖā™ÄsÆBĶF¯Rf?͟X{Ÿ˙ŅæËđ†ķîø˙Ų[Ú]0JœõĀ…#r÷ Ü+köĒ!Í o=ŌÍûgũ`jđĖ‘Jaž8Ą Q˜F@0ߛA`ŌD2â2â âRiƒLFÖ 'Q8x!fbCh$ZŠž„žÂ0cŦ19˜~,k„=ŠíĮ‘pޏbÜ<^ ƒī%0|7i°44­0ķ %> ‘rHĢ´N´í0›)Ĩ'Ō¤_acøH%¯0Æ0ū`:ÂLd>ÉÂĘRÉ*ÍÚÎfÆ6ÃĮAā¨äÔáœäŠāfänãqáŲâ­¤XQ~ņÕđī ô &Úūwá6‘QC1ąIņJ‰IS)Qi´ôĖž>™*Ųlšxy_…}ŠvJVĘ*†Ē&j–ęž{5â5Ķ´ĘĩÛtĻu?é“ T ũōkL.›ž4K5O´ˆ°ŒŗŠ´Ž´ņĩ ŗ ˇOqČu<îTä\īŌã:âļ°oĮĮCÃ͉šæUáũĐé'ëīP8 BtC…=‰āŒ ŒjŠūë×|€”–ø$I1ųR ÃáCŠ;GBŌ?f„f.gd΍8ž‘—~J4ŋąĀėĖxŅĄsF%öĨ!eGË[. _AUŠÔD^ģ\?ƒũĻ_Ķ…–wí{;ĸ;‡ģI÷¨}- G.ƒeCK#ŖYãˇŸ“_ØL§žęũ:ĪúÖøíû¸ĨC“?Į~q]å][X?ˇ!ųãę&~ËvÛũ×áßķ‡,ŧŋUúĀˆ2b 2č´Ž  Ėa1†D"åTd>˛fäR(OT!ę1‹ÖE'Ŗ;Đ?1ǘĖ,Āęcŗ°Oq\¸\+wÅ×âœ7`îëKĶM"Ļ_“ĖHí´ÚLÚuē@ē—ô6ô} j wȊä&FuÆn&cĻf7æ–XV,ë6ļgė45œœk\ÅܚÜK<xÍx7(×ų‚øyų§ĘŊ„D„–…¯‹ĩãû.>$qEō˜”Ÿ´ŅYŒėšÜŧüS…{Š]Jˇ”á4TĩQ­MŊsī}1˜%}ĐAéŌę‰čkė3L4*2Ž3i4­1Ģ5o°hŗėˇąž°™ąũb9đ8J9Š8;¸Ä¸fšUėģģÎãÉC5ķ ō>îsĶwÚ čt.¸'äk˜x¸wDiäãhŖw#ūk‚JbäÁē¤ī‡´R2¤‘ŽXĻ—ũš)},;k"‡'7ęø@ådôŠžĶt^gzŠøÎk—,•—y”3WŒVæ^ą¨Ŧ~WÛP—ÛāyCų&×­ĩæéÖļö[ĨŠ]>=nŊ{ī+< Ÿ+w|,/ę1ŋŊĀöĖvŅųsä⸒ŠRë Ũ•ĘĢ/ņTV\žZį 7¯)×u4h_īk4š9×ÕŧۚØļ}ûôĄÎĒ.ņîk÷¤{îËô_{Hû(wæqÔĐü›‘ëŖ´c!ã'„žž|6Å6íüōė̉Yæ9ÛיķõoîŊZØYd~/đ‰o™÷#÷'öO۟_­t~)ũ°*ģēēvã[č:e}ü{ėqŖō‡Âģ?Í~>ÚTŨŦÚbŨJÚz°Íŧíĩ]ŋŊųËč×É_“;;!;Íģãí'/ˇģzˆ¨ o?žÚŲY†÷/ķØ>ĩŗŗYąŗŗ} &đ?Ž?˙+v•1đžûųŦ]tīFÕîå?Ž˙Sßy‡x>a IDATxėœUÅõĮģôŽvą€{/ØģÆ^5–¨‰ŅØ5ųÛkŠFM4ÖØKb‹Ŋė]DTDEA¤H‘ļ [ŪžŗœĮåōŪîÛeŲˇ,ŋŲĪŨš3sæĖĖīΝųŨ3sīk5f˘ŒÉ ! „€B@4KJše­T)! „€B@ˆ€Čš:‚B@! š1"kÍøâ¨jB@! „€YSB@! „@3F@d­_UM! „€"kęB@! „€hƈŦ5ã‹ŖĒ ! „€B@dM}@! „€Í‘ĩf|qT5! „€B@´B@,<2™ŒUWWÛ×_mß˙ŊM™2ÅÚ´icÄsāZĩj}…MŗĒđ¯˛*cã~˜fŪųąMū~š]zí&ĄÔ<;ûdZ“Ģqū{} í.Ÿ¯tŌĶõL‡ķåUüĸ…×ÚûūĸĐß-„ Ģmũ Ķ))!°X#؆-kģîēkÖĸƄY3ą×LęLr ĪÅbQÁƒëĖĩ?ÛŦŦÚlfU82%63ĩ˛p”ļÆAx&~H›ü˛ę’^b—îjœŧ™MíÚŪø÷đy&ÄÆŧŌKKJŦ$yĖąūrm^|á9ģãŽ;˛d8äņũPž‹˜´<•ūۘ÷NsŌĨeĐæt5T—ƒ[eeĨAÖÖ[o=ĢĒNJ“{UUeœ‘a —ŋháĀ5ôëËu4#c“gVZĢHnĒÃ5­!.ØŌ°ŗŊōė˙l›öŒĄpÉÁËëZ°°ŋŦĸ• ØŠŸ=q˛vČŅũŦuëÖąO4öāõ­Ģ?RnEEĨ}?æ§`ngÕT8ÖÜ!+ĩ3ĻÛŗĪ>otˆ˙SčĮ˜C{ĒĒ­{÷na9¸ÆbŦ~ŨrîëEąŋĶ[šYk„+úķĪ?ÛĖ™3m™e–imRQ_˜ˆÆg?ü°p 1;“ÅÂt”9vėX{ä‘Gr–IzEEE´ŧôîŨ;ˇĒ8ÁCÔfWĖVļļqRf œ6mšŨwß}6tčP;öØcmu։UĮ˛œˇņūûīˇß˙ū÷1Î'DoŊõ–M˜0ÁöÚk¯lZ2H…k&ĐĐāÁĩāēAÆšÆĶ*26sv0­…uŠ’@Ô2aŨĶģß§īļ N;Ū.Ŋą‡ ØpËxƒd$AÁ7+äíÖĢĢ_õAvFß­Ģ?ļnŨ&Û?ĻNfī}Ufëô_Áf–—Yë6Ŧbv™ĩīØŅ^zņ9;눪lāúëØÔ6ĢŧŌ:uęhÆ ‹D­cĮoöÄ#´˙ĄįÍ7ßĖöķ4N Ē_ųsß‹b÷>ג|-ƒ6ājŌyũøŨī~g‡rHœdˇŨvÛl<éõuŽ˙Č#´˙üį?Y}õÕĩ°ä“u\mĩÕlôčŅEĢŖ×…ļŽ?ŪîŧķÎlŗ“iŲČZN˜| qIŊŖt™čp™3fÄsŦ/••sŽJĢ –‹Ē@ۘė)÷æ›oļ>ú(^ķnŨēÕXā‚Ĩ‚ôšŧA.„ÃūRģõÖ[ŗé¤‘˙Ŋ÷Ūŗgžy&F2ü ĪÅkAđāēp Ŧ•UfŦ<ā=̞ÚfōU|âĻÎ(ˇ^q^ėV7\yŽM™^f3C<23+,Če,đ›üŌŽlúôéŲž“ė‹ŪŸ† b›nēiV†øBœį¯­?:ôŽ‘Kėëņ­lø˜ {ōņĮėûŸÚØŒ´˛)cmÍĩ׹Áo~jīŊûąĩkß!XC-ZĩųjúkÔ1§sžÄKØÚk­-Ėë¯ŋ~ėÃ~øĄ­ŊöÚąŦØĪké¯ÉtúųĶO?ī¯+ž×ßī…ī~oęū^HŸ^edYĢįUOīžûŽ}ņÅaYāŲ¨ĨŦŦlmČϟūæ¨%đü#îqr‘Ņå:ÔOļ] œ]ētÉĒm.u,soĪȑ#mŋũö3&w…čđüšÚÍ2{öė¸Ŧ'›ŗlœā‰¯ Žŧ¯ŊöšzčĄÖŋ˙Ø_*`‹ģ8%Īɋ<é¤zYNJV nXzBBLˇP$2äŸĢ-”ŠđáQpŽדë Ūå•mmvX×l–5ĢKÂiUX €?ķĀí6~Ė(kÛŽ}đGÛÜjģz’‰@ĒÃ5 ĮˊpÍĒÞĻmlÖŦYņ:úuåú{ãœūņüķĪsšušú^61qR[¤ ôGtAvf…ū9dؔ`ūŲfΘlīŧø†ĩYb{˙•§ė;ŦeSfš}1|”ũ ~/ŋürÄ0ÛsôWō{:įąŸŋ"<ü8N¤§īõ÷šßņķ˜ú†›˛ŋ{åĪ€,kķcRP ËTX–>˙üķ8Čĩoß>N¤]sÍ5ļõÖ[Ûá‡nüq6~Đ AqÉk‹-ļ°[nš%ĻĮ)äáÉz÷Ũw“üųįŸfŌøä“ų†nh[mĩU\ō"ū…^0Ŧy,}ąįz’ūŊ÷ŪkčúÍo~ctP”É—īģīž‹VÂt9W_}u,÷ˆ#ްO>ų$[‡åĮ“N:É^}õՈeC4īžûî(įyĶ8Üxãą­´į•W^ÉęLÖ=ŸŒë¤>IlŠ€į§ÛmˇŨ|Ø@ŒvØa‡hĄāú°|}ÖYgŲO?ũdģ랋=účŖą^FēŪL–›mļYÄŨ­j^f˘¨ { gŗf‚†ĩ!ÄīĮu×]gīŧķŽ]tŅE†•đō‹/ږ[nil°íŗĪ>öÍ×_Įx&RĘĒ2Č]yå•ļîēëÚ íˇˇˇß~;kU#ũĪūslãhž˙~”§LđžûŽģb_#Žųû*ũ×OyąĖ9õU87ŗ?f9ŗ,,…–Ī–ĩ@Ā8ļŨ˙8ģū™¯ėē9Įvœ,iU6#ČLō“ËÃË Ķ*lôÔĀRYķëëũ(í1Â~õĢ_eû8ũ˜ŝvÚÉO¸Ķ}Įĩ­Ģ?Æ~ČیŸËlĘä˛@ŠZÛĻ;lå3fZõĖQÖoõum¸ŲļÁÆÛØv;îc“s‹m/¯ŠÄ•~I˙‰zæôę ĄĮũ<ä2Ļyã^|ōÉ'ã}ĩQį^ ÷@L }đĒ9ũ|ûĐĪšW2!ŽrH§ŸoŦôķ>ø Æ}ūŲgļĮ{Øßūö7[sÍ5­,X¸]ž<ŖÃxz@čķŒ`—ž?[¸Į)/ZĢCYŸÍŅyũõ×Û:Á"ČØÃŌ¯×ßëē8Ü/MÕßé7rsem.už1čá|đä˙Ë_ūŌöÜsĪ8Ņžxâ‰q߯ˇß~oōįž{.îCēė˛ËŒŊF¸QŖFE˛õÔSO…Ŋė†n°/ŋüŌXR„(°4€ƛ/[0čôęÕ+.—u ûFâ€ŦķÎ;/’4Ŧ[ <ģíļ[ü4D,hÎŋŠS§Úƒ>ķnžųæqBHįãME>)‘Ģžƀ•l ûĢp´…ē0°A pÁyĖ•°@ūå/‰ƒ%ĮuN•Ŗ—–ņ‰ė›ož™§>—_~y,›tē8˙ã˙86ŪÆĶO?=WŽrėēôŌKíŋø…qMpųęMÚŲgŸą\c5ėĻ›n"jžúGKV¨ƒ÷=qåaīŽA}v° LßZĢļÃ;˙‚ķã„øķĪSíģ`)dâ{ėąGÃ$3Ė.¸đBģ+´LĻ:&uö÷uéŌŲŽžú[qÅc[HGw´J„ĄÚ!Ī+]Œ¤] ž3CE â•öÃôÖÖmR°ĩjm•áúT‡}ká}ßxŊũ_Č-DüÃ˛F‹č´đé¸ō€u‡Ö!nnŋņ|åĨpÎqÜ<ŨsĪ=qi‡îA2YËSBoŽūX&χ1‡ûĻr3;øåĄmĄˇZë.lÜøąļâ2lÅ>ËÚ´és-\q9ŋ´&ėã/ø~Kú+îöÛoËĄ=ÂįIÚĮå~ž7ȃ.ṳ̃ˇŨv[¸ˇnąÂ1Žoß~[ĶĪŲ‚ŪķĪŋ ösöyŽų­=ņDčį>fŸ ûĖ.¸ā‚đ–ę6iŌähõ4hû`ĩŽQ¸N rčŋ˜=‘]vŲeBŋŋ%,ËŪf—]~YHĢš?>øāøåíˇß˛ßūöˇöÎÛīØäɓãV…ŊöÚ;Ôīûûĩˇ‹/žČūųĪ[üũ€iōūNŸ‘›‘ĩyņ(8Ä`ČāvꊧÚ&›l­3<õũûß˙Čq°ŧä’KĸĪr!,o¸?„Éĸ†Ã:Å@tîšįFŌąC¯ë‡´@– Cä'ĐubÅÂ!O„Ė CL˙xzd¯ yßVęâųƒTŌy<>ŽūæîÂ@Ä{ôčaũúõ‹„™äõs9בĢ?ŌiŧēnŪ…ˆ•"VČÎŦōi6vÄ0ģëöÛŦUi[Ûj›ŨƒĪô^ŒÄŽ"Ū?ũ^¨ŠKM zöėû*…Éú%û+K.ŲĶú­ÖĪîŧëΈī̝Îíįčķ~ŽÖgžaûIÆŽŧęĘXũŧ"ŧŧĶ*\ƟŖŽ::Æ{y\/ttíÖ5Ęŧųæ[öÕWÃmâĉsäjîŅ#:2ŽĪƒíp9Ά~64Ū“Ük°”Ũ˙ũmß}÷ ×ĸjží*ÉöDÁđ/ö&ėī-˛…Ō‘ĩĀ;o¸éŨgÂûß˙ÂëųÛlcėcã-Áå–[.ZēPIį!ųœpÃCZ°ÎaĨZk­ĩæ“Ck›įGˏ:tȖaZuÕUcHĮ!OY Vž—ēĨķ­ŧōĘąlĘa0wYt¤ÛB9čt|ˆ'Oô=öXüėÁۗΠŪvH-Dĸ€ĩË eâĐˡœ°âA"Aī?ūhË/ŋ|l7ē°&ēŧûųÚŲĸ}āA[qŪ÷‰ËWo– i+uķyÎ҉Ž´ãē1yų' ņ°O"äáœŖŧŧãēąė‹KŖ”‰ŧËRg×OÜâæz;ôŖmÃ7͍j­j™@ >yūûlđc‘ž!ßwÃA6pŖŊ ĪĐC_r3f…œÛ"’ׁš^>Â\ęLķkžNȧû#qÉū˜ÕĘÃâVžמ}gëÕ{ek;ā${}x°ėMzÉvßëđ°ü>[2q‚uėÔ%ŧpÁ=Đ:û`BŊ8\KļĢŦ˛Jļ_Ĩûõđ{“sų“ũÜãÜįĨ"īįÄ1ž¸^|tā<žsV x(æĄ ųoŧ‘•#įųđy°á5Ī9c?š~ä͏/ęaŋ†´ŖŠú{[˙æA fDž'JB`°ā&Ļ3Áqã.ģė˛Ņâ‚ ōÄR)“ĩwz|:ūʁ(-ŊôŌŅږŨ3ŌЉ ؎;î-kė}"KؤI“ĸįeqPĪįu#õĮ‡/Y$,ŲĘIGtR'H'KŧąFâą<%ķRy!$”A;ųä“ã`IŨqŽ%(-ƒNtc%[ow˛>Ô%ŨFžÆģwīåšFn9sÄ22ûYÆ!žzcAÅzŒ uaŠŅ]˛ūÄæWŽ=õÄg`įÜà đÄSK.,w~%XĐh3Ä,9!PGöŠŅ˙¨7K›Ž‡‡pĮ‰…Žƒv{~|/ŧlüÆŌŠ52ėuŖīųAœŸã/Îá$>œwlSČZkë~ ķœŖK°”m°Ũž6yôWöũ'ƒmüˆOmƒAûY×ßĩ]› ÛÆ:ŲNmKÃúCØŗæ}Æû”ûێܧŌ˙p~Žs.#ņuõGÚC˙˜öߕ•Ξ!¯˙ÛŪ{á:>äųøÉ™öíÛrÚÚ^ /ÜvĶåößûn´ōĐ+ąh…>ėũÜ1"ŒC'į~$ûĸŸ{˙õ0ž÷súfž~Î’|ũ”ÉÛ֌MœCÖ¯x@'Æŋ¨+u„ŲW!ƒdâ(Ÿû’´×_=îiCmÅoŠ÷‡_Kŋīv`ëß|Ȳ6$uGø ÂMÅW؀⡲Øņ 0Éb)cy}%|–įǟŗ‰œÍâ<Ļ]ÂXŸØÄĪ$ŒUŒ ņŧ¨Āž&ž+ļ +DëËgœaÛnģ-jŖķr’>ËÉ|lü=í´Ķb]y }^ΙgžËa#pmmaâĀBC;Yâ¨KČ ûMˆīͧO$_|ņ|˜`Ũ‚ŧ˛Ÿ BÂrX 3]öí¸C†6˛'Îąņ62đŗ—}gl†˛į y~ ŠMĮ`AûĶõæúAøN9å”(ĮráŪ{īÅŲËĮow$rp!Íx0"L<“ŠO,įœsN|1‚ļŗD‘" 9į,wŗ<ž}ØMũ!yLhČĐ7°ÖŌ^ī<đ@ŦŋįGŽ}ŠL<ėä ˆõķōŧĖ(Ŧ°áāÚáCŌ:ļ dĢ$XĨÃūÁ°>ŽëŌą—xōvÛųGÚžŋŊ8<Č-–?Á ųØ$_ĨĨ•ÖyvkëŌ™ßeŠ{Ūūã} ßĪéãÆ÷°į%.yŨ<ééūHכ‰˜ūˆ.Âŗg‡}ka)tŇYųĪ#mōĪŖmâ„Q6sÆDëšųÎ~š0.ŧēQØÃÖ/XāÂąŗf,ēÄŧL.wčô~E\˛%ëĘy2Ė¸Â§:rõsâčįÉą‰~Žs=^&ûK!Ēėæ>g/mÜ+ėfŋ*–e/ņ‰ČÛ;\iėĨƒĖ1>aų÷ž@9I9d[Šķ6Ōvo)˜-ŒvčˇAëĒzø D n žļXö¤#ãHįĀrƒÅ†É—„bĜŽ7Įy2žŧX\°‚Qiԁƒø%—\2û„‡l2s×åįäÃÂFŨŧŪ”I^â)Įõ‡§Īd[uįē {Î=˛äyIwę I üä`G>Ÿ8 +$ĪC‡ë$Úš >eĐF/×ëąôëâōÄ%-XÉ2ČīŽkîO›ÄS÷äA>đb9’A—FŧÄ“Ÿ˛šČŌO¨ƒ;ÎIķ:&͐I†Á•§˙¤ķt0$˛Šgú:{Hyhģ[ ’×Äõ9‹{\šf\K˙Ũ_wˇ>K„{2ô+ / ˛æXsUû×Uļį1gÂßÂu…Ŧ…#Æ*ÂQ6ņķÃ;tˆ2¨]ÜkŠ€<áčāí÷a\ú:ø5ķ{‰0×ŦūČ~,Ę =ã'üd‡Ÿ˙ĩ-ŗ\Ÿ¸×ŽcĮnĄ>m­uĐ7uÚDk=ū^;ũ´ķlfčĮ3gÎÍmk#Gްm7îû}ˆ˛Š'8qāŧ>1ūQoņÔ7Ũ.ŌéĮôOOsø´@Æ@īŖø~OzšÄyčķ´ōŠn|0įíQļpĪø=NŸ~úi|øãÁyŦņniBŋ—•Ģū^g¯ÛĸnĘūÖrše-7.Årķą 7`ō@7ŗ“ ŋQ‰įœÃå‰Ëå\ÆĶ|Ō%œŧᝌ¸œûÉrŌē3¸š#ėÎËņ2đķĩ…´¤n΃.÷ŧ„“å@qäq=1"ņOODĮúxū¤N/ßËrl’2 ŽīåâC =?~˛Ū”âšæîŧœ¤~Ã Ę ĪĀd@šL^¤12!NNX~ŽõŽō8\?įI‡Ū´Œį§,&8¯aœ‡ņ‘Ĩ8&'kî#ãerŽ[ÜÃ>y'XôčŌÉēt ŋƊ_Q#˜ĪqGžsf­†¤ņB¸ėw ×=XēĘZ[ÛpŌ~âģĄOė”Ŋ6ž×}Įž°_“tœ‡Š“Ÿģ<áÚú#}švá:vhoÛ¯øEøöÛ7…­°Ęđš\ĪÖmíŊQÛãũ-–n‘(ĩ VEˆk‡m~‘%=ô%ô9Vä/ĮŒ:Ō÷đũđ:§ÃČ%Į$Ō“rëYރrŧ?įņԇsäŅËÁŠGR†žī/āPåų=‚īcr„Ŋ|ôxũŧĖE=ė×Đ¯]Sô÷äõÕy "k ė ~#’=yž“–<’éÄ3Xā§ohä<Îķ¸â9÷x÷=ŨÃ.į7™—ãeē\Ōįܝ—A~wÉ2ˆsžîqø^ž§Ĩķ&ãũÜ}/Û}ĮOÆ%uzyøIŲtž˜˜Đ•Æ(7™ßķēLŽ4âČąĸņ>~ŠŒI…˛ŧ<x×įmˆa—Iú~îõđëEØâüÜ}ōå:÷úĨĶ ãȓt‹[Øąt –\˛4—€ Ŗi8° qĐ)Îc ˙°Ēqš!kՁ䔎jËu˜ûKK/?}­’}ÅĶ’~:o]ũŅĮNëQZęŦQáÃŋ3lë-ˇ‹Dĸį›íŊīPīÛ^$n^Vō^õ6&ã’m$=æÜķāģ~ĘNփs\RŪq"-Š“ŊŸÜĢž'f ˙ø 1/‘šŪ¤O; ģNü¤[ÔÃŪ6oSSõw/O~ "kõč ~ĶšŸŒęĄJĸ‹ôöŋą§Žhōæ*VX&ĒäÄáƒ!q<>‰ĐßŧĪyzZÖáDÎeˆ#ėú]~ōœt/ËõPGâņåæEŸ_ƒ*ø€,~ž#،B†9!‘ĩ՜Īy”–‰ŲU6jč×öŅĶOؔ‘ŸÄcįO¸¸\i ՝ÖÕŊßĐ7āA5?L_ĪC‡‰ũ|„{úôķX•ŧš*ä}Ę͈ķ~įíJĘ{:qīũĪÃČājęXCÖA_ |&i'0ŪWܧnŪO\?}žs×U[’ēōÉšŒûuõËdzōÜķSįép:žŧéüäņx|ŋ“rųÚą(Į/jũ}QÆēļē7Ūã[mĨ(M,FødĀ„ĮeĮ2 ;ƒįū4Žß\]rRkŽulęzų5L’ŸŧŦԅéŪ7ÜrEØûNcļÉuæëÄSīēúc.R’Ģ.—+­1ÛÕÜtĩÔö.jũŊšõ‹ÆĒČZc!)=B €?2ĄûäŤčŽ82oŽd­ĨN>~ ÄŽ3‡_KŽą_ī|ú“y‘‡ŦŅO8G×ÂpuõGĘö6xĖ×âĶ}#Î%ŗ0ÚÕ\tĻÛß\ęÕXõHöŲEĄŋ7V웓-ƒ6§ĢĄē! „€B …ĀÂyŒKĸ B@! „@ÃYknĘ%„€B@&A@d­I`V!B@! „€hzÁ a¸Å\lĸå“ _}õUümēÚTņķ&Ģ­ļZ|MŋĨoF­ Ĩ ! „€õC@/Ô¯(|KŠß~䃘+­´RŪ7šxģęÛoŋßŲZgu˛%. ŌæuûđÃãˆķŨĻ…QNļ <Ąž|0vĈ6`Ā€¨eaד2g˘?RÛTe6eB@!E@–ĩ,õ?áÛDXÖø‰’ē^šGfôčŅņ{Fŧ&sbÅų­ˇŪ_¨ōĄĖM7Ũ4~Eœ´BHLRy† -y5O+DyĻķēPdŸarâäi…ÖųBd]/erŊj+ŗPčĘįCG>ŨŠB@ÅíYkā5gBæ‹åūÍÎũ æūs$•5qūÁId‘!¯Ш¤ IDATĪ9n—]vąC=4~o ˛åÎĶ=\—īōî×%_Ŧt¯Ÿû…ÔY~Ūæž{îÉâX¨—sßË$üōË/G"Įy:ŨåōųžgAtäĶ­x! „€XŧemŽ?˛Xv gøVĢ’š?؃ZŌ|‡°öNząžNØĶ:uę-@N>účŖ¸\Čoõm°Áņ÷‘衇ĸUęã?ŽÕ8p ­¸âŠYĸáē_}õÕøģ}Ô+{įpüäŅoŧa“'OŽųˇÚjĢøe}–PYžL—üæ›oâO(mžųæŲ=ŽĘæüË%A8æņ2’~ZÆq‚øņ;Š”ąüōË/mŨu׍8¸ eŋųæ›ļįž{ÆßGüī˙k}úô‰ëĩ×^‹$sÍ5׌íÁB Y|â‰'Œļãō՛´×_Ũ 1:thļ\Ō QÔ’ģÜrËŲŌK/m”C\ēŪ_|ņ…­ŋūúņ€$ō#ÜüÖ':ČGž´‘4P–B@A@d­č9Éđß}ŦM ˛8d=ŸOâ„!*¸QŖFŲ¤I“"YčŲŗgŒĮ’…Ė;īŧũqãÆErņÃaŅa{âĐ9~üøøÂiŽ Ų„  2Č{â!#GŽŒK¯ūS3äÉU–1ĘÃ*õôĶOÛf›m–%'Év ')ƒ˛ĐIdŒōųasŦaŪn|ę Ųûä“O¨FĖ7v먘B„5]8äŠ?Î-–ųę ‰Ŗlđ$?ŋÉ9|øđ¨ŌGmĀ÷ũÄĨëM=Ö[oŊxˇß~{{öŲg#ą„`’Įķģ+ū9F–/„€B >ˆŦÕ­”,“2D€IŸƒI9=1#ƒƒˆ ëaâ|RgĸĮąD !ĀB†…’šaY+nĨđÖ)ų<>„ÅõēõYŌ°Ė=ķĖ3‘-ąÄDGyęCęíēHËUž—ąÃ;ÄĪ”°ėĮ’ëkŦA–ŦCnĮwŒdŦP,^$ Ū%œ—éuĻū”KŨŊøŨēu‹{͐GÖ į^g÷§OŸ>N¤Ņ~H2į~PĪ—Ŧ‹ëu˜Ž7×Īë~\kōãO~ׁ~OŖ<9! „€ E@/49&eË{ Hzōđ8Ō‘Åy^?÷0> UVY%î%ƒ@p°:uéŌ%Ļņ™œ“,qœOœ81Ö9ˆē8°NAú Mԋ4,e‰VXÁXÚŖâķ•!射Ę&{ģŧŪŪōģ ÄKzi–=–biž×‘ŧœÅÍĪ ƒ>õvËú‘!:An į‰zcŨÃēÆ äe‰×ëëžcÅõ ĄŲdŊÁŨëM=YZ…ŧĮ6ōpđö­ëpŊą@ũB@!Đ@JO;í´ ˜wąÍæ“0d}d$'b„äH„Ų éÂZŅp‡.&yž×ļęĒĢÆ4öBąTĮ^8â AŌįŸ÷WA`Ø…n×gŸ}­]čĮ†XuīŪ=æA{ܐĮÚÄ+Hr¤ŗé‹^Žō (O>ųd\Ē…bYC}8ځūĮ<ʀ ¤Ž=q.>[ž7|–{ąœAjؐŋúęĢGBFŨY*…PņĄa,Š|L˜BaŖũäE/ŒēSˆUēېQČĔüėAÃēyc_ņî¨?ׅeXęN^ZŽzķRu LpäĨ Č8č~ā:V ÖDˇŽ9N^ž|! „€…" âŠTBÎ-/)H›Ķ™¸ksX™ &[nše$>yŖ ’ÁÁš;Ō™č!8—ƒ xŪ|0žl@˛IōA—CÄB'&.ƒuĘÉ&iX–¨¤=Ä#KeA“inõ‚˜B’ÜšNę€|: 9—Á×dšŽĮã“ōԇvĄGû(ĮķĮČđ8ĮYęîõ§Lō9Æ´›:z’õör<Íõ{<žëëĐĄÃâ’z\Ö}Ī#_! „@CYkj!qš˜x8ŠŌ'lŌü ΝëÁOã'ķö=¤%׍Ÿ”ķø¤ŽtōI—K–tâi§ã{\Ž2séD>Y^ōÜËđ|¤yYé4Âuåu=ž×ëîõ&ŋ—áēÜ÷ŧÉō=.—ī: •ĪĨCqB@! ‘5Gĸ>=ŽĨ´ä›õPŅ"E—Ų85J! „@‘˜ûí‚"U@Å ! „€B@äG@d-?6JB@! „@ŅY+ú%P„€B@!‘ĩüØ(E! „€EG@d­č—@B@! „@~DÖōcŖ! „€B@Ö7ŨtSŅ+Ą ! ō!Ā/~lģíļļōĘ+G‘Æø~CīÛoŋĩW^y%ūnžō/„€(6­>ũôĶ ?ŧ͏dķÖ>ˆģb*_!öņĮĮßÖ8p`”†ļäøöá‡Ú°aÃlũõ××÷ŗ¨ęDæ€ãĒüŽ8?+ؚ>hJBžŸLj•W„€Xü`lZoŊõė‹/ž°É“'Û6ÛlĮ*ˆW}›5J_{íĩ¨ ĸÆOÅÕGĪâwÔb! šÆ=įh­Â“efÖŦYŅĒÆpË ! šĢ䁅mĈÆxĩķÎ;ŋɋ+„h9Q›9sĻ=ûėŗ‘ õíÛ7ZÔ˛ƒáœ׿ĐvÕA!$aD‹”Çΰ QÃĒæƒš`B@“Ÿ|Œ=z´5ĘvÚi'ëÕĢWŦbm„ÍĮ´ &ØsĪ=g+Ŧ°‚-ŋüōņŠ•Áƒü<ÅĘ ! š>&1>ąÚjäȑA߯æ[s¨Ŧę „Āâ‹cdƒņÉĮЊŠ*?á'ûjøįļå–[Ú*ĢŦAĘEØ|<ãE‚Áƒ[ŋÕÖ´ŪŊ– ĩš'VrM.9,žˆĢåB@4Ī8°ŦÅĘü1’55?šKeU! O|,‡¨q° :eú,ûqâ,kSZm­*§ÛW_ ĩūũû[úÅōšķ ú­ąļeZwļŠĒ[Ļg;ëŪš]\e0äđÁ1és]ō…€M@r<Šdmâĉ_jHpMQ•!„€ȇãc5ļjŒ™Xno9Õ:ˇŠļÎíĒ­{Į*kkŗíË/ŋ°îŨģg_YieÛ÷̚Į –&b=zô°Í6ÛĖđIK§CȈCúЋ~â䄀͍PÍõʨ^B`1FĀ_vš2ŖĘ†~–<›Ŧ\iÚ×XĀr‘0'b¤yz2ÎĪņ҃>ôĸŸrp^n čŸB ™ ˛ÖL.„Ē!„Āüŧ=ŧ,Xˆ?9ĩ<ÔĒÆ9ņrR–&hĩĨģŽ}%Q?åČ ! š+­›kÅT/! o°rœPAh[š /T[IĢ@ŽÂ 8™ū2BŌ2æiNčbĻ9˙ˆCzgWĩŠå—Ũ:wîl={öŒŋWŧ +X‡æãũ—meë¯Xm}oņëĮęlڕÎ'į÷dN˛æ‰īŽ(Ī~;mģ5Kr’˛ôÅķŧøé´t8— „íæ›oļŸ~úɰ´•––ZëÖ­ŗßUœŸWVVÚK,aĮ{l–čåŌ]HųQņœiųt8W…毨¨°oŋũ6^Pęîē?øā{üņĮmŊõÖŗ}öŲ'Š.+“Œô|É8ÎīŧķNûæ›oė°Ã‹?jOožüß}÷]ÄŊwīŪÖĻM0Ģ—K6W\Nȏ3ÆžüōËØq×Xc OŽ~!ų=C.Ų\qųäsÉæŠSūŌØ¤ÃHåŠ~Â/WßČÕWrÅŠ˙¨˙,*ũgėØąöųįŸG˛æũÚ´iņ9r¤=ÚÖ\sÍ8˙%e8ßv’@ÖjŦkl9Û¸_øŦF——ŦA„øĻŽMø†ÛJK6Í/SAĐ ;ė°C$kƒļ &DŌFŽēqî>įüpŗ§×6qÄöÖ[oE=ü[iĨ•lˇŨvŗƒ>ؖ]vŲlüÂ:}_~ųåöÚk¯EN9mÛļĩ×_=Î#FØ=÷Üceeeļīžû6¸/ŧđBlįöÛooĢ­ļšĒ÷oû›=ņÄöũ÷î–—\r‰tĐA Ž ×đüŖíˇß~vÕUW5X2 ! „€h0—øá‡Ņ°T[}°ē1Ÿo°ÁķļūËaĢ\†ß(že…ææã/ĩ’ĩņSkČQ°Ē˜OAm•lHV2öžMž<ŲN8á[jŠĨ"šéØąc´đæ5ü¤+„Ŧy;ļŨv[›1c†}ôŅGöĪū3‰ZØ˛ōÔSOŲ€ėđϧįŸ>ļÉëF8O†ë[¯dŪôy2œÔûėŗĪF,ēuëfįœsNÜ;øÜsĪEœ/O2žķÕW_ŨŽ:ę([wŨuëÕ&žJîēë.ëÚĩĢũū÷ŋΧ^ņB@! š Č5Vqk¯Ŋļ :tžō=9ä1*ą$ęŽcØģļtøÔo†ōk-pš|sí|dÍ ūÄisČZĮy×i)…Ž‚•ŒËužū e2ŋ—Iœ[ĖxQāÚk¯Vļũ÷ß?Ž c$w7ĘfÍy¯GŽōŊ Ī{üņĮÛÆol/žøĸwÜq)Á‚IJk!ųķÕßËņô´Žˇß~;ę?˙üķãR'rįž{nļĖx’ú—ÔåIį>ņÉs—ķødØãüúyß}÷Ũ(ö‹_ü".)ôŅGįÔëešŸÔ™>į‰bāQˇ˙ķ|î§ķ5đß˙ūˇmŊõ֞-ë{>÷så÷v%e\Įš¯üķöŸ|¸ŋ÷ÕÔ é ēZÆũƒĩĖWŸ dŦ<áß˙ũ~‰ãjŨZk­Ã9äŲŋÆJ—÷ün_ũ>įÁOvúœ…OZŌå\ÛDŖjΏ}ō dL(! ab īĨ—^ŠÄ?}ÉJæåÜķģīēÜröĀØ˙ū÷?co×ŌK/mŊzõĘž% Ąƒ´M™2%ŦķrŊ¤ū\įąđđ4Ŧ=¸™3gÆ˛ˆŖė]wŨÕnģíļ(Cú™gž—K?ųä“G™,Ÿ˛T9nܸHn6Úh#ƒ„aąÃĄ+]>qīŋ˙ū|iÄģ<įÉŊöÚËXʤNŽŸupHæúë¯o[mĩ•]yå•Y XR‡ŸģŸ,Ããđ9üÅ :{=Ūķæ ,(“ΚË.ģØË/ŋeு ×ûėŗĪŽf_°Ā’HüÕW_Õ™”…Ŧ‚ŨŽ;îh¯ŧōJ”ųá‡ė /¤čˆųßxãl~¯“ûÔ­ķt› ɓ”Qūyût›B΅ŸđKŪĢ…ô™¤ŒúúOsč?ėÃvĮ|ųŲgŸČíT8|ÂÄ'-n䛯ūsUĪá]NØæDgŊų,kžRCØæ„æ5OKúXĸØ4>dȐdô<įũû÷ĪVpž„T€2Ũ:ÆĄXË %7Ūxc–qBĘ8ubįjŌdÍãķųČß}÷Ũ1y‹-ļ0–ZqŧŅÁ†xöĘ9°°bâ uÄQ>aö›ũęWŋŠ/6`áCŠũYšÜž{î-†,š><.7ōÖHځ'ÖžUW]ÕX„îąĮÖĨK ŋ:õC„ l,åŪtĶM‘ĐsĖ1ķ¨ĸŽŪOH‡=~÷ŨwË XØxš:Ōw´rJ‡ëͧad!„q#šÚĘBųÁzáÁēvņÅgķy9ÔÅuy>×īņĮŊ÷Ū;.Ū~ûíöį?˙9Zš°Ėår+ĘŧõÖ[íĄ‡ŠÖ3–_ąžáŧlęvīŊ÷F“)ōÆK ČaņãĸC!L^Čøī˙ßūDOēžŽbäuG.éVZi%û×ŋūe§Ÿ~z$W,‡ūō—ŋŒaH9uĻŦW\1ž„āKÆč@§—É3Ŧ­ž6ŸĢl—…čC Á‚Č[¨äŨ|ķÍ#AãeLĮ´Ķˉ'ú'„€B đyŽ´Kļ\D yōĨįßę¸ÛŦ†ą9ߙĐ…ŧ9ÉJÉūs–C̃EŠæ{k1"Įŋå—_>.I&“ا†5‹L!ŽF@&p%'h>ąĶ€šzՐÎ=<œŖÃ?5A\Úš~,w|2âÄËXņŧžN.đ=ÎķQ'âpōAψƒ´âĐéųŌåæÅ ŦW\qE´Ū|ōÉŅ2Æį: -8H˜ĸĮ-oX¨ĶpÆ 3ōēÃZååĻëëzÁÕe<_ŌĮšÅĻūK/ŊÔ°°ŨqĮņZœzęŠŲr!Rāv^&oÜrmŧœ\eģė Aƒ˛XŽŗÎ:‘ŦAJÁÂË@ÖuĨËTX! „@S"€Šy>é’5_M[ÖȗžËĒĒÛ5ė•ŸûY˛¤^?ĪšgÍįpĩl°ļHKúĶ,ƒąŧU¨ƒlqШ“&ōīDÍ'z×K<ņ.ãiųüßūöˇvÍ5×Äo‰Ũpà qŠ1Ÿėˆßf›mėžûî‹ß@ŖmĪ<ķLÁÅ ÃrĄã8ōČ#íĀœ‡ŧŦ0%ČuûĮ?ū‘ĩŌąįŒ2}ų‚€@Ö°Ēų˛gšˆ!ĮáņNđț$piũšÂlČĮrQ`ų Kp8ŪjŊÄێNāré¨OčŲ#Įį,Ə÷~‘ŸĨÅBŨ7.ÂŪy“’ĨDˆ%māMM'Ė…ęs9^ä`ßá†n7øûË|Ž7Eų„ Ö@^*8å”Sb˜ŊsXâx›ŗ!Ģ&5>œKŋo^&ĀqŗÜ‹åÜXV—B@!P,˜‡ø Æu#ƒû^'DÍãÉŗ ķWŖ’5*‰ĩ¨oßžŲĪ@xÅ ņ!Z5,8|˜‚ä¤ b–´šyōģßũΰŦąšžOR@NØĮ† "wÆgė>ūøãú¨Î) ņ`/?Š…cƒ=$3jĄŽ=l6æķÆ(„ĸœÄ¨P}.ņzôŅG㋠Äaåå ~Æ ‡åôú믏ûŲx €bø‡?üĄÁdˇ]Ī:ëŦ¸ėMßáe 7c…LĶéųŽoŪĘ ! „€(ėyg…‹/@°ōä„,]‡Ÿ īŋ{ž–+$Ü*|bîkŸ!“Ŋ[ĒΞg˛ Sm}{UŲ)Û×ū‚A!…Õ%Yā­GŦ)Ž´eΉˆ[Ü<x–˙ØëÄ&õ%—\˛Žĸ JĮĘ썍ĩ´č…Nš4ÉøM1X6qA˓tˆTcX˙Ø/ČĶmöeĪ\õÒĮō$„Ž!øđ’Å{īŊg˙ûßm“M6‰oˇŌŋĻÉ2šžX!)+WzRVįB@! š>īÅJsf>Į<QˡzÍKímĄRëŋl‰]qXhxa.OĪunYËWáBâ!.Xš°ŽĨ+šÎŸNgBĮē´ ä'YŽ[x’qqÎ[¨áxÉĀ?‘Ņú°faíĒËņŊ7ŽÆp\7>|œĪq­!rrB@! š 0 :ĖO7 <<˜Gá¤CÖÄĸæmmVd 6™~ŖÔ+*ŋe!ĀRŗ>ĨeĩL­B@Åæą•Â7J9ĻkVdma6Tē›,ƒĘ ! „€u#ķĶug“„B@! „@S ˛Ö(Ģ ! „€B@4‘ĩ§lB@! „€h  Úŗ6qâÄđņ֗›ĸ>*C! „€‹Ëļ íŦûמ "küüĪGąX§F ! „€B )8õöq6ųģYuĨeĐ:!’€B@! Ї€ČZņ°WÉB@! „€¨#@´ IDAT‘ĩ:!’€B@! Ї€ČZņ°WÉB@! „€¨‘ĩ:!’€B@! Ї€ČZņ°WÉB@! „€¨‘ĩ:!’€B@! Ї€ČZņ°WÉB@! „€¨‘ĩ:!’€B@! Ї@Aŋ`Pŧę-XÉÕÕÕöÅ_Øđá͟ĖjĶĻe2™x šUĢVąânxÜve‰•–Öī¤U¸üŊ–îdƒvęcGœŧļĩoß&öũB@46š—š˙ŧÛį‘KÖ¸!žyæ+))ą}öŲĮÚĩkר÷œô5CVÛl‚­´TW+ D.ūĮZfj<ƒ˜áe¤ŨŦ*üĢŦĘØ¸Ļ؃w~l§üú%ûûmƒBiąˇF ú/„@“# yŠÉ!oPÍqП ĸAÍ.NĻĪ>ûĖf͚eģíļ›ĩmÛ6VKZÍ$ÎD^s(<‹–€ĪøŲfe™›YŨĘfâ˛VŽōĀÖ8ĪÄi3‚_V]ŌKŦãŌ]퀓7ŗI[۝˙ú´8VĨ !ĐĸĐŧ´hĖģÍqi‘æƒĒĒ*2dˆ­ŗÎ:Æš/s–”ĐQJbbBŧü–…ä›\V¯k¸Üҝũ1Šĩ˛WžũŸmŗĶžÁŽŦká_uu&Xׂ…-øe­lĀNũėĄÛŪļŖO–SK[ôÄĄÆ !Đth^ZtæÛæ84:Y›2eŠÍœ9Ķ–]vŲxüøãöĀØ)§œRđ]‘ÎsŲe—ŲI'dŨēu+H7EEE…õîŨÛ*+™¸ĢÃ˛2yķ7‡¨š˛dxėØąöāƒÚÉ'ŸėÉĩĘ#”Ė_[øžûîŗūũûÛz뭗%ĩɓ†ËĨLN<ņĈIŽt'¨ųōˇÔôi›ŦkŦw–„k ūœPûôũÁvÁiĮÛĨ7ö°n¯Au­Ŧ­ĸĘlVČÛ­WWûf,$ŽZdÎ#'„@Ŗ ° ķĐ8_cXđ‹ą0ņhŽķHŖ.ƒsĖ1ļ×^{ŲĄ‡jn¸aÄtܸqvķÍ7;žųé<×^{­M›6­ ŧA!#ÜUU•ņ`ōÍëIuUuŒ'L:áW^yÅūđ‡?Äđc~ŒõMĻGš O=N8á„ųō{ēëK†Y†…ĸī‘GąĪ†~V¯üšę‹ūëŽģÎ ÆųŌsÕ?WũZZū˛ĘŒÍ GyečŅŗāOQn˙ŧâŧ؇n¸ō\›2Ŋ,ĻĪ mf…ų@ō‚?=øĨ];،3 îoB nēwīVyßtĶMíŖ>Ē;S$>ūøc[k­ĩŗđ,Œ¯õuõ—’ķHK§ķĩ§˛’ųēf^.fû›ã<Ōh–ĩˇŪzˆ fožųfėÃtĖb8HŧuëÖŅįŧ4ŧd´$yŊjÆĖžzę)ÛqĮÃFķ@îĒk–MÉįé.äQGÂWõ—NO‡'2Åžš=zÄ<‘@ũč.$Z_:\E]u—N_ÐŽō`%cĢZøáyæÛmü˜QÖļ]ûāļ'¸Õv;ô$ žf)4ų™ÕVöē•th“Ŋ^<ŊÉ !Đ8<ūøãļâŠ+ƕ‹kŽšÆî¸ãŽÆQœĐÂö—ˇß~;͏§wŪy§Ŋđ †_¨kČŧäē—qüž{^zÉnšõÖėjŖũÍqi4Ëû{ž˙ūûHظcĮŽxYĮMÉĶΠAƒlôčŅŲø+ޏÂÖ_}ÛoŋũėÃ?ĖÆį;9đĀ bX—ƒŦ͞=;ĨŲaâ  "6įāŠˆ#3'üúë¯Ûæ›oÃūÄtũõ×Û:k¯mGq„}ūųįQū?ay”ú"CÜ^{ėawŨu— 8ĐvŨuWÚīOČŧnčíˇß>ĘĮō‘üá‡l÷ŨwmūG(Ãå˙ųĪÚ.;īl›mļ™{îšŲú1(ėĘŲb‹-ėĒ+¯ĖĘsķđŪ{ļíļÛÚFmd/ŋürļ=”ËËĶŪ–œ>;XĮĘfŗZũō@Ā8ļŨ˙8ģū™¯ėē9Įvœ,iUA.c̓umryĩŸVaŖ§ĻȚœ >Ą´æškÚW_} 8î¸ãl›mļ‰ãØŨwߝ-”• â™qŒ]Į{Ŧmšå–6`Āûų៺ō~§šößÚ&›lbO<ņDCÉ!Ā1†īÆ\ĘéׯŸ|đÁ1Ž´wŪygūퟪ[t.ŊôR{ņÅcFŒa¯Ŋöš~øádĢĶ2/ļˇ`<`Ėŋ÷Ū{ŗã:sņ›†ö€GŽqœ­1;%ōú<°ÕV[Ø2Wŧō‚ÛŅGˇäėž–pĐADųÂ\ô×ŋū5Ģ˙°°RƜKۙndŠųšųüļÛnŗīŋ?ޤí´ĶNq~c^:ujŧNXP˙ģßؘ1cbū|ķ&ķâ•a~c´Ũvąo`Ô`%kP˜CYŠ‹+IĄ>oįjŋˇ×įՆ†›ã<Ōh–ĩ7ŪØŽ?ūxÛzë­íŦŗÎ˛ĶN;-~6ƒŪ 9ûúë¯íŊ@.Ø{v¸¸§Ÿ~zŧ ÜD<aēūŋ˙ûŋxSÕÖã/žøâė~¸ÚäødV‘ōō˛@ÚfÅķh#‰–>ÛĀî5ŗoG~kK-ĩT$uŗąÃ"Č2lģ`yéŗėšŋ_c]t‘ŨpÍ6a„˜6mÚT›4i˛ŊÚ3`ŨuƒeîI;įœsížpcŅšx@˙“O>1Až0â¯ũ‹•••Û!‡;áškŽIÚû6&X\~ųË_Ų2K/mųË_ė˜c~m;ė°S´ęMŸ>=ę§íwĸČÍōÜsĪÚß˙ūw¸ū˜ß˯i/’sÛ[ķČŌrÃ?L–ąņĄī…Ö‡G˛\†ąĀsãĶ˙°ŦfßÚ´˛jWōth´Ûđ儀˜ƒ“8ãâ7Ū'sĸ˙ûßĮåQ֏ ĢŸ˛˛2ģä’KâÃ˙’K.'zd!FC‡ä!×j 2Ŧf$ ß}÷]'}ôŅHH+yˆFîƒ>°Ã;Ė>ũôĶHÂ.ŧđÂ8?•——ÄĖŨäɓÃ÷ÛÛ2Ë,į7ļθeŊŅĖ]…¸BæĨ#u¤­ļújņ%šSO=Õvßmw+ŸUÉĖ̝žf=—X"ŒWÕakPÍŧ’įōŽžZČûé#īn!/éR^}õU{øáGŦk—.‘¸MŸ>͞~úÚyüoŽß"ũ)Ŧi6~üø8ē~ˆí'Ė9ķ8[›~øa´1OAļŸ~ú鸕čÁ˙cG‡kxßũ÷YįΝÃįŗž sį?íöÛoˇßūö¤ZįÍOz!ŠÜœlÖGž0>2&?m 3ĸĪĶH§]ø¸HCē‡ß˙}Û`ƒ ˛adȋ—!ŽMˇÄ1(aîį Ęķz3 q“^~ųåÆr-O…îøĐ/ē8ĐM|w´gq whÛĘ:ˇĢÁ$"áß'Ī?`Ÿ ~Ŧ&âûn8Čîqt|^ĢÄ­Ē*ŧ=‹ŗĒŦ´c[‡Pžˆ_XuÕUŗąø°5æĖ3Όã\6!œ` û÷ŋ˙-_Ž<ōČH¸[¯žúę¸Á~cö¨Õå|Jއé<Œ—ŒŊÉņ9-ŗ at×6/AV™ øķÎĮuötą,ĘęÍgœWfH÷qžŧûîģo°`ũ6›—ōHĮņŊQŗEČįĪīs>89œSÂÉķd˜xōyÛ Ô{īŊwÍöĸP>ķ'ōųæM/×Û ‘f% bĪ‹z|Ĩ¯)x}cŖÂŋ…nŽķHŖ‘5ŪxäĶ<qađûô陹ƒšöYgYô†nˆ¤%ž+Ė2 _ø\éGĮäĸ';it*ëö˜Â—[nšæĸ#Ī›€XɈ‡ ayŖƒ‘F‡Jvļd‡%ÍÃt˛]vŲ%ĻĘũæ›oĸĖüģÄ-ŽƘÜQgV„ zušēæ%–Yea?[ƒĐÍŧâĢTÄÆ ‚Eįãŧį3Ū´õŧČã˜+˜#gۑ°T˛?˛X #ŊgĪž[Î{ė1ãCžĖ}„Ņås*úpÄãHã Ė23u`‰Ûå‡ũŸ°ĪŠ„Yîū駟˛úؒDKĖėi2dˆ­ļy{æ<×į‘F#klNüã˙÷`A‚`˙˜EųMÎ|ļĖį>°ÂņíąI“&şˆĘ'O<ųŲW@g¨ÍņÔā Ÿį˜s ˆw â8‡hōäÆFULš< ī‘sôĄ+WGEf_–w=8ōCjšÉ>ųä“hQ„Đâhûũxš`S&mÄTÍÆOōAŪÎ9įœŦ>/ũŪļdYQébø¯Sģę`Yk1 —'\Ŗpētėež|…Ũvū‘ļīoŲ÷¸\Ø÷QŗW7|!lĨĨ•ÖyvkëŌyŽ%x1„PMM†´W]uUœ7 ]Œ›ĖŠUVY%îŸâÍQc"ķ ņŒ‰ŧpļ ŽU „āᇎę¨D"ÉËĖUî02đK^N¸5lļg/ đŌA]ŽŽy /¸ā‚ØfŽ5[ˆ(ŗ)\sœGZ… Ÿ5æ—9ĀZaņ°ōŗī™lÃÆTۀ>íėęŖ–Ē#ߨI‡âÂęø€-Ŋ ŽúCaõėC'‡NæuâĮČī›*EœˇŨŸ’¨ûã<_ĄŒūÛoŋ›P1Ûâŧ<ˇ ĸë?‰y:oģ`$ėįäO×Ãå ­Īâ$˙÷wĢlŲŪ]-Ŧh†eMЛëĶŅû×Uļį1gÆôp˙×ļ°ĩ’â–ÍŽ´o~˜b?}1ĖŽ<|Ĩ8x9vQ‘ū !°PāÅ&tæ–č:uęËa,‡D$7ōXØÄaMâå,GčcŦOßī^¯\å`*tÎĒĪŧ„,å2€ķ*xP7đĀę‡ķēĻįæ °dK˙2C>y,X 00@NŅĮA=ē„_!čöy˛ēB a›CÚ¸Gžsf¸5$-ŧ3LÂyđøfíĘZ[ÛpŌmú'Ą­•íņ"ęŸ ČŽš€Ã]š¨ĪÃî‚5×īž—īa÷ķœ^Ÿ9‹1ēĐy‰qŒņŸ<Éy€đōË/ŸōûÉy„zæš7ūķŸ˙ÄĪs`šãMX^`‰1)O}“á|ååŌOž\õ/D+ržßįŋ†”OūÚę—/Ŋ9Î#JÖhxspÜėÜĐėcߙ›kũb{͝[§Ķæ[iš\Cõš.åO°ŽJ.<0ÎvdÍ ģžĢZō<š“!m ˛VÍSčĪ_ŲōŊ*į™0ųB@´ *ūũļĻhUĄķRŽq-YŋÆHg{Íöaë Kŋ,ųbÉq×ú]ūĸ¨¯9Î#-’ŦŅņØÛƋ |ߍ}iXŲ’OlÉÎ¤ķ–ƒ@‡NámNšŦe˛HĘæ4/yŪ*|žWZ~Á`v•>ĘžxåE›ņÃ0;4ė—I^s˛ËB !Ā|Āw͚Ę5ˇy ĢĨ[.Yn”›‹@sœGZ$YƒÉcJååžûÆĒÕįvDÍ–XîCBŸĄī¤ŸįĪĄ! „@áh^*ĢEUraÎ#-’ŦqĄũs|řW°ųŗ¯]/ĒAõ^80ˆ˛iwéđ‹Ũ<ėųtzē|! š&%k<ũ=ķĖ3v衇f[‰U`ķÍ7ˇ^ŊzŲZk­e˙ũīcÚĩ×^k̝žēŨsĪ=ļÕV[Ų[la÷Ũw_Lƒ8]|ņņč /ŒĮŖ>šÕé'éōfĪžmëŦŗŽ­šæšņIâà ÷ü#faŠ‘%đvŲe—ŦĨĸk׎֥C{ꊧâKÔįūûīyjKC`đāÁņ‰—ú–••Å<ükhZž×ãėŗĪޤqà 7´\KĢ‹*f§žzjÄyß}÷īŋ˙ū1ŧÛnģÅ0–ĸÍ6ÛĖ:vėh›vÚÉžøâ‹˜öâ‹/ÚÎ;īlL\ôŊ÷Ū;Æ×õ/_ß%_>\úõ€læĖ™†Õ‹ČE]TWqŅ2›Ģ íÚĩŗîŨģ÷@Ÿ>}"Ézįw˛ú>ūøãx-ģė˛ąė‡z(›–6Î"ĪOâL›6-֗zōÉ'1ožļķV8rãÆŗ¯žúʰ(;ž…öųlåđdaô Ŧ—įž{î|Į /ŧk›īē×V—BīÍ|p\wŨuņ:]vŲeÖ­[ˇŦØÍ7ßl[oŊĩ=÷ÜsöŌK/Ų9įœ“M;î¸ãlĐ A6eĘ;æ˜clĶM7ÍĻq’Oįú(S]]šūúë3ŋûŨī\U&XĀ2m´QĖ–†2aRĖ„;Ļז†@˜ė2āeÂä•Õˇ mhHy^#ÎŌ› OÚķ0‰fëã'‹*f\×VX!Ã5āųJ+­}ú3ũęĒĢŽŠũ:šL #™×^{-Ęr]Ã2Q<§¯ížûîņŧļuõŨÚtR>ũzōäÉđ>īŧķ2ÁâT[qņžŦ­ Į{lfÛmˇÍŒ3&së­ˇf<đû9ŽLX>e€O˜Đ3tÕŠ3<(ešĪÜu×]™@f3ß~ûmÔYWÛĄĖŒ1"ĘŌÆUVY%žÚįŖp#ü[}"ŧ ĮƟäņŪ{īÅįģîĩՅŒ…Ü›õ…$XEcŋ?äC˛cjRĮc=–éŌĨK냌yrB@Ԏc ķ'üˆą ^w [;âøĘ8ŦÔ1NTo"~Ī‚oĄ—ųŠq;ÉË8o´OwÔE/ą*a%{˙ũ÷ŗĸXŲ°rqÄ1Ž'Ŋƒ>8Z­° đ*ė%—\­\üøãv÷ŨwĮ8–¯ŧōJË÷“\åĄƒ×mŅ&´øÔOœ;ŦÔņÄOŒ¯ã&-aȄ‰Õļß~û(ΐ0‰OŗuĨuîÜŲJKKŖœ˙ÚŌĐ64¤<ōđŠ1m ¤7âœ|Ō&}QƌëJ_¸÷Ū{Ŗåėá‡ļũöÛĪĀž}W´ųŒ3Π™ŅŌC \ NČN´ŦŅīčušēúnm:ą4…›4Z3Xj "ugXnjk Ø ēĖ2ËØa‡­ÍÄaĩĄ_c…JDEëõ§˙ÕĨÃÔ}ũõ×Öž}û˜ŋŽļ'û:øģ+¤ĪģlŌ§_rŸ…a4­’´7_Z ‰Ū'¸‡°ÎĻ–H\žë^[˙$_]÷&2õuXŠ?ũôSģũöÛ ‹ķi§–ŊĘËËíôĶOV7ú xÉ !Đ<h˛eP 6,'oá%—\rd'IËŖîØ“ÁwNÜÕļQ9Wyž?ŊŒ‰āđÃˇ7Ū8.wūõ¯ûk’yŌua tW[šËäōچ†–ž¤c5˜<˜Ä“nQĮŒåHX°Ëq'œpBl^Ž~ļ×^{Å=>p­O>ųäH¨oģí6Ûa‡’°ä<ĪĨ3ŲwëŌŲŗgĪøāžszŋPŽs•—lyüÚ˛, 8ö#Άq?X’ –ˇxŸĨīŋ´Î`…ļ=÷Ü3n;ˆ Ãŋ\uIļ9öĻárõī\qQ8Ī?äƒåjž#˛hŠ$đŲgŸÅĨÎķ•G.ėŖ‰ËĄ5Ąš˙,ą\ƒ3L™`…‰KU.C]Â^ģhž ž¸œxÍ5×ÄäÚŌĨ`%‹ÄĘ÷­å+Éē˙ūqŋúÂl܃æú“oÜį´ôŌKg’A&X?ĸË-ˇd“h&,Ä=va$ķë_˙:ÖĨļ4ô† žąōĐĘLĻúļĄĄåŊũöÛą=”,#™3Ī<3–^2ú͟bķ[f4$|5:ļ‹ŊgI^‰×.ŧ\ o:F2AÅqŲßۜ‹{ Ã˛Z2kŪķÚún>aY1^‰ũ}L—^zi&,Ëg‚0o9ž¯ aŠ3ļžÎ`9e_xƒxIDAT‹„7cÖ|0ļ‹ũŠôí`9Œ{5I˧3lWˆ÷dG=ŲįĮū'\mm§>´°Ėœ Öô äŒũ‚îōõyOolŋ)ûDžëîmĘU—ēîMĪ[_˙ųįŸûƒÕ3ļÔųR_ũ’‹Å$k­ kIƒ_?.a„‰ĖΞg˛ Smú´ŗĢšûJxRŪĪyû,ßĪMąh›mļ1^Īį‚•až7™ãÅ§Ÿ~:ž)š/_˜œŒ#šŧZHyųôņvT°DÄ%Ē\2ÁōŖYjJģÚŌŌ˛ÉpCÛĐĐō’eûyKĀĖÛŦH9÷ß°48a„y>o@– šæcĮŽKŖÉ=WŽŗ6?Wß]PųĘË׆|ōÉxÚÎR›ī=ķ´Ņ™Ģíčeņ%X/'éįęķÉôÆ>oĒ>QČuĪW—Æn3ú¨ĪŽ;îhoŊõÖÂP/B`ąB ŦFdfŠí ėUeŋ)ûā9pÎĄøš)ö$×åNŊ}œ ųn–õ_ļÄŽ8ŦGÔĮ”ŪĻÔ$d­ŽĘæJgc4ĸeãk°z4ڇts•Ĩ8! „@KD"ÎË)|ĒFNC ˜d­ÉŪ­/Dl {Âb6ž…&'š6ūuÔQy‹ ŸÛˆ/ŖäP‚hđ´/ĸÖ .„Ē fKÖž2ãÅ@€7'Ãw¨ŠQ´ĘB@!0MöéŽyJU@! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  DÖ ‚IBB@! „€("kÅÁ]Ĩ ! „€B  Z$U ĐË/ŋ\ ¤Ä„€B@!  A ŅČÚ&›lRHy’B@! „€¨Z­XB@! „@S# ˛ÖÔˆĢŠnRYÜ&Î'ÕM*‹ÛÄų¤ēIeq›8ŸT7Š,nį“ę&•Åmâ|RŨ¤˛¸MœOĒ›Tˇ‰ķIu“Ęâ6q>ŠnRYÜ&Î'ÕM*‹ÛÄų¤ēIeq›8ŸT7Š,nį“ę&•Åmâ|RŨ¤˛¸MœOĒ›Tˇ‰ķIu“Ęâ6q>?ŋ„Ã*SNb-//ߚ5k\žé“`W”~ŽŊ'Îųąįãúj/~ņũā÷ˆîŸ˜‡įc^úũŅīO|?ø=ĸßũūøŋ zūĻôˆ˙nÄŋ/Έ}]é—ŧŧ˛ōŅK™B֔“XŖ_ īã2ÁĪų>Ŋ<ŊMĻz™ĘÕ~įuHg‹ßŽîŒ˜GĻŧøíŧˇbF1—lųøœÚëūã~đß™ōÔõsžWû˜GĻŧøÕ˙ûĮī÷L{}ē#•‹€ˆ€ˆ€ˆĀ>@@b-í"Ė™3Į^xá+..N;S{‡[ˇn5>—˛e˖ŊtãÆÆzÖŽ]ģWũ4äÆË–- ŒļoßžÛËßŨFĻ" " {@ g7čô]-Mđ#ŸuÖY}učĐÁN>ųd1bDEYuf,X`ožųĻ 6,ÄéŅ7ĸŠiĶĻÕ9Lb_ëׯˇącĮÚ§Ÿ~jVRRbũû÷ˇk¯ŊÖ>øāÄ6酈Lâ I‹-˛Ûoŋ=l§œrJzÕ}âøæ›oļųķįWĖĨ]ģvÖ§OģüōË­e˖å5•ųčŖė•W^ą×^{Í<đĀ*‡Šo|Ģ\*ˆ€ˆ€ėķę…e-//ĪÎ=÷\{úé§íđÃˇ×_Ũ/^\#p+Ž ¸đ íŅG­‘ąŌ;}āėË/ŋ´‡zČĻNjŖGļyķæŲŊ÷Ūkee!fO>ø`9^ëčŖļI“&Ų‰'žčEûÜŪ­Zĩ˛7ŪxÞyæ4hMž<Ųîē뮊SjrŌ\_pĀUSųVš(UØį ėķ–5'ˆeĢK—.ÁŌôÕW_Ų† Â)öcƌąŲŗg[‹-ėĘ+¯4ˇ"!xxãRÄ2õüķĪ!vįwëĶwÜaŋũö›ŨtĶMvŪyįAčãąņÅmŨēu6sæL쿚kÂ8¸žQß~ûmčëâ‹/ŽÔ.î#×<ÖĨīžûÎN:é$;æ˜c‚5¯Ga-ˆ—YŗfYŋ~ũ‚Ã˛¸bŊ ähÚ#ô°Æauŧ˙ūûš"üFŽÚūōË/öä“OÚ?üX <Ø.¸āC05*Ôg „Ķa‡fˇŨv›ņAäšZŗŗa|Ä–­nŨēŲ’%KėŗĪ> ŒaĨ‘kąf͚ĀkßũûūûīmܸqļpáÂp|÷ŨwÛGa›6m˛įž{.đĀ*Úˇoß`]œ0a‚ŊķÎ;vŅEŲK/Ŋd7ŪxŖũôĶOĄŒkĘįi°čÕ6_į Ŋˆ€ˆ@Ã'°yķfkŪŧųn-´^XÖXҝŋūj¯žúĒŊüōËÖĢW/ÃjDâá‹ČyöŲgmĀ€öØc…x3ŌO=õ”uęÔ)ÔA šÅŒ‡žĮqáf]šrebŒÚđáÃĀ-‡Õ‹ôîģīÚįŸnO<ņDĮ|(ßÛæwÜqĮUXҰĻqLš[™ë|ĘĪ8ã C€ fz÷î¸ 8`Đž}û ܨŋmÛļŋįž{‚8ÅB9tčP?~ŧŊ˙ūûaęđЇx9˙üķSú%ÕԚCį;~pX/bŪŦŲãöyä‘ ZšÆÄāMœ81´BĀ­ZĩĘŪ~ûmŖk&áJFā"Z‰?Dˆ“øq~—^zŠuėØąĸĖ-—~îĩÅ7LN?D@D@<žC„ZínĒ7b ë ÂQE k iúôéÁ"ōŪ{ī…sÄaAÂĮÃû“O>ąĮ|7B€įCAôÃcŋš4iRŅžSšøŖ søú믭mÛĒ˙ĻWÔeÆ,b…äëĘT‘ąąĻ}öŲvÅW„Ø6æQTT6Úc ķ¯"û:ƒXã°rČ!6dČ+,,4Ŧ”žÚ´iŦi¸"iˇzõępĒĻÖėãĻīl$ŽáŒ3‚Ø$žëĪ˙F¸HXZ—/_Ŧfœ÷7caėÚĩk`„‹ĩgĪžĄ>kbÃwæ™gZëÖ­+]Î×6ß09ũhĐđú ÔxvīnĒ7b +#DˆĮ!ppcbáÅ\xˇŪzĢ!:H¸ü°Ž`!ÂŊõķĪ?WđqqTZZõĮčhäõ;¸]i¸~øáŠ>÷&ĶšsįĐwgœpī’üüđð6æĪ:aÄZĶ×CŦÛ9¤OymōM_Į" "  ‹Bí­ˇŪ B-~îæēĘŦb­ü™ļĪ$‡•ä’K. ąH¸yč„u…˜§ĶO?=Ä,!B05ūøã!& ("déŌĨa=XžpĢķ„đʖe¸ã\Ņ'e¸Ũˆ)ãËęH¸uŲk¸#IXžøâ‹`%ŠŨ­¸D(ĶĻM ĸÂĪ1/,LœKOˆ=b°TįĮžO„ārŦ*ÕԚ}\Ž-îĮožų&ˆßšsᆨŊîŨģÛąĮĒqípõžp ÁrH!qzãîæšÃ…{‚z°Ã]M߸Jã”I¤yÚæëãj/" "Đđ÷ 5ô‰§˛đi‡ŗĐ‹+íŗž`ĐĸiJ­­ÛŧŖˇJÍkˇ€‡,ŸÔ˜2eJx3”Ø5>kčđ˜4,0ŧIˆ‹ W%"‹ųi§}œsÎ9AlņY Ė‘nŊJZ qkÄ@ãEląP¸ãp‘"úŪ¯ŽÄŧxëëá-ˇÜb¸^Ybä†nØeÖtß}÷A‚5‘ø*îK^† ‹ķ¸9=a5Ŗbīx)ËŸDņx.¯—´¯Š5ûXŧÄqŲe—…ë„õŒ—x ‹"k)׀)¸–ˆS\™m\ŪŦíČ#4Žéúë¯1ˆŧdA}^ZĀžkĒmžšÎKõD@D@ę (ÄYŖ50xĖĪ<ŌÚM)}ÕĒEVۙíWneŲE‰!萇ų¸ilÂėË+×lãGļ´fEucj#N‰(‰X&,(ŧDĀ|6œã "‡ręũūûīáaÎC›@{yw•Q‡=įX3‡Í•/uŲ8ÆĩÆ9ÆĻ_žFģt7[d0æĨ‰oŽ1c0O6bÕøŒ Ž9Á†õ’˜,°œąv{ÎsM‰gŖnŪĻ䨙ĐΙŌ.f^“kf\ø’|ĖÕ¯5åœgŪÄ+—Æ<™7kcO]æëœ8O}îúb­0`l~mé;.Ģ+žĖCID@D aHjčŒ>.ÜXí?F¯ˇ’ōhŦa} mÄŠ-ƒÎā™Įs,NY-k=M)=ĖtķūˇŨúuŨiЉ;Šé|üpe,ÂqrąÂ:ūËäY4l6OžwA€8ōD™—Sæmj$?įb VãO¸4žļxDåŦ->O9l˜› ȘeœG ÅkĻī¸Žãv5šæôq;=q ¸–ˆ3Ÿ uü>Hâ@ŋÜė\7ƒļq{úH*ĢmžĖCID@D áČE¨-^Un˜Ø!MZˇH‰ŗt‘æDŚWîŲĄĀšnĩ-孏įoĢ3ąæ“mL{CzâēđĨ}ŦAJÕO@|̟ŠzÆF/Ÿs Z’E &SįĨŧ}x/ûtN”cč2:Iyp5+ĘŗŨRjoÖĸíļ`éN TEĘÔ*ÜŧūI‘Z¸‘ &žäBk™" "PfšĩekKmúSb­ĪŸÍZ˙Оë3ž^ĸXC¨ų6¤wž5)HYyÆL)ļM[+[|╯YIˇšąqõ.žëzkĩ" "P]Ō-héĮ>:jÔ¤ÍÁkY­mƒ{Ĩ„šë.¯ī_0āEœņSÄ Mž[l˙š‘ŌuĘŗū­šzP*(<îLydx(1|­\Ÿú{ßī]fÃû7 3âÍũå„[œÅk_č`ûņv›š$%К–‡LÚŗČūÚĢČ:ˇ‘h‹*/" " " N xÛá%Mb˙ )ķÔ¯Ķv9°05^ #ąFĒRŦQ ËoōÆ Ö5lį”ÚŋįÜžSņ–÷Ë÷AÚŋđ‰Ú+‰€ˆ€ˆ€ˆ@c'ĀwjWŦ+3˙ø-<-ú—­6𨂠ĄÆWøzŸÔJj´ŠdYŖąæŽPŦk|úÁƆ oÚÂ[°ĸ°|đĸvJ" " " " • 4É/ŗ>‡—Ø ž%ÖžUQø5„š[Õ2Å­e|W”(<”V66ÜQÍēˇŨfĢ7Û–ؚMûŲÚâ<Û°%oåXyš*ÆAsVķĸ?Ŧm‹RëŌēÔēĩ-ŗũ›ōqũĸ ЈQs‘–Éĸæ¤2Š5*Ă Ą—ĩË/)Õ´´\ÄĨū ļŸ•ôCD@D@D@9ˇ”‹–ŸŸú+:4„1Š ĒDąFምXŦ҉Ķ1ƒĶ[Ũ¨#Ņ%ÆJŊDŠu“k'*ÉĒæíŌš%Š5 ]°ÅƒúŸa’XKGĒcÆNÍäēÉÃĘRļüŠ— b÷g&ĄĮŒb“4Œ›Ę`.Ō<–z˛ĒAMID@D@D ą@3ų†(KßüœČgKYŚwā‚Í;f@gņ>Û@:'" " " ‰€ëϤŊs¨J¨Q¯JąF%ī(mä=Åųle~N{hˆ\3ųÚüØ÷éå~œmŸ“XķŌĒĒÜĪk/" " " @&U—Ũkqg{:`܇ō" " " " Ų ¤ū:{ö::+" " " "PG$Öęŧ†\HŦåBIuD@D@D@D ŽHŦÕx +" " " šX˅’ęˆ€ˆ€ˆ€ˆ@XĢ#đVD@D@D@r! ą– %Ձ:" ąVGā5Ŧˆ€ˆ€ˆ€äBā˙™BÃŖRJŠIENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Checkout....workflow/Contents/document.wflow000066400000000000000000000161011445560650400320300ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx checkout --vcs=svn "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2A9C48DC-3E17-49D6-9924-6FD98175AB1E Keywords Shell Script Command Run Unix OutputUUID 190C7D90-6230-47FD-8502-890175C77BC2 UUID 3AFBA913-B332-4E21-8226-03E51F39CDDF UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{191, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject.folder serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Commit....workflow/000077500000000000000000000000001445560650400250215ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Commit....workflow/Contents/000077500000000000000000000000001445560650400266165ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Commit....workflow/Contents/Info.plist000066400000000000000000000011721445560650400305670ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Commit... NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Commit....workflow/Contents/QuickLook/000077500000000000000000000000001445560650400305175ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Commit....workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001104321445560650400331510ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëUiCCPICC ProfilexÕYy8U]Û_ûĖŽs Į<ķ,ķ˜yžįšpĖķŒáˆ‚^'øÛ9ūeŗæíŖ÷—đ 00ūmƒ DīöÅĪ9_P˜éîāžŠĀ"á:H3  ôūĒ%/ ĀšXX‚ĀŒCāap›0“˙˛Ķũ‰Á¯v~pģ÷H^°mĖß}ūî ÷ųĮgđ†ņ9îcWˇ;ē(÷€Ôúücąëī×h¤kĨßIoũJ%‹R@é ÔQ(@F1ŖØ$JĨŒŌFiĸÔ` 0¯aĪ~Ƹë?¤Ņ7ölXŧǃ?ŦŨũīž´Āá—uĀßŋ˙c `hšeųĪˆö9ŋ膅ĮGøųG“ĩá7×G‚lę%%A–•–‘ŲU˙ŋ)ģkÖīÁŽÚüZ‹ æádūj¨-€E˙# ˜ öŧ˙Č:āđ fÔ+&2öˇ?Ôî ¯„´p„˛nĀDāį, áĩQ č` ė€3pƒãĮŽÁHA HŲā$8Š@)¸Ē@h- tƒ{`Œ€ 0fÁ°VĀ:؄  !ˆ â!qHR†4 }Č ˛œ!Č …b Dč” åAEPT ]‡Ú nč4 MBsĐ;č ôDŒ.„bBĄ0EØ!ö#üˆDââ,ĸqҌčF &ŗˆ%ÄW$@R#™‘ŧHI¤2Ri‰tAú"#‘‡YČd9˛ŲŽėGŽ!g‘ËČī( ŠEFIÂqj„˛GyĄ"P‡P9¨"TĒՋCÍĄVP?ŅD4'Z­Š6F;ĄũĐqčttú ē Ũ‡ž@ŋA¯c0fŒ0F c„qÆbbr0%˜Lf3ųŠÅbŲ°âXuŦ%–‚ÆĻcĪa¯bī`cß`7pÔ8œ,Îį‚ ÅĨâ p5¸NÜcÜ[Ü&• •*•%•7Uü4~•šššZ…Úš:€ú0õYękÔ÷Šį¨ŋH1‚.a!†p‚PIč"LV‰DĸQ‹čBŒ&ž Vī_7hh¤hŒiŧi’iŠišiĶ|¤Ĩĸ¤ÕĻuŖM - ŊA;LģLGE'D§KGĄ;DWL×F÷”î+=Ŋ Ŋ%}}} ũúE–$DŌ'y“ŌH—HwIķ H~]/†#  } o1ŒÂŒÆŒŒŲŒuŒCŒ+L$&y&ĻLÅLˇ™f™‘ĖBĖÆĖÁĖšĖĖO˜°pąhŗø°d˛ÔŗÆžĮÖaŸCĩÃ7G=Į<ĮY§=NINÎėÎέ.X—+._]õ]ΏžŲ§°/}ߓũÂûėāÆîėv۝֝â~ÃíáčQãąEऔSžz{ž÷\ņŌõ*ôZōÖōÎ÷~įŖî“įķÖWŨ7ĪwŅOŨī´ß;M˙˙åŨ€ĸ€ĪFĨß‚,ƒ*ƒv‚ƒBp!!mĄ¤Đ ĐŪ0î°aŖáâáéáŗĒg"V"M#¯DAQûŖZŖáäp0F$æhĖ\ŦFlqėFœC܍ôB ƋÅgÆŋM0H¸|uĐë`O"obJâ\’vRŲ!čįĄždūä´ä7‡ WĨāS‚RĨJ§æĨŽq<ŌžÆ•v8mū¨áŅÚtšôČô§jĨĮPĮŽ eĘežËü™åõ0[:ģ {+Į+įáq™ãgīœđ=1”Ģ˜{á$ædčÉ'§4OUåŅį%ä͟6?ŨœOÎĪĘ_;ã~æA|Ai!ž0ĻpöŦŲŲÖsįNžÛ*ō/š(Ö)n8Īy>ķüˇī’Į´.ԗr•f—ū¸pņY™aYsšPyÁ%ĖĨØK ũ—•/W_aŋ’}eģ2´rļĘĻǎZŠē熺&ˇQSûîęžĢ#uzu­õ’õe Ė Ų×Āĩ˜kī¯{\ŌhÚØsCųFũMÁ›į›š˛šĄæøæ•˙–ŲVįÖŅ6“ļžvĩöĻ[Rˇ*;x;Šo3ŨÎíÄwĻuîÜI¸ķĩ+ŧkšÛ¯{žĮŊgęŽĶŨņ^ëŪĄ>Ķžû÷ îŨí×îŋs_ũ~ĮÕm•ļ (4* 6=RxÔ4¤8Ô<Ŧ4Ü:ĸ2Ō>ēw´ķąæãî1Ŋą{ãÆãŖOėŸ<{ēīéė3īg‹“Á“ŸŸĮ>ߜ:<žÎzA÷ĸā%įËōŅ™†YÅŲÛszsƒ¯l_MÍ{Í/ŊŽzŊõ&m¸Pđ–įmõĸėbĮ;ƒw#ī]ßŋY _Ú\N˙@˙áüG‘7?i}\qZyķ9ōķǜUļÕĘ5ųĩž¯V__އŦo~ËÚ`Û¨úŽüŊ˙‡ãˇ›q[Ø­ŗÛĸÛí?MNī„ėė„S")ŋr$\#|}øR sg˜;Œ€īúÍ)~YĀt‚m`Œ„ķ_!`į§×Ā7HJƒ&jˆjxŊ€AuŖŨ0Ķ‚=„ŗ âĸÚĀĪP?& Ō<ĸ§["á$͙R˜¯˛ŧ`ceˇāČæâĻį1'įđNđķ ø Ö}Qģ+AÔ—JÜĶ%Ŋ-k('Uგ ˛ĩJ˛jŊڜ:Ŗ†ŧĻ•V’vĩN‡îŪŠĩ!‹¯ą¤‰’ŠŽ™ĩšŗ…ŸeĒÕ9ë:x%xiˇâ™D•]l\#ö%ī?áVåŪé1J™õüâō!ų øÉûëX:y„Ä…&†e„gEäEæFŒ>“›WxātüɄôƒÉ‰1I҇“)‡R SÕČ§IåN§MßÉX=ļœ95Ũ–SwŧųÄėI–S†yņ§KōĪėJŸu;—VTWüĒ„xAŽÔãbNYSųdâ˛ČķʘĒãÕ 5CĩęhëeLŽy^oĖŊQuŗ¯i´yąågm;ī-éÛæwŧģÂēôš›×{ž¯ö^KĪũ;†N , ž~46ty8fD”4:ũ¸aėā¸ÁibæIũ̓ĪL&Ų&_?oĘ˜ļ{!đbķe˙Ė…Ųˆ9ŊW,¯>Í÷ž.}“°`˙Vf‘~ņĮģ'ī;–Ē—OHųû)hÅ˙sĀ— Õøĩœ¯ÕëĪ7ž{ūŨ ūéļŗŗ'0{f‚`/p‡@5˜‚3;Kč4…FœBü@† ßŖbŅt5Æ‹Įā Š‚ņ&Ô{"DfZ.: z5’-CcS%ķ}–u62ģGgW3÷ 2¯Ÿ+Ļ@›āŧ0^DZÔ\,Dü´Ä-ÉįR_ĨeTdåÂå‹šģ•ž)oŠ2¨ņī•S7ŌđԌƒŖáŒN™n•Ū ũ;ƒ†SF‹ÆĢ&ßMˇĖļ-P–´VŦÖÜ6ŧļ"vōöĘŠŽN&ÎĻ.&Žvû÷[šŲ¸ÛxØQ\=ŧėŊ},}ÍüLüu4Ղä‚ÅBøC9ØÃIt‘Ø(DÔVôZĖĮØˇq3&ã'<FĖĪ2ČöÉÉ>~íÄpî‡Sø<…ĶųQgŠ ē įĪĄŠÄ‹-ÎĮ””^č/ũXÆXŽrÉ­"įr˕é*DĩTGmÎÕļē…ēk×Ŗ/ܸųŖyO‹_kA[ī-¨Cęv@g靑nLöŨ”ŪŽžĩ~ūûĘö>ÔPT|¤8¤8Ŧ8"3*öX|Lxœ{‚ũ ãSÂ3ĒIhrûų§Š÷Ķī^ŧ{97ķfvfnîÕėü‹×ķo>,lŧŨy‡{Īž$ĩŦũÁöcø§Ŧ•ĒĪ_>¯ņ|5[OøVˇąđƒs˙Véöâß_ķô0ߒæ0ˎÁGˆr…ķö„â b )ƒĖGnŖBP¯ŅžčEL8f›‹Æ=  Åŗā{¨Ŗ „%b=M4­œGŽŅWŦ…™ Ļ9æ>–JÖ ļ@v;]N!.,×:÷žAr#o1_:¨€ĩ ĻŸ0ZxCdB´YŦDü°„줁YjkĪ3éz™#˛.rbōXų§ W(™+ +ī¨L¨VŠ%ėĩP×@iLi^Ķ:ĻíŖŖ¤K¯ģĸ7¨Ų ŅĐÕHŘɸ“É}Ķ2ŗxs[ KŦå+Ģë›h[c;Aģûg×3ŧœ]č\\Û÷åî÷sĶvgw˙čŅM)ô ķŌ÷æô^õšī[ėė¯ĀīõŊAį‚cC BšC×á}Ŋ>âh¤W”f4o ˆ™í‰+?ī P,‘>q#éåĄŪäēÃįSޤFqKŗ>Ē‘.™Á{Œ!ų#ëSö|ÎŗãŖpüôŸė<Ք×pē1ŋáĖՂŠÂËg/ž+-*/.>_^rņBeéPĒ\ūĨâÄåÎ+KUôÕ*5^ĩĮ¯ļ×-6°^3ųCãMÄf–ČÖúļOˇd;Üžs‡ÔÜ}ë.worßĮ~īûĶĻæš÷8f\˙‰ø3†į‚͆/“g?ΟX}—÷Áúķđ†Ķîü˙>[ÚŨ0ŠœuĀ™ kCrö Ô +"v*!Å ¯=ŌÉũ{˙`ĒđʑJ`ž8Ą ˜†Cų0ߛA`R{Dâ2bņɏ´F&!k“(|‚ā3ą!4­ŒA_BOa˜0V˜lL?‡5ÄÅöãˆ8\nžJ’*šĒĪ„÷Æß ÆRģSˇÂĖ'„pŸ(HĖ&ŽŌ8Ō´ÃlĻ„Ž@wn…>”ū)„´ÂÍđņé$3 s‹K;Ģ)ë [,;žŊ‚C›c’3œ‹ĢÛ™{‹§‚lIūÉ[ÃˇŸŸÄß'įú߄ڄ“E DŠE'Å*Äã%L$E¤ĐR3{ú¤Ģd˛dãä|ä÷)Ø*Z*é+¨ĢZ¨yė PĶHÕ,ĶjĶžÖų¨GŌW1đ3Ė3Ē1žlrŌ4Å,Á<Ü"Ö2Â*ÂÚĮ&Ô6Ė.Ų>Įá¸cĄSŊsË¨ëž7nwuGJĒgš×¤¯ŒŸˇQĀXÖ 9:ÎŲõ3Æ#ļų1>4a$Q!éR2ũáC);G‚Ķ>¤‡d,gúg}Ę ?ž‘›vJ$¯1ßôĖDáĄs†Åv%ÁĨGËZ. _AU)×D\Ŋ\?í†oĶ…–ˇí{;ĸ:‡ģ‰w)}-÷Ą‡ÎƒĨCKŖęc™ˇž‘ž[O§ŧėũ2ĪōÆč­ÍģØĨC’>Å|vYåY[X?ˇ!ņŊr“jËfÛíįá_ë‡ |žUúĀgˆ2†ĸĄRč!´Ž #Ė`_‰G"‘˛H 2Ų3rI”ĒõE렓ĐčL<æ6`õ°™ØĮ8Nœ?Ž•ŠŠĘ…Ē–ę'Ūæž>ÔŨAB áŅ”ØNCĻÉ Y§  }AgM×G¯J›¤@jbPcčf4bereZ`ŽaÁ˛\`Uf}ÂÎNÍ^ÃaÎąÆYÄĨÁĩÄ}Į”gƒ|7‡oŠŋLĀSPXpYčšđaKQ.ŅobCâW$ŽIúJf—ÁČŦÉÎË=–ŋĢĐĨxS NCUUÛÔ:÷ŪS‡YŌ{m”Ž°ž†ū>ƒÃBŖ:ãF“ĶZŗķ6‹~ËQ̧Ö36Ÿí {nIGe'{įh—L×ō}wöĪšc<¸)Ļž^ĮŊoøLûaũ|Īõ  ķ /‰xĸÕbbc¯Į}‰WNˆ8X—øífrúáTâ‹´˛Ŗ_2¤Žee>ÍæÎ‰<>K>uĒį4mžį™žBŪŗEEZÅK%EĨîeLåc9WĖĢĒßÖ6Ôå4x\WēÁys­yēĩ­ũfGIgJ—wkīŪ{ō÷ɉ6†gFûƚ'ĒžfOO™ŧИažũōjüuŨBęĸÃ{îĨĨˇ>e|6_ĨY{¸~fÃüqŗc;ô×ü̧HM` ’ƒ" Fh Ą€8€¸D ‘Į‘OP<¨`T+ƒvDWŖ71˜Ë˜ŦöŽ…{L%OU‚Įâ#áŦŌŽē— Nh%JoĐČĶ´ĐęŌĐšŅ­Ōg‘$Hƒ ąŒŦŒ™’˜Ĩ™įX YmØŲž˛ŸápæäįüÂÕÎ}ŠĮ‹,ĮKÍģĖwŋB C0LČUØLDCTJL\œO‚_’[Jd¤´’Œ‘ŦĢ\˜|ŽBĨâ°Ō7UCĩ¨Ŋuę šÜZû´‹ufô$ô“ ƍ؍ŖMÆĖÍOX,[ŲX_ĩeŗK˛_t4vjsásÍۏsKp_Ĩøz>÷ļõöŗđŋ¨ÔĸÚŽŅī ũąqcņî īã“6’3R8RĶ gxûžu>Göøxnä)B^{žÍ™íÂķįHEąÅS%Vē/*–U_âŽ(ŋ"TYį 7Ž*Õu4h]ëk4ž1×ŲŧۚĐļ}ëômÁÎĒ.ąîĢwĨzîI÷_}@ķ0gúQäĐüˆõčĩ1šņā‰OŸž|2Å:íôâė˧ŗLs6¯2æë_ß}3ĩ°ŗČôŽ˙=ßī2ĪŽlˇ?Ŋ\éü\ōÅUfuuíúאuōúġ˜ ÂFÅwųīw~˜ūx¸Š˛YĩŞ•¸u›iÛsģ~{ķ§áĪ“?'wøw‚wšwį?ĘWNvw÷A>~|šŗŗ*Ÿ_æ°}jggŗ|ggûL2āo ]ÁŋŋWėcā3÷ķ™ģčîõĒŨÛŋ•˙A4zXąî8” IDATxėœUÅõĮĪîŌ;"ØÅЍ¨Ø;ŠŊwc‰Qc‰%önū‰%‰%Å55ŅKbÔØ{Á^ąa‘"EÚ.ly˙ųÎr—Ë{ģe÷ą,ŋŲĪŨš3sæĖĖīÎŊķģgfî+;vlÆä„€B@! š%ĨͲVĒ”B@! „@D@dMA! „€Í‘ĩf|qT5! „€B@ˆŦŠ! „€B # ˛ÖŒ/ŽĒ&„€B@‘5õ! „€B@4cD֚ņÅQՄ€B@! ˛Ļ> „€B@fŒ€ČZ3ž8ǚB@! Z ! šL&c555öÕW_Ųˇß~kS§NĩÖ­[ņ¸’’’č+ŧdâqįÕeVVļpīŊ%ĄŠ=zĩˇm­`ŸĐĮÚĩk=__ˆ&ø§ū¨ûmQŸ7KRo‚[hąŠ,ŅĪM-6ėUp F‰DmȐ!Öļm[Ûu×]­M›6‘¤•••ĩāÖˇėĻqmũúâųd˛õîÕŲJé†w‡˙‘€gj9¸AĖp!WČgVūUUglüwĶíģ†Ú”o§ÛīŽß<ô‘ÚwgLks5ίoĄũŅåķ•NzēžépžŧŠ_˛āZ{Ā_úû’…paĩ]¸×ÁÂtJJ,Õ$l#FŒˆ–ĩŨwß=kQcĀŦØku9…įaą¤āÁuæZN˜cV^c6Ģ:™R›ČZy8*[ã < ?¤Í ~yMiH/ĩËwąƒOÛŌĻuig÷˙}Ä|bcŪ@ éeĨĨVš<æZš6Ī?÷Œũã˙Ȓ5âĮ÷Cũy`ŌđXRú{cŪ;ÍI—ĻA›ĶÕP]Z <ØĒĒĒ ˛ļá†Zuuu<ÜĢĢĢâ@ˆ rųK\Cŋž\×É336eV••DrSŽi-qÁ–†íĨ§˙gÛī˛w …K^&Xׂ…-øå•%6`—žöØm¯ÛaĮöĩV­ZÅ>ŅØ7‚סžūHš••UöíØ‚¸­ÕPáXs „ŦĖfΜaO?ũŦ|ča6aÂĄc> 튎ąnŨē†éāZ‹ąúuËš¯—ÄūN?niNd­Žč?ūhŗfͲVXĄ´IÅÂ"Ā@4~üxûī˙k'tRĖÎ`Ņ”Ž2Įg=ôPÎ2I¯ŦŦŒ–—^ŊzâVxˆÚœĘ9ÁĘÖ&Ę<§OŸn÷Ū{¯ >܎?ūx[ũõŗm¸âŠ+ĸūŽ]ģf žˇËÄĻ ×U?,/´‡O}’õMÖīûīŋˇ˙ûßvÚi§EyŌ’éD.)aÚ .qŽņôʌ͚Lkažĸ4ĩL˜÷ôî÷ŅģCė’ŗO´ßŨŌŨl˛MÄ)HFTÛ됎kĪ.6jbiÔŲ‡ÆvõõĮV­ZgņŸ6mēŊķEš­ß›UQn­ZˇˇĘ9åÖŽC{áųg눟c7ZßĻÍŦ´ŲUÖącûä“O"QëĐĄ}ļęÉūAäĸ^_tŧūúë6qâDÛgŸ}ĀiQõ+-Ágœãą$ö÷Ú´Ŧ˙šmĀõ¤ķúņË_ūŌ;ė°8Č4(OúÂ:׉ôŅGĮÁÍãVWSÉ{}đ×Zk-3fLļÍMUf>Ŋ^Ō'L˜`wŨuWV4™–Ŧã„Áˇ—ÔË ‘..3sæĖxŽõĨĒĒrîQeUÁrQČƒ=åŪvÛmöÁÄkÎÚļ.]ēXEyE´ÄŨpà qSBM°\ ŸĩЅ0įä~#‡ķÕŌčåy}b;斟Ŧo˛~ĩŋũíoŲú&õģž¤<ímŽaÚË5ćŦ•WeŦ"\ĪŲU56+¯Šā7mf…ŨtåÅą[Ũ|ÕE6uFšÍ ņČĖĒ´ gøŽÍqe]Úی3˛}'ŲŊ? 6ĖļØb‹Ŧ ņ…8Ī_WtŧÁœcÔ¤RûjB‰[i?úˆ}ûCk{íŊQV>uœ­ŗŪú6äõėˇ‡ZÛv탅0Ôĸ¤]Č7¯úõE×2Ë,cë­ģ^´0o´ŅFvûíˇÛûīŋoë­ˇ^,+öŖ€_žëLįwėÉ'Ÿ´t}=ÜT÷ÃŌŦŋØũŊ>Ŋ4ĘȲļW=ų€|ûíˇíŗĪ> ĶOG-åååķiC–ˇ“†¸ŋüå/q“į]]ŽcQũdÛŅŃŗsįÎYĩÍĨŽ…bîí5j”pĀqņÆĸÃķįj7Μ9sâ´VlB8Œ˛q€'ž* l8ōžüĘ+vÄá‡[˙ūũc܈/žƒĶQ•1Ŋ*ä­ d/['ŦRQ˛öCvc†™úr}Ôī•PŋÃį֏:T’Âw^>˛éúĸ HŖMĄ!Yũčķüi}Í5\rM¸&´‰öTTĩą9ÁJVĻ5kJÃiu˜ đëÁ蓞”Ÿ/1¨Ģ?Ōú#ē ;ŗC˙öÉÔ`ūҿ˜bo=˙šĩ^f'{÷Ĩ'ėĀÖĩŠŗĖ>1Ú~œ:ŲV_kĶ€CĩMœ<ۖí^Zģ.3”×h…vyũīŊī^ëͧOmÂ5ŋ_|ąļ_„ØØ›Â-’îä÷ūÁy$tÁOŪ¤įęĩ… ]˙Ü…įâ] Åėī~Íä/ˆ€,k bRP ĖüX–>ũôĶøk׎]|8‘víĩ×ÚvÛmgGy¤ :4?xđā8åĩõÖ[GKéņōđfŊįž{ÆAū7ŋųM|0“Æ',7ŲdÛvÛmí7ۈyž{î9ÚĮ”ĶqŽ'é˙ë_˙2tũâŋ°C=´Î|ß|ķM´ĻËšæškbš?ũéOíÃ?Ė–Áaúņ”SNą—_~9âFŲÍūķŸQÎķĻq¸å–[b[iĪK/Ŋ”Õ™Ŧ{>×I}’ØRĪ6;ė°ÃØ@į_~ųeŦãöŗ+¯ŧ2;¸?ÚJŋĄO]uÕUYy/ƒüäŨoŋũlāļõV[øxúvAßŨwßûņ™Tũۚ[?ŦČÔcäW_E]oŧq,텐‡}Éú>ņÄąŧmBŊî¸ãŽxmb™AöЧžŠyÁüÁ0=Š^ŌN?ũtģåĻ›lįwļß˙ū÷QīÉĄī‚ ũrʔ)ŲöA,8ŧž‹+<'đOĻ3ËÃThŜ`Y ŒcĐA'؍O}a7Ė=v8ø¤`IĢļ™AfFŸR6'L¯´1ĶnŦÅļ„û'Ÿãūėg?Ëöqú1/Šģė˛KĒ{0ŨŅåqā[_ôë3ķĮr›:Ĩ<ĸVļÅ.§YÅĖYV3k´õ]{›8~ŽmŧŲöļÃÎûŲäĀÜbÛ+ ¤/\Gú[Ô3ˇQOsũŧäōL#Œ<÷âã?īĢMÃu~ūųįkĶÂõŊ:ôé 6Ø öúb&ÄyųÃū`[kã!‡bīŊ÷^ĖķéĮÛ^{íeūķŸmuÖąō`ávyĘž§|p, ėŪ÷Ũl:ĪŖûÒîqúũ”ú}Ŧd[X_…Ŗ-ԅ¤.Ø@b šō‚Č?ūņöæ›oÆ)Įun•Ŗ—–ņėë¯ŋž¯>Ŧ‘ĸlŌqčâüWŋúÕ|ØxĪ9įœH\šnČąFčwŋûx5ÁåĢ7i\pAIJ_ŋ~vë­ˇˌ'á_´ „:xĐWÖūāx¨Ī ”ņ[k5vÄGÆR¸ķÎ;š9aēhƒ¸Žmö늍gƌ™‘Č˙öˇŋ ƒõŅļk`Ž;ū¸øI7Ūİ~ūķŸ‡A{į ?ōΘûęL=j­XģM7Ũ4ŧ Ü÷ĐHŠ^y‚]_č˙û߃Ĩ´kĖ=ƒ6xũœ¨뙮ē6Ûlŗ@ĀndųÃ¨Ģ–Ŧ׿ņúž{¸÷[ģŸŨqįīœ­(āx˙ũ÷…{ ŗíÛvÛoú`k;ö{{7 ž`ģâŠ+„~÷Ŧ}Öō=účŖĄŽčˇųÚGũŖU&ū#}ŽÕŽ ÃTĸ&a¨ DŧĘž›ŅĘēNÖĸ’VV…u-Ŧ[ û}šÜYGŊãĶ#üÃ˛F‹ãô°t|E¸\í[…¸ZüđĶŽ8,oáSKQŽtî?^Šîšįž85ČË ÷ yˇ¸%õæę•áebFxæp?°Q`F 7s‚_ÚzĢĩęÜŅÆOgĢŽĐŅVíŊĸMŸ1Χ;ËjÃūŧb́¯WˆģķÎ;ÃŊŪ=|ž¤]œîį{ƒŧčŌ°ŠņB ĄŋíļŋŲsᅈ—˜7˛‘#ŋ‰ĪNÖ;ĸ÷7ŋš$?ÖyŽ5Ō{ėq{äáGėãO>ļK.š$ėRŊË&Ož­ūƒīŦÂCÂ5 ×)ÉÚūCĮ(‰˛ô¯[oũ[˜–ŊÃ~Åīf5ąīŊ÷~\‚ōæ›oØŠ§žjoŊųV|I`ŠÂ>ûėę÷œ]wũuvųå—ŲM7Ũ’íĄAGĶ÷ŋØĩ›°§õ‡FŊŋĶgäæG@dm~< ņäávæ™gÚæ›o­3ŧõũũīĮâÒÁ9Ļ ą”`yÝuÖY‘¨qŽuŠŅE]IÄŊŽŌY‚Ÿ4„Ž+Îˁ9aˆ áoŦu!/!uņ|‡Å%W9 ’čNļ…:ąļ G~Ŧ:ĀŦEY{íĩmšå–ŗë¯ŋ>g^ځUæˆ#Žˆ%He$—´ VdōaKdˆ:¤Û^Ô™Í Ŧ1ÄQõ'Ÿ¸|m†ÄĄƒ ”Å[8ä>FEáŸ×‡āBIĮĪŽÁÚkės?ÂU+%ĸ\íŋøØŒÄ‹ši#ÖŗŊķÎÛë×^{-Z›ļDrJ›÷ß˙˜Õą$@^,fŦõiÕĒ,ZģhD‹ëŽŖwéŌ5Ö+FĖå ÉúQ‘ʰ9Âu•†Ũä¯Õ54ŽIŠyCĩą6?`Ā€ĩÍ6Ûė4=ęú×ŋŪ˃øpÍčŖ¤{ėąļŌJ+Å|ũú­m“&MŠ„‚G|˛mÉķ˜Ą˙âĩbÚ32D›p}+à š¨ ×Ŧ$ėöįuŧFpõÃĨįH d.V]RfmËÂŌđQ\ī3H%Įããčoî.ŊôRëŪŊģõíÛ7"draâ:rõG@÷ūéēŲ + DŦ*ŲĶmܗŸØŨt—”ĩąmˇß3ø acD v•á Ũ\?ŋjëR[Ķ=zÄN^ “õĢŨMZ+Ã Ā˛Ëö°žkõĩģîž+ȕ‹ũKą_đ˛Š>vVcaÄ=õËO2vÕÕWÅ0–5úgI¸&<Ž9æØīåĄ]ēv‰2¯ŋū†}ņňØŋ$wô1GĮįķāÁ;…ļ\lÃ?_ ŠÃÁe:č x¯ÕÔTΎ\%Ųž(ØūÅžSÄūŪ k’&ˆŦ5ÖØyÃMī>ƒĖ˙ūļį‡A“ulėdPÁŌ…Ã$ķ!ųœ0¸BZ°ÎaĨZwŨuCk›įGĶíÛˇĪ–aZsÍ5cHĮ!OY<Ŧ´Ÿ:$Ķ?âHOēt$ y߅šÕōbqĢ _„k׎“õėĩēĩpŠŊ:"Xö&ŋ`{îsd˜ū Ÿ-™4Ņ:ëhU˜ö- –E1Ą\×Į”-ר¯›ûČPOœß›1ū‘–ėGÄį>ũˆgũĮ=ázņ9\Ūã‘c–€—b^P°sΏé8ãķ‚Äũ—Œįœg÷Îõ#ŸÆ}Iû5¤ÅęīTũ›yOôųĸ(ÜÄtb,nÜW\1Z\°`Až˜*åā!束ƒŽŋz JË/ŋ|´ļąĻŒ8ŌЉĪŒõ;XÖXûD>É“'G9Î9xÃ&Ÿįõs|ôrPĪįu#õĮ—.–l å$‰Ŗ×ŌÉT;ÖČC<–§d^Ę#oEEElO9𰤎î8gđ§Itĸ+Øzģ“õŸtyīÖ­[Ö ä–3H:™FfŊ dˆüųę•ˇzĻlČĮwÉúG˜\šöÔĶ3Î=Œ<y`’aâ9âŽē0EūÅ_ÄéL,>øQopšîēë"–Ž×Ë }ŦßcĒ]ß}÷]´&ÔZ˛æ ~^GĪįõö:ö)wtQ_ĻåčO`ƒœ×Šq°‚\ã|ŠęNôaU倔ĄĪËÂ'ĖũÅĩc]!Ö9ú—ˇ{Ãâüŋ)Ώ—ĶĄuY k­Ŧcø‚NsÎÁRļņ{۔1_Øˇą _~d>Ā焸.m[ŲÖÖ!ČvlSŽRkÖŦyŸ‰€%ūyßrŸ>J˙Ãų9>Îu¸lŒLÄ××i¸Ī ëīĘ+fÛ°W˙nīa÷sŋöÆį^dš–Xúš÷ady9æųÂŽtīG<ƒ“ų9§<ŦšôÎ!k<¯ ˙āÄsÆûuâĨŽ0ëę dÜg8ʧŋ“öęĢ¯ÚŽ;î˜m/z‹Õ˙ŧßĢŧb÷÷ļū-€€,k @R7+7=k°j°†‚uP/H(–2ĻYW‚EįT?gá7 Ãy3L?t c}b?'Ŧb \,F˙͟ūŋÁĩĘ*ĢDkk„ „Účŧœ¤ĪtD2—ŗĪ>;֕M|§ĖË9īŧķb9,ŽĢ- ,n§L€ qÔ%dŦˆīŨģwŒ/ŋüō0Áēy]uÕUŖ Ķ=`Ît}XˇãÚȚ8Ú6ŪFüL2ÆBa!ëųį§ Xt ´?]oޤáŒ3ΈrX†öŨwß,Î^>>xģcđāAÎ.¤qÎŒĪ ây‘I:Ȱéĩ‘>ø`Ŧ  ˛Ëz2di;} ™×ëB>ú Fq îŧl¯'ņčŖ\×É9ëxč+āŽ.Ö@2pxYčĸ¯3ŨĪZ@<ú8Žü|wŽļ Ã¯} Ü]ÆÛūRØ|ÂēDú õaĨ.Ézĸŗ˜ÎąĸŊœCŌ:„õv™Ō`•SÃa~0ĨÖšCO;ä´+íŽßmûŸzyx‘[)L\C>ÉW†@YY•ušĶĘ:wâˇAgĮf8ŽüßĪÁÁÃøvy⒘x>ŌĶũ‘8°äúŅŅExΜ°n-L…Ž:āĢøq”MųqŒMš8Úf͜d]2ߨĮ įĻa [ß` ;bgĪ XtŽyéW”.w~Íüēâ#ã‡ËĨçķŌÆs”5ÃŧL¸…ŽMD|^rĮōׅbÖŌAæx>aųG7å$åŧ=-Á÷6Ō8oĘūŪđjĒ6čˇAYčáķ âáÆ›?o[L{Ō‘q¤s`šÁbÃCĮ͜˹ŪtZ2žŧė„à F9¤QâąLđô‡F2s×åįäÃēAŨŧŪ”O9ÄSį.ĪÛg˛-ÉēēnĪīa÷!KžŽ—zc1ĸ|¯ˇ§ųĀÁz%H’Į{}\'ųĶÎeđ)ƒ6zšČąôëâōÄ1uįx$Ë ŋ;Ž9Xû DŨ“ųĀ‹ŠjęlņvO~ĘĻôŽŽē¸ķ2=Î}ڄ…˧"‰g-qIˉcæe ĮÆ𤍮Ÿō¨ŋˇÉ˧N^GÎ]ŪëÁĩņ~âyđ=yĮ ũ8¯“ËĐ×ÜĒæ¸ģœËR>&qNˇ!]ŋĻ ;&\K˙?ŋęjŊ—)ŗ m, Yķļp5ųëÕļ÷qįÁßÂu†Ŧ…#ÆÂ,bØAZe_7ÕÆ fg n×Zq !O8p+ŋsāCo'e:>Ä9>…ôGÖcQí™0ņ;ō7_Ų +õ+Ō,LYw õic­‚ūiĶ'YĢ ˙˛sΞØf…~Š/XԐį^CŪÛęeåĒŋ×Ųë串‹ŲßũšĘ_y¯Ö Ļ)Ϗų0yëįLdåfv2á7*ņœs¸aŌ<ŽsĻéņq^O|dh/ƒ;䨃a˛Nž]^/tāŌatz|.ßHāíA6Y/ôQđB†úQW÷]§į힚2ė׍úPŋî;Yį.á×@áŖžØ/5¨uG_x^Ļ–¤ą !4'\ ũ XēĘ[Y›pŌnŌÛĄģdÛîyŨOˇ“rĶqΗVW¤OĶ.\‡öílĮU? ß~û:.دU†Īāz´jcīŒj>øį@XēÆžÁ.^ˆkûíĖ’Žú+ōú5Ļ~ô#?OÖŲãŧ=Č%ŸI¤'äÖ_˛<ey?!ÎãŠįČŖ—+pR†žÅ:5w”įũߟČörđŅãõķ2—ô°_ÃböwĮ^ū<æ=™įÅéŦüFD4yž“–<’éÄķ°ĀOßĐČyœįq=Äsîņî{ē‡]Îo2/ĮËtš¤Īš;/ƒüî’eį:=ŨãđŊ|OKįMÆûšû^ļûŸŒKęôōđ9’˛é<11Ą+Q:o2ŋįu™\iÄņ Į˛ÄÎH~ŠŒA…eyy<āqŽ1×&é’mņ4tģĪ›l¯§šex:ž×ßeȃž§ŖyĨtūdštĪ‹K–ëa|/ĪëA\ōÜûĒį÷´dždŲžß]c§{ŲŽŲeYËęÍĶ4XĐ8čnå<öČđĢ—˛VHNŲ„áļRûŠąŋ¤ëęeā“æéøŽI2Íe\Îķޝ?:ÖLņŸ|ōūq–6ú,i|ÖŖŦ,ÔŲŖÃˇíÂ:Émvˆ}ĸį‹íÁÆņņžíuđxÂ^māpįíō¸d‘I†]ÆÛęú 'ëÁšįÅ'ŨŌ’:YĮŊęybÆđM-l"sŊI?y߸^·O\Ō-iaښŦsąú{3ĮG‹`(ī°î§F…ę‘ÜԁũƒuXŦíâšėzôĩWɁ&90xß!—q9XķÃĶ=œ ]ŌČīƒ$2^.žŸīú8÷|—ô9'įų“éÄ{˜sœË{ŌqIšūy?IÖÅķzžäsč_¯WR?įČáhųŨ!O:å$ņä'œ,Ëķ´Iëī-÷t;DÖԈ(,ô<Āys0ˆ3€ą ŸÁ™A<˙ä PWŅ>Ô%ãƒ2œ{|?÷ü¤ģķs÷=Ū폟Ž÷p!ųŌ2ž?F8Y&’'‰ IDATį.ƒīįIÅ:gĐfđf"¤ Î5u’–čĶõĸ-Ŧ‘äã­"ô ÃÉúËÚsęFų ŌN`ˆÃšĪš_×OŸįœÃu!—Ī%uÕ'ã˛õ]÷dzōÜķSįép:žŧéüäņx|ŋ“rųÚą$Į/iũ}IÆēŽēkÍZ]č(M4 đ8°Lā˜FáÁÎÏs/”Ŧ5 *->KrĐ-Vcũ&ɌŪNVęĢéŪ7ÜrEØûNcļÅuæëÄSīúúc.R’Ģ.—+­1ÛÕÜtĩÔö.iũŊšõ‹ÆĒČZc!)=B €ŋ2 ûāÅ čŽ83YsTÎ_œƒ#esp9üZrũzįkM2/ō5ú įčj W_¤loƒ÷Į|í >}:œKĻ)ÚÕ\tĻÛß\ęÕXõHöŲ%Ąŋ7V웓Mƒ6§ĢĄē! „€B …@ĶŧÆĨ QP! „€B aˆŦ5 7åB@! „@QY+ Ė*D! „€ C@ †[ĖÅ"Z>ÉđÅ_ÄßĻĢK?o˛ÖZkÅmú-}1j]8(M! „€X8´Á`áđŠŌÉ]Rüö#Ä\mĩÕōîäbwÕȑ#ãwļÖ_ũl‰MAÚŧnīŋ˙~üqžÛÔådŅĀęÉcŋüōK0`@ÔŌÔõ¤Ė™3gƏÔĢĖÂŖlB@! ˛Ȳ–…báOø6–ĩ•W^9/Qs­ČŒ3&~Έmō8'Vœß~ûíņ÷õøˆ*ĘÜb‹-âWÄI+„Ä$u‘gذaŅ’Yķ´Bôˇ)×…2 kü “'O+´žČ"ëz)“ëUW™…ęDW>×:ōéVŧB@,}hÍZ¯92_,÷oÎpî_0÷Ÿ#ŠŦĒķN"‹ yũ xÎqģíļ›~øáņ{K-wžîáú|—wŋ>ųŕîõsŋz ËÁĪÛÜsĪ=Y Õárî{™„_|ņÅHä8O§ģ\>ßķ,ŠŽ|ē/„€K7˛Ŧ-ÂõgzËä,üzsøáãy?‰ƒZŌ|‡°öNząžNØĶ:vė-@N>øāƒ8]ČoõmŧņÆņ÷‘đÁŖUjčĐĄņŖš´UW]5K4\÷Ë/ŋˇzbÅb펟Ŧd=ô1ĩܧO{īŊ÷rÖû›ožą7Ūx#’ā^ŊzŚz™¸.ČPūØącc÷Úk¯ØÎdŊ7Ųd“XoęBžÍ7ß<ęzūųį­˙ūQ>­ÃËA^N! „@CYkj +ž<ÎÔeuYuš kȒĮpĪā$íûīŋdâ°ŨvÛEYá8Ā~øá{ûíˇm=öˆY§OŸãöŨwßH2 eXæÜĄ—âĶŊ{÷H–°üôíÛ7Š@ĘøMƒ:($dų1æ\åAô C?ųÉOb/#é§e'ˆŋŖH9ËĪ?˙Ü6Ø`ƒˆƒËPöë¯ŋn{īŊwü}Ä˙üį?ÖģwīH°^yå•H2×YgØ,”ÅĮ{Ėh;._ŊI{õÕWmđāÁƒáÇgË% E š+­´’-ŋüōF9ÄĨëũŲgŸŲFmH"?ÂÍo}ĸƒ|äIëIe9! „€XDÖˆž“ ˙ŨĮēÔ ‹CÖķų Nĸ‚=z´Mž<9’…=zÄx,YČŧõÖ[Ņ?~|$‡?ÖĀą&&LˆHsŨXČ&NœhAØy5jTœzõŸš!OŽō°ŒQVŠ'Ÿ|ŌļÜrË,9Iļ=IŦh”…NŌ c”Ī›c ķvãSoČŪ‡~H5bžqãÆÅ|"ŦčÂ!OũqnąĖWoHeƒ'ųųMÎ#FD>âhžč'.]oęąá†Æë¸ãŽ;ÚĶO?‰%“<žßũXÁđĪ1ō°|! „€ ƒ€ČÚ •’eP†0čs0(§fdpd=Lœę ô8Ļ(!XȰĐ@˛ 7L‹be­v’ĪķāCX\¯[ī% ËÜSO=ÉŅ2Ë,Ct”§>äĄŪŽ‹´\åy;í´SüL Ķ~Lšöë׏,Y‡ÜÎ;īÉ2XĄ Yl$ Ū%œ—éuĻū”KŨŊø]ģvk͐GÖ į^g÷g˘ąN¤Ņ~H2į~PĪ—Ŧ‹ëu˜Ž7×Īë~\kōãO~ׁ~OŖ<9! „€ E@ ˆƒ2Žé=H¤€=yxéČâ<¯Ÿ{ ĐkŦגA 8X:wîĶøLÎI–8Î'Mšë€D]X§ }&ęE–2ˆÄ*ĢŦbLíQņųʃŒ‡r˜Be “ĩ]^ooų]â‰%Ŋ´ËSą´ßëH^ΉĮâæį„ÁŸzģå ũȐF ˇ„sáDŊąîa]cCy™âõúēīXq} hčC6Yop÷zSOĻV!¯Äą†<ėžuŽ7¨B@! ˆ@ŲŲgŸ}Iķ.ĩŲ|†,°Ž ‚äD ‚<‰0‹á!]X‹ îĐÅ Ī÷ÚÖ\s͘ÆZ(ĻęX G$rAúôĶOãú* ë¯Đ áúøãŖĩ ũ8ÂĢnŨēÅ<čcōX›Xc‰CŽƒtũcŅËUåņĮSĩC,kČŖG;Đ˙čŖFpÔą&ÂÅgKXķ†Īt/–3H ō×^{íHȨ;SĨ*>4ŒE‘ s@ˆ l´Ÿŧ腀QwęąJ×2 y‚˜’Ÿ5hX!oŦK#Ūõįē0 KŨÉ AËUo6ePĘG6U@Æ!nô׹Z°&ēuÍqōōä ! „€(}ˇP¤rnyLAĸXœÎĀ]—ÃĘ1Ųf›m"đÁ] ÎŨ‘Î@‰ĀšdĀķ>đĀqŗqČ&Éy\Kzœ˜¸ Ö)'›¤q`YĸN"ôp,q”aLĻšÕ b Irį:Šōé4ä\\“åēOĘSڅ^íŖĪ#Ã?â#dŠģן2ÉįĶnęčuJÖÛËņ4×īņøŽ¯}ûöķ•é˛ō…€B@, Zŗļ0hĨdüą^aíÁēÅ Ë1€3ø'­9>¨#Īš-tN;ŌP%͐‡Ŧ¸Kįõ:šLēŌē,ž—‡ž¤N¯2É4¯2žNį8,W.ī>ņžN‡­¤L2ŪËÅ÷˛\õöüđ9oŋĮ%u{>Î1"Œķz§ķÔĻÎ#ŞNūdy.'_! „@Ce­¨Ĩ­0,Žg x'Ž–œÁ›ŠRĻõÄ9ˆG–Ã-RäOģ¤>'ž—EõnŊIĻšĪë埔Kž'ķx>â¨ģËĨãIķtŌ¨?mņō’ōœģ|?§Œ´ŧ§šŒŸģŸĖ—<÷t|?wũČá¨ŗ“2d<Ũ¯+2Į9.Šp2=FØąqŸ89! „€ A`žIĻ!š—ō<>(ŗf O.˛Dirā°ųN:ÎÜCÜqžLķxÖrá< ßĪ]&I*<ÎeÜw^Ž—ÖGØe<Í}×A[Ōeē>—!OŌyēû.—”IÆ%ëáyÜ÷<Éz‘–L§ŽžžŦ‹_t¤ķ¸ŧëOę#.ŠĮeŨ÷<ō…€B@4‘ĩ† ō0§‰‰‡“*}Ā&ÍâÜšü4đ0~2a?ĐCZōpŨøI9OęJĮ!ŸtšdI'žöx:žĮå*3—Nä“å%ĪŊ ĪGš—•N#\_^×ãyŊî^oō{ŽË}Ī›,ßãrųŽŗPų\:'„€BĀYs$Âg Į1•–ÜŲš*Z¤¨ãŌ"§F ! „€XLĖûvÁbĒ€ŠB@! „€ȏ€ČZ~l”"„€B@ÅŽ€ČÚbŋĒ€B@! ō# ˛–Ĩ! „€B`ą# ˛ļØ/* „€B@üˆŦåĮF)B@! „€Xė´ēõÖ[{%T! „@>øÅAƒŲę̝Eãûuū Ŋ‘#GÚK/Ŋ7_ųŠB@,nJ>účŖ ?ŧ͏dķÖū[ÜSųB@¨ŦŦ´ĄC‡ÆßÖ8p`”†ļäķíũ÷ߡO>ųÄ6Úh#}/1‹ĒN„€hđ|ãE•ßįg%[ÁÁMIČ÷“IÍĄōǃK<›6ÜpCûėŗĪlʔ)ļũöÛĮgÄka›5^J_y啨 ĸÆOÅ-ŒžĨī ¨ÅB@ž{ÎŅJ›eföėŲŅĒÆpË ! šĢ䁅íË/ŋ4žWģîēĢņ›ŧ¸Bˆ–ĩYŗfŲĶO? ZŸ>}ĸE-û0œûâÚÚŽ:! ø•$Œhņ…rĈĻ@!jXÕüĄ&˜„€‹&ņ|ōgԘ1clôčŅļË.ģXĪž=cë"lūL›8qĸ=ķĖ3ļĘ*ĢØĘ+¯ßZyrŸˇX9! „@s@ŸI<Ÿ˜ -5jT†‡ ¯Wķ[s¨Ŧę „ĀŌ‹Ī"ČĪ'NUVVۄ‰?Ø#>ĩmļŲÆÖXcR.ÂæĪ36 2ÄúŽĩŽõęšl°¨Õžąú›krĘaéE\-B š ĀķŒËZ|Ąüūûī#YãĄæGsŠŦę!„ĀŌ‰€?‹đ!jLƒN1ÛžŸ4ÛZ—ÕXIÕ ûâŗáÖŋKo< Ÿ;ßHСßz–iÕÉ*ĢKm…m­[§ļq”‡!‡?s‘>×%_!P ’ĪŖHÖ&Mš”ņІäŽ•QB@|đ<âŲ„EĨc'U؛ŸOŗN­kŦSÛëÖĄÚÚØûüķĪŦ[ˇnŲŽ‚ĮF‚É“'[ŋ~ũ‚d[›:ĢĖfĖ.ĩ•ĨļÅÚ]lÅíâC_Ėëųå ! 'NØâŗięÔŠ‘Ŧ-Î Šl! „@.| tō´9vÛŗ“ŦuI•uk_më,_iËt¨]c ™ûúë¯ãÆÖąuėØŅfΜ×§ą0—iŌøfĻ&Ī*ĩĪÆĩļ)åeV™ieĮīÜÖéŌ&ZÖ´f-×Pœ‹HÖĻM›6ož`q×Hå ! æ"āüĢúÁžúžÂē´ĢļÁkÍąÕzTe7DaãK:ŒÍ66°‰`…V˜oz“‡Ū¨I­ėųmlZE™­šB;;˙eŗV56u?! š#ÚūÔ¯Šę$„@$YĀ0ėÛ9öæ—U6-L_ŽŧLÆÖ땉ä*žmÎŨÅÉtÄŦoßžöÄOD߉ZRŽsōŖ}čE?NkÕ" ú'„@3D@d­^UIZ W÷ž6ÃĒÂ' k2%ļcßęųŦ`i"ÖŊ{wÛrË- Ÿ´t:„Œ8ô Ŋč'NN!Đ\ĐĒš^ÕK,Åøf§Š3ĢmøˇaĘ3`ąųęUÖą]­, s"Fš§'ãü=čC/ú)į寀ū ! š "kÍäB¨B@,ˆĀ›#ʃŒøđ“S+C­j/'ei‚VWēë¨ÕWõSŽœB š"ĐĒšVLõB`éF+ר‰•„6e™°Š ÆJKš p2?|3BŌ2æiNčbĻš˙ˆCzįT—ÄrČK9! „@sC Ád­|NM˜>˜cÃGĪąŅ?TÚôōđĨqí+mn×WõK0=Š*Öŋ[û°Š`.‚h9a#‚Ed+YK0dqčëôNœQb/~\a_Žûm1M˙„€‹Š@YxČ,ÛĨÔzuieŊē–Ųf}څpYƒÔ.4Y?ĩĘî r_>ËĘįˆ5ueB`ĄčÔnūgM.Â)K“ĩt!NÔ<žsĐ;q†…5k™pÔZņˇ˛‘Š“zÉ@3}üŊvË3Sį#iĖ,×ŲŦK{ŪpSÚB@4Ģ.S?v›V•´°ĨĶŌá4Q#}Í^f­ë} Ļ5),„€¨f§Î2›ŽÚíf¯~VcvčjGl×%̤>ÂVRßGqŦ]ņßIöüGĄÄšnÃUÍļ_ËŦß fíۈĨ9.ō…€B@!Dā›I{ųsŗ×ŋ4̘kÄŧ~ģđ€ ,áHæķķzÉ‚÷ž:Ãî|ņĮ˜§g°ĸũ|[Hššƒ(_! „€õ!0îĮŒ]÷ŦŲ÷ĩ”ĘÎÜĢģížQ‡ú˛Yd ŗÜGaÁ9wąđÖl…ŽfŋŪˇÄ:ȒV/°B@! „@YaŊ˙˙ũ7c?„õ˛ĖLŪzb¯¸Á—œĨå į]­áķ§Ŋ´׎ĩŲ™ģ–ZĮļMgQã™+**ü5qÖ¯´k×.ūhsŦ´ū ! „€B !:~PÆŽxŦ&î`Ķæi{tĶĄų[N˛æDmâUöƈŠØÄ­û–Øō]įm6đv#›Oy:-FG2nöėŲ6gÎkÛļv—„§šŸ,ĶĪŨ§äÅīØącŒÎ•/]×´ŒëÃO§ĨÚd”iŧŌaáˇ`›‡Ū‚iÂoÁgM.LÃtZ:Ŧūˇ`sėra#üÔ˙4~ÎoŦâžĀĀ4zôhûūûīmŌ¤I6cÆ ëÔŠ“õčŅ#ū^ņ*ĢŦbíÛˇ_€Oô_ąÄ6ZĩÆ>øÖâ×5ŽÜÉÚˇ-[@ÎīɜdÍßū˛"ûí´Ö)ÍIĘŌĪķâ§ĶŌá\2ļÛnģÍ~øáÃŌVVVf­ZĩĘ~W p8p~^UUeË,ŗŒüņYĸ—Kw!åGÅs˙ĨåĶá\ešŋ˛˛ŌFŽ/(uwŨīŊ÷ž=účŖļá†Ú~ûí—T—•IFzždįwŨu—}ũõ×vÄGÄĩΧ7_ūožų&âŪĢW/kŨ:˜UƒË%›+. 'äĮŽkŸūyė¸ũúõķäč’ß3ä’Í—O>—lŽ8å¯E M:ŒTŽ8á'ürõ\}%WœúúĪ’ŌƍgŸ~úi$kŪoņ§OŸQŖFؘ1clu։ã_R†ķAũJYĢĩŽąälŗžáŗy\^˛â›j¸ÖánĢ-[œ_Ļ‚ A2vÚi§Hֆ b'NŒ¤4uãÜ}ÎųáfO¯ëđ͟ūÔŪx㍨‡Ģ­ļšíąĮö“ŸüÄV\qÅl|SĀž¯¸â {å•W"§œ6mÚØĢ¯ž į—_~i÷Üs•——Ûūûīßāj<÷Üsą;î¸Ŗ­ĩÖZV¨Ū?˙ųĪöØcŲˇßēXūöˇŋĩC=´ÁuáūęWŋ˛8ĀŽžúęëQF! „€ÍÆō÷ß?–ęĒV7Æķ7ŪxÂÖ%Œ`5ËđÅŗmĶđŅÜ|üĨN˛6aZ-9ęfķ)¨Ģ’ IÃJÆÚŗ)SĻØI'dË-ˇ\$7:tˆŌÜĸ†Ÿt…5oĮ AƒlæĖ™öÁØM7Ũ‡D5ĩƒŦ<ņÄ6`Ā;ōČ#ŖÅéŲgŸmōēQΓᅭW2oú<Nę}úé§#]ģvĩ /ŧ0Ž|æ™g" Η'™?ßųÚk¯mĮsŒm°Á Õ&ŪJîžûnëŌĨ‹~úéųÔ+^! „@Ņ€|aQcˇŪzëŲđáÃ(ßã‘CŖSĸî:„ĩkˇO­ą3”_kĶäk kN€đ'MŸKÖ:Ė?OKA(tÅŦd\Žķô)“ųŊLâÜbÆFë¯ŋ>ZŲ:č 8/ŒE ÜAÜ(›9cäŊšĘ÷2<ī‰'žh›mļ™=˙üķv '¤ ĶŽ…äĪW/ĮĶĶēŪ|ķͨ˙7ŋųMœęDîĸ‹.ʖOR˙’ē<ÉãÜ'>yîrŸ {œ_?¯ķÛoŋÅ<đĀ8ĨLüąĮ›S¯—å~Rgúœ7ЁFŨūĪķšŸÎC<ÖĀŋ˙ũīļŨvÛyļŦīųÜĪ•ßە”qįžōĪßōá"üjp|ÜW˙Q˙)¤/čūi÷Ö2Ÿ}‚1ķ„ß}÷ų%ŽŗuëŽģn Cägũ3]ŪWđģ~õ}øœ?Ųéc>iI—snAŽęš?öÉO$1y „0„‰)ŧ^x!üô9$+™—sĪīžërËŲũ÷ßo˙ûß˙Œĩ]Ë/ŋŧõėŲ3ģKBi›:uj<˜fsŊ¤ū\įąđđ4Ŧ=¸YŗfވŖėŨwßŨî¸ãŽ(Cúyį§K?üđÃG™LŸ2U9~üøHn6ŨtSƒ„aąÃĄ+]> qīžûîiÄģ<įÉ}öŲĮ˜Ę¤NŽŸypHæFmdÛnģ­]uÕUY XR‡ŸģŸ,Ããđ9|c‹ĩƒīy톔IįÜmˇŨėÅ_Œ˛XãĀ„ë}ÁDŗ/X`I$ūškŽÉęLĘBVÁnįwļ—^z)Ę|÷ŨwvéĨ—RtĊü¯ŊöZ6ŋ×É}ęVČyēM…äIĘ(˙ü}:‰M!įÂOø%īÕBúLRFũGũ§9ôÖaģcŧüøã bÆr*>aâ“7ō-P˙šŠjæō.'lsŖŗŪ–5OŠ%lsCsɚ§%},Q,6lX2zžķūũûg+8_B*@™ncG(Ö2HÉ-ˇÜ’eœ2dØšš4Yķø|>ō˙üį?cōÖ[omLĩâØŅÁ‚xÖĘ9°°bâ uÄQ>a֛ũėg?‹°đĄÅúŦ\nīŊ÷ŽCĻ\GŒ§Ų5’vā‰ĩoÍ5×4Ļ!{íĩ—uîÜŲ¯NDũ!SšˇŪzk$´ĮwÜ|Ǎ̎ÁŌaßsĪ=ã4(667PGÚâŽļCNépŊ{÷6Ŧ“Ŧ/„PŖ“ˇ 0šė˛ËâųJ+­ãüņĮšķ˛]BÆuĮ¯žúĘN>ųdƒCjąÆQDR¸Â +dķ{ä ! „€(&>ũéebQs‚æ>D-iiC–|>z^Ģĩ3NQģ?Ÿ:ÉIÖj‰Úŧõ`5ÕaˇBbú1ĨÃēuë,]iĮ@ Ē+ŋįÁšãdÍãŧ.¤A ō9ˆéČÕUr8ČÖÖĩË/ŋ<›ĪËĄ.ŽËķš~‡8îģīžqēđÎ;ī´?üáŅŌ„e.—ƒ\Qæíˇßn>ø`´ž1ũŠõ įeSˇũë_ŅdĘŇŧą)9,~\t!„ Bƌ˙üį?q÷'zŌõuŊ#¯;rIˇÚjĢŲ_˙úW;įœs"šb:ô¨ŖŽŠaH9uĻŦUW]5nBđ)ct ĶËdÖVŸ›ĪUļËBô!…āAd*yˇÚjĢHĐØė€é˜vz9ņD˙„€B@,ø™qbŗV<¯§“ |ķ|ԉ8œ|)â ­8tzžtų„Ų8ĩņĘ+¯ŒÖģĶN;-ZÆø\¤)Sô¸å a:î“O>1ōēÃZååĻëëzÁÕe<_ŌĮšÅĸūßũîw†…í˙øGŧgžyfļ\ˆ8¤—ÉŽ[Ž—“Ģl—Ųψß~ûííŪ{īß@ŖmO=õTÁÅ ÃrĄã8účŖíC™ŧŦ0%ČuûË_ū’ĩŌąæŒ2““ŦåžOqŽŸŲprƒäƒĒ ë \éŠĐ¤¯ž“Ō=ėéÉ<ųÎYwuØa‡EkÖ%—\’ĩęųô›pLÍą3ąąŽĩr8Ļ= ukŦąFÅbéLé]ˇ…ęLËaÅôŠ\>Ŗ‚%qõÕWbXžšÂųBLĻ=qn!MŋÁ4EŲŌ)„€B XŪåŽĩØž™Ā-iIÂFēģd>+ÔĪ; Z¨‚¤$‡õLˆPŽyפ|úōŦaUķiĪ4CŽÃãā‘7IāŌús…YåĸĀô*ĻāpėjŊÄnG'pšt,L čY#Įį,&L˜×~‘ŸŠÅBŨÁ.ÂŪŲIÉT"Ē6°SĶ sĄú\ŽŦ;Üd“Mâß|Á7áØ)Ę'T°˛ŠāŒ3ΈaÖÎa‰c7gCVM,j|8—~Ūl&Āq3Ũ‹åܘV—B@!°¸`â+|׍ î{ l5'ĪĸŒ_JÖ¨$Öĸ>}úd?á/ćhAÔ°āđaV’“2ˆYŌjæņčåÜÁ€ķ…q_ūō—†eÅõ|’rÂ:6,HšsĪ=4˛C IDAT7n:tč¨Î) ņ`-?Š…c=$3jĄŽ5læŗc”ÂQNbT¨>—ƒx=üđÃqŖqXFŲ<ÁĪxᰜŪxãq=›8 †guVƒÉģ]Ī?˙ü8íMßaŗ…›ŠąÎBĻéôü׉ˇrB@! Ŧyg†‹/@0ķä„,]‡Ÿ īŋ{ž–+$\>1oÛgČÁ`ī–Ē î™bŸŒ­ą>=ĢíŒëŪ`PHaõÉ@Øõˆ5Ō•ļĖ9q‹›§ĪôkX¤žė˛ËÖWTAéX™ØŲØXS‹^čäɓßƒesÅ1=IgH5†õõ‚ŧ-ĐfŸöĖU?,yLOBč‚›,ŪyįģîēëlķÍ7ģ[iƒ_Ķd™\_Ŧ”•+=)Ģs! „€Å@€Ī{1ĶʙĪ1ÎCÔōM^ûB;ûrb™õ_ąÔŽ<ĸ{4ŧ0–§ĮēFˇŦåĢp!ņ,MX×ŌMįO§3 c]ZTō“,Į-<ɸÆ8g*Gc86ø'2CÖ,Ŧ]õ9ž÷ÆŅŽëƇķ9Ž5DNN! „@sA†A‡ņ ↁƒã(ütČÚĸXÔŧ­ÍŠŦÁ&Ķ;JŊĸō[L5ûįSZVËÔ! „€XZ`[-|Ŗ”Ŗ)]ŗ"kMŲPén^0 *'„€B@ԏ@ÎOwԟMB@! „€Å@@d­(Ģ ! „€B@4‘ĩ§lB@! „€(­Y›4iRøxë‹Å¨ĘB@! „ĀRĀ¤ōB;ë˙ĩ§‚Č?˙sî1į.ĀŠ‘B@! „€(gŪ9ŪĻ|3ģŪĸ4 Z/DB@! „ĀâC@dmņa¯’…€B@!P/"kõB$! „€B@,>DÖö*Y! „€õ" ˛V/DB@! „ĀâC@dmņa¯’…€B@!P/"kõB$! „€B@,>DÖö*Y! „€õ" ˛V/DB@! „ĀâC  _0X|Õ[´’kjjėŗĪ>ŗ#F?™ÕēukËd2ņ@sIII,€8…[w\Ujee ÷R.Īå;Úā]zÛOO[ĪÚĩkûƒū ! KÍÜmŽãH‹%kÜO=õ”•––Ú~ûígmÛļmė{Núš!km9ŅV[Ž‹•"˙c-3ĩžAĖp˛ŌnVūUUglüwĶíģ†Ú?ÁŽģcpč/-öÖ¨@˙…€(:—Šyƒ lŽãČ™ Ôėœéã?ļŲŗgÛ{ėamÚ´‰•Ā’V;ˆ3× ĪÃĸ%ā3aŽYyĻÔfՔØ,ü@ÖĘÃQØáYø!mfđËkJCzŠuXž‹|ږ6šC+ģë¯-žNĢR…€hŅh\Z2ÆŨæ8Ž´HķAuuĩ 6ĖÖ_}ãܧ9KKé(Ĩ1 1!^~ËÂaōˌM)¯Ž×5\îč×>ũ1Š•ØKO˙Īļßeī`W Öĩđ¯Ļ&ŦkÁÂüōʰK_{đö7íØS„éÔ˛=p¨qB@KKÎxÛĮ‘F'kS§NĩYŗf؊+Žī‚īŋ˙Ūîŋ˙~;ãŒ3 ž+Ōy~˙ûßÛ)§œb]ģv-H7EeeĨõęÕËĒǏk²2xķ7—¨š˛dxܸqöĀØi§æÉuĘ#”Ė_WøŪ{īĩūũûۆn˜%uɓ†ËĨLN>ųäˆIŽt'¨ųōˇÔôé•›ŦkĖw–†k ūÜPûčŨ!vÉŲ'Úīnén6Ų&^ƒš ZX[e`lŗCŪŽ=ģØ×ã!q5"kt9! E—¨€žķĩ†ŋM‰GsGuô¸ãŽŗ}öŲĮ?üpÛd“M"ĻãĮˇÛnģÍņ-ČOįšūúëmúôéåE˛áæ¨ŽŽŠƒo&XOjĒkbą×_=öa:æâp4.xĢV­ĸĪyYØd´$yŊj'ÆĖžxâ ÛyįÃBķ@îjj§MÉįé.ô1ĮÂWõ—NO‡§2ÅēšîŨģĮ<‘@ũč.$Z_:\M]u—N_ôj3&0ąĒ…ž§îŋĶ&ŒmmÚļ ū{ėūÛmÃOą@ák§B‘ŸUYc•a­[iûÖŲëÅۛœƒĀŖ>jĢŽējœš¸öÚkí˙øGã(Nhaų˛ož™ˆiÜĶģîē˞{î9Ã/Ô5d\rŨKËsüž{îą^xÁūvûíŲŲ0XíoŽãHŖYÖXßķíˇßFÂĀ:tĀË:nJŪvlcÆŒÉÆ_yå•ļŅFŲ`īŋ˙~6>ßÉ!‡bÃúdmΜ9,Í o HąšoE™šáW_}ÕļÚjĢö7ĻoŧŅÖ_o=ûéOjŸ~úi”˙w˜ĨžČˇĪ^{ŲŨwßm´ŨwßŨƄöûÛ2·zĮwŒōąŧ@$ŋûî;ÛsĪ=c›˙Ępų›nēÉvÛuWÛrË-íĸ‹.Ę֏‡Â^Ąœ­ˇŪÚŽžęĒŦ<7˙{īŧcƒ ˛M7ŨÔ^|ņÅl{(+–—§Ŋ-9}N°Ž•Īa*´&ú€q :čģņŠ/ė†šĮŸd3+̃\ÆfëڔŠ›0ŊŌÆL L/59! š>Ą´Î:ëØ_| 8á„lûíˇĪąūķŸŲB™É žņį Žg×ņĮoÛlŗ 0Ā~üņĮŦŧŸđŠĻƒ:ȃļųæ›Ûc=ŸĄäāx†īžš”͎o_ûÉO~ãH{ë­ˇæĶņ‡?ü!ĘąDįwŋû=˙üķą_~ųĨŊōĘ+vä‘G’­^WȸtJXŪ‚ņ€gūŋūõ¯ės1‰ø-B{Ā#×sœĨ1ģ$ōú8°íļÛØ2Vŧō‚ÛąĮ—äėž–p衇Dų›ÃXô§?ũ)Ģ˙ˆ0SƘK˙î dŠņšņüŽ;î°îģ/Τí˛Ë.q|c\6mZŧNXPO˙å/mėØą1žq“qņĒ0ž1Ž Ūa‡Ø70j0“58ŒĄĖÔř¤PˇsĩßÛëãjCÃÍqi4ËÚf›mf'žxĸmˇŨvvūųįÛŲgŸ?›Aī…œ}õÕWöN Ŧ=ģ/\ÜsÎ9'^n"Ū‚0]˙ú×ŋŽ7U]=ūōË/ĪŽ‡ĢKŽOv`Ѝ(¤mv<6’h)áŗ Ŧ^39j¤-ˇÜr‘ÔÍ Ä‹ Ͱmƒæ…į_°k¯ģÖ.ģė2ģųæ[lâĉ1múôi6yō{;´gĀËÜãvá…Ų=áÆĸsņ.€ūĮúčŖHÂ.ŊôŌ8>UTTÄĖŨ”)SÂ÷ÛŲ +ŦĮ7–θeĩҌ]…¸BÆĨŖv´­ĩöZq“Ü™gži{îą§UĖŽˆdæå—_ąË,žW5aiPí¸’|Î˙,ä]{­÷ŖaFŪ=B^Ō1¤ŧüōËöß˙>d]:wŽÄmƌéöä“OŲ¸ĐÎqbøédMˇ &ÄqĐõC´h?aÎĮYÚôŨwcŒq ˛ũä“OÆĨD<đo;6\Ã{īģ×:uę>Ÿõt;o˛;īŧĶN=õ”:Į͓O>)ĖĖŊa7\CĮž}ö™x]ėqžŌĄa9K¨_˛Ŋ>Ž7ö¸ÖĮ‘FŗŦŅQ˙ī˙ūĪ|đÁxcĀŧaˇ8Č„k[ŋ~ũâ'ž5\Üp_|q\Ô{į&ŠË­ŊöÚÖ9tļúooXû¸9đãųÜpi)áR+ L~§vʆ!x={ö oY‡Zûííāƒļ×^{-ԓM ĩ›Č@î‚ .°Ž;Å73Hå‘NĮâ͑ˇ/üč[iĨ•­OŸ>‘” 2$ĻūnėwņaB]'LēBũxŗŧøâ_Ų˙ū÷ˆĩjŨ*Ąß"ĻÔaíĩûE‰ŧ—īí[ÚÂmvs1ŽŦ.‰~įajĶŲ᜸Ēč[ˆ/ĩ`„ŗŲá¨.)ŗļ!‰>Š[ßíĨt!Đ °ŠA˜IđMgkrQƒ9Éjßž}|>ōL^æyŽáxžB&Ž:ę¨hÅá™ZˆÃRÄŗ‹„Ãcē bDÆ_Ļâ2õų]ēt1ÚPˆ+d\ę͎O$¤´ÂČsą“œcŽ9Ú>úA\æããJōšß—ŧ˜‘×ĮęÆēėnŨēF}O?ũ´íŊ÷>Pu4Ę[mĩÕÂøVûAņä8į÷q„4Žá*ĢŦĻŗ{Įz`x?â&OžõCŪĀųōË/‹ma ­oܤ|ô{{ÖY§ü˜ũi§ŸĮˇ˛˛VŲöx}ŧ}nŽãHŖ› Ŧ[ãĻ€|ÁŽé î’7‰õ x`LÆtí7ĨË7ÔĮ܌.'j^Žûč…(rs˛XyÂøČx˜ü´Îˆ>O#váã" é~÷Ũwmã7Ά‘!/:\†8ŨĮC s?4(Īë͍›ôŠ+Ž0Ļky+tĮ‡~ŅŁnōāģŖ=K[¸}›ëÔļˆh„>{ŋ}<ä‘ÚpˆīŗÉ`¸×ąņ}­&ˇęę°{4<,fÎŽļ˛mBųB@4"|`Í5×ĖjÄâÃԘķÎ;/>ហáKØß˙ū÷hųÂpôŅGGÂÅŗõškމŗŦ7fZ}ÎĮ äķ0‡į%ĪŪäķ9-ŗ¨at×5.AV øãΟëŦébZ”Ų›sĪ=7ÎːîĪyōîŋ˙ūÁ‚uj6/呎ã{Ŗf‰žßĮ&|pr8§„“įÉ0ņäķļA¨÷ŨwßÚåEĄ|ÆOä9ō›^ގ"ÍLЍz|Ĩ¯)x}cŖÂŋĻ7Įq¤ŅČ;ų´oD\üŪŊ{Gfė Ļ}æß™Ŋųæ›#iI§į 3 č>WēĮŅ1ščÉNFŠĮŧ=Ļđ•VZ)†ščČŗ+ņ$,ot0ŌčPÉÎ–ė°¤y˜NļÛnģeÃ@š_ũuԃ™ŸˇI,ŽL¯2—ĪÉöņfĮ\;å° –‡¤2ëúŅĮščFįíŖ=K[¸CëđĀmWûPqŗ1xlŧÃŪöęŊ´“ÆYģŽŨėĐķ˙bƒ ˆ*Ãæ‚ǰ+¸´´Æ:ļ ×PkÖbŋŅ?!ĐÔ0ŗ€U k S’<û˜‘ņ5G?˙ųĪã`Œ5îč@Öx>ō‚ËssÔ¨QqJޞ–¯č=zt´ ų3ŲeÂT#ÆÜįŸn|v‰)ZÆÜQgf„ zõšúÆ%Ļ™ea=KƒĐ͸âŗTÄÆ ‚EįĪyĪ fė´õŧČã+#g}ˑ°T˛>˛˜ #ŊG[ÎyäãCžŒ}„Ņåc*úpÄãHã Ė43u`ŠÛåxû9>aS 3ŨũÃ?dõą$‰8ϘYĶ6lØ0Û ,;ōö6å8×Į‘F#k,NüÕ¯~×`A‚`˙˜EųMÎ|ļĖį>°ÂņíąÉ“'ĮŸˆĘ'O< ųYW@g¨ËņÖā Ÿį˜s!ī@ÄqŅä͍…Ē˜ry$Ū;#įčCWŽŽŠĖžLīz:qä‡Ôr“}øá‡ŅĸĄÅŅÖûņ6ÁĸLÚˆŠš…Ÿäƒŧ]xá…Y}^6úŊmɲĸŌĨđ_Įļ5Á˛Ö&b.O¸Fá8tîĐĶ9íJģã7GÛū§˛îqĨ°îŖv­;|!leeUÖiN+ëÜiž%x)„PMEC€Ú̝ž:ސ.ž›ŒŠ5ÖX#ޟbį(Žg"ã ņ<Ųpļ¨ŽY „āŋ˙ũoTG= 2I60VšÃČĀw.؜p{XlĪ:6 °é >W߸´•ĒõÂ7ęĀÚ=օąŅlõÕWëųĀ,9nQnŽŧŦņ&?ãōž}œ35ʆ7ʂ¤‡Eėoû[œ†Ļ­¤1Ɛ†Îk<ė㎏„Yä>–.1UĖfŧēÆMĘb6¤‘5ĪK.š$ļ™kÍ"Ę,†kŽãHIXđYk~™‹Ŧ+ŋāž)öÉØĐģ­]sĖrõbä ;éP\¸B°…āÁĸÕQ"Ŧžõqč¤ķĐÉŧNœãxųeØŠQÄyÛũ-‰:ą>ÎķĘčGŽĄbļÅyynDÖ;ķtvģ`$ėįäO×Ãå ­ĪŌ$ŨÛUļb¯€ač~aYatîĶŅųëÕļ÷qįÅôp˙×ļ°´2l ģGĢėëīĻÚŸ}bWšZ|x9vĩšô_Ļ@€ čŒLŅuėØ1Ãŗ‘t ÜČca[‡5‰ÍXŽĐĮŗ>}ŋ{Ŋr•ƒ¨Đ1kaÆ%d)—ą<WÁƒēV?œ×5=0^€%c8Xú—ōÉcÁÂh€rŠ>âŖŌú&˘ĮõJb[_~fšĀ•ú’—öp­ķÕŋ>} I/æ8ræãmØ7ŗ­˙ŠĨvåŨ#!uR›ėwJSykHŽGHT×9dĒĐN_—Ō¸ tl÷ķFDÜôėÛ},zXą<ėÕ700Ũę:ņ==-Ÿ3u‰ų ]2RuLëKĻ“×Ķũfķpē<…kYøtī~… {XįČZč ĩ„m.iãZ}áyáB֒´°g$ŧ˜„ķā‡įšĩ-oemÂI׆>´nļ_ċ¨B@4 c‡ģ4Q#ž—ŨE%jŽß}/ßÃîį‹'}aÆ,žŅ…ŽK<Įxū“'9^y啺ãBžį~rĄžšÆ˙ûßņķXîØ Ë&Ļ“ōÔ7ÎW^.ũäËU˙Bô1#įųņ}ükHųä¯Ģ~ųŌ›ã8Ō¨d†7ĮÍÎ Íú0֝ššÖ/ļ×1ŊŨ:ŪĐ0ßJËåĒĪu)‚uPráqļ[ knØõXՒįҜ iKĩŪBüÂVîY5߀áøËB å QņU…ŽKšžkÉú5F:Ëkv Ko˜úeĘKŽģÆĐīēđ—D}Íqi‘dŽĮÚ66.đ}7ÖĨaeKžą%;“Î[í;†Ũœ4'XË d‘”Ím^ōŧ$|žWV~Á`Nĩ1Ú>{éy›ųŨ'vxX/“|xÍÍ.O„ãßM+–knãVKˇ\2Ũ(7æ8Ž´H˛“Į”ĘæžûÆĒÕįuD-ˆ–X܇…>CßIŋ .˜C1B@ÂиT8VKĒdSŽ#-’ŦqĄõs|ř-Ø|ŲįŽ—ÔŽ z7 uåUšB š#Pt˛vÍ5רgœąČ¸đļŋņÆ×̧1ĘÛ}÷Ũmøđá9ÉZ]iÉĘ]rÉ%ļúęĢ'ŖâŧöÂļaQʛ¯đ:-ŗ:𧤅D`QúnŽĸV^yeëŪŊģõęÕ˖[nšŦȰaÃlŋũöŗ1cÆØŅGmŋøÅ/˛in18p Í˜1Ã<ėųtzē|! „Ā’Œ@QÉoĶO=õ”~øáYĖŪ~ûmÛjĢ­ŦgĪžļîēëÚūퟘvũõ×ÛÚk¯m÷ÜsmģíļļõÖ[ÛŊ÷ŪĶ N—_~šaēôŌKãņđÃguúIēŧ9sæØúë¯oëŦŗN|s‡ø0hüå/‰Y˜jdŖČnģífŸ|ōIŒīŌĨ‹ĩoßŪžx≸‰‚úÜwß}õĻ!0dȐhA žååå1˙چēę‚Ū|åyü\Iã&›lbšĻV—TĖÎ<ķˈķūûī vĐAÅđ{ėÃX5ˇÜrKëĐĄƒm°ÁļË.ģØgŸ}ĶžūyÛu×] "@˙Øwß}c|}˙ōõ]ōåĶÉu _0Āf͚eX‘°0]vŲeõ-ŗųڐ¯.Ü[ƒ ˛e—]ÖĀfûíˇåđÁņžË—FeŧĪ4´īækĐ 7܇õ÷ŋ˙ŊuíÚ5+vÛmˇŲvÛmgĪ<ķŒŊđ vá…fĶN8á=^æ‹/žČę[”64¤< ۈ3ôf‚å"bHIļ>~˛¤bÆu]e•U2\C˜¯ļÚjҧ?Ķ¯Žžú樝ąĪ„]<™W^y%Ęr]ô[<§¯íšįžņŧŽõõŨētR>ũzʔ)đžøâ‹3ÁR\WqņžĖ׆ēęH\&Ķ˜?ÂL ^™›ož9Ŧe™ēŌŧ2‹Ōw]GĄū{īŊ¯Ķa‡–}$ķ>ōČ#™Î;GˏG儀ÅD`äȑqü„ņü†Á]ÂrĻø į9Ŧū1NTo"~Ī‚oĄ—ņ –äeœ[:ĸŠČZ°"d‚E!ž. ōt§vZ†)yōÉ'ŗÉW^ye؈œUW]5›–>ÉUžË„58™Ī?˙܃Y˙Ã?˜{`Ŋˆä*XŸ˛iéēüņĖ„7˙˜^Wš+ŒųČņ mCCË k3ÁRĢšü&Ũ’ŽŲoûÛĖyį›Dß:ëŦŗâų<ÉQ˛­ ü\°Úd‚Ĩ-ŦŽâƒõ&)šķŧžž[ŸNŽ÷ÃQG•S:˛Ž6ÔUP°¨EuÁ’œ ÆĖË/ŋœ9âˆ#2uĨ%ËoHßMæ_˜sŽ ÷y°nGríyƒU:Ų|ã72kŦąFæĢ¯žō$ųB@ĸ °8ÉZŅĻAīŧķN;øāƒ­S§NY#$Ķ‚LĪ$áät!ĶŖîXãÂwNÜÕĩ8?Wyž?Ŋ~,\i;ōČ#mŗÍ6‹ĶúĶŸâš˛džt]>účŖlr]iYĄ' mCCË –‰X žSRR2_–t˘ VO Vã#Í'tRl_Ž~ļĪ>ûÄ5Sp­Ã ‚•••ŲwÜa;í´Ķ|¸ä äŌ™ėģõéėŅŖGüNĶÎéõW…–įm¨¯.I}mÛļßŖ´Ģ+--K¸Žž›Kžž¸`aˇnŨēŲųįŸoÁĘnˇŪzk6KģvíėîģīŽĶŸ\ãđĸ–M͉B Ĩ#P˛Æf€›nēÉ´â|x˛^†‡˛¯š8qb| 'Ë?üáqį$-LßX˜"‰:øëW8pŦ/c2._y11ĪŋqãÆÅ p@$” iĻpąD˛d=ëJKëņđĸ´Ą!åyššü–€k 7ß|ķHž Ĩaē;6•uZŦĪ{÷Ũwc8LíŲ駟n_ũu6=X+-Xæ,X°âZH֓Õåęëģ”™O'ëįXkÉGY{õŗŸũ,ĖēĘĢĢ õÕĨ.Ŋ MÆŌõ\IDATĢĢī6Tg˜ĻļC9Ä|đAc“Kú#Û\[k )_N!°´ P˛ņa°Á2–t,´æmúä“OŽ‹Y Ž5„ļ;,`XģØ p…āžÆdj‡i‘h sČ1)_y Ölb€ø‘¯˙ūq!3™VXaÛqĮmÍ5×´°ö)žl`8įœsėöÛoˇ?ū8Zĸ¨2ũúõ‹Ÿ Š+ Ŋ´›rXÎĻÎ}ôQ’ĸ[Ø64´ŧˇŪz+nŠĀjQQQ­Î_˙ú׹-3 ÁE]-eąaá_X_¯!›Ø@Âĸ{ŦHÄãøL ÷Y€gˇ2ęrõõŨ|:zčĄHBÂrƒ¸ië&›UN=õÔēŠĢŗ uÕ%LĮ"ĘesJX#}ņüņy͏WÚwëlH‰×^{­a-d(÷"a9! „€0+‰ ×H0ˆ•…Š™ î™bŸŒ­ąŊÛÚ5ĮĖÛbŸĪžBŌožȎNül¯Īįŧ’;ÐcĮbXŗwŠæËĮOŽäôj!åå͇ĨŽcĮŽqŠ*—LXLŖėĶŽŽ´´l2ÜĐ64´ŧdŲ~Ū0ķļ`1ƒĀ§SXo“Ÿ‹@†OApÍ!¯ŧP0ē0.Wß]TųĘĪ×—ĪUOk ?Wß]”rĀmįwļ°6mQÔ(¯B ŅĀĐã?3å>Vū|?7åŗuUäĖ;ĮÛ°of[˙KíĘ#ēĮYÆ ô2ĨĸĖ%„ÅĖuÕ5ĻĨ‰Ÿ ;vŦ15võåũ.ŋÍőt…”—”OžŗfĻ.—‹¤š|]i.“ËohZ^Ž:´Ėŧ]šˆiÜPiĸFŧ}ŦĢ qéžÛ:ķÕ#_\>W]<­)ü\}wQĘÁĸÉąœB@ĖC (dm^q…Ÿą€Ū§Aøšœ(&,ü?æ˜cō>ˇ§įķ (ĄA@FųžœB@ĖC Ų’5քqČ Å?_>ãą8ŠV™B@! æC ( æ+Q! „€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚Y+* ! „€B øˆŦs•(„€B@‚hU°d‚/žøbRB@! „€(F#k›ožyĄeJN! „€B @4 Z PB@! „Āâ@@dmq Ž2…€B@!P "k%1! „€B@,DÖę*S! „€ø˙öÎÆĒ*ã30tD,¨ ŠF4˛‚ŠŨŦÂŠÆ˛Ģ&ŽŊŘHlQŖŽ=ÆXb‰5–ØģtíŖÆŪ‘]5v,hTŠÂCŲųĮ7|ŧ9oŪ§ĀĖ˙$oîšßųÎ9÷üî}Ü?ß9÷>¨€ÄZ… ä&" " " mA@b­-¨ĢO¨€ÄZ… ä&" " " mA@b­-¨ĢO¨@E/ŝ2eŠ]vŲ6)7rĻÔî\ī2 œ›U$ÖúöíkŖwm:uZĒÁE‹5˛-åPŋã>žå9[,'ī>žå9[,W}ņķkġņúČŲbšŽ]?~ø6^9[,×õŖëĮ¯߯ë#g‹åē~:ÆõķŲ+ŊmÚ¯Ågžņ~Eb­ēēÚzöėŲ¸v°Trá÷FYÕ//|A ņŋâ˙L…ËŖlV׏Ž]?K#Ę~i‚ƒž?úū,ī÷}UIĒPŦUYīŪŊS{ņĸôŧoqđŧoŖ­T>᛺Šūž‘EŽUÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[ŦķÕÕuė–M‰ĩĒĒjëŪŊ{šō,>zpEéel=QæûžūĒ/~ņzđkD×O@äáųČKß}âõā׈ž?úūøŋ ē˙ôˆ7â÷Åąm+ũRUĩ°ž÷B“Š"ąF >@ßF›÷āež-ļ×)åWĘŽúKÎC1‹¸/~KOgDĨōâˇäڊŒ"—ĻōąLõuũq=xŠ×CŠ<ž^æ[Õ/ˆúč#Ûa‡lķÍ7OŅŧ7Ū8ņōöÛoÛȑ#“#˛8uęÔ$äFeę#ôˆÆuŧđ cEø;6ÕũöÛoíúë¯ˇĪ>û,ąÚmˇŨėĀ4ĶÅ_œüéá´îēëÚgœaŧšĨÆėlčąDdkȐ!öõ×_Û+¯ŧ’ÂH#įâˇß~KlˆÆņŪŋO>ųÄnŋũvûôĶOĶūšįžkm´‘Íš5Ënšå–ă¨čV[m•ĸ‹>ú¨=öØcvđÁÛŨwßm'Ÿ|˛}ņÅÉÆ9åõ4DôZ›¯sĐVD@D ũ˜={ļõčŅc™ēRDÖŅ÷ßo÷ŨwŸŨsĪ=6lØ0#jDâæ‹Čšųæ›mģíļŗĢŽē*­7ã&}à 7Ø Aƒ’Í#fÜô}ĶŦ?ũôSvÚūûīŸDĶrDŊH?ū¸ŊúęĢvíĩ×&ņˇõÖ['ûŸũƒ@áøļÜrˆ(Ņ4öą{$‘c}ꊧ’}ôč҆AĖ >ŽRŽôM4m=ö°ŖŽ:*­mã8jjjŌ‡úDÃü­Č>NÄ Ņ8ĸFkŽšĻíŊ÷ŪÖĨK#JéiõÕWOŅ4Ļ"Š÷Ë/ŋ¤ĸ–ŗ÷[ŧE°‘8‡¯ŋūz›ŦįãüķŋŽ‘Öü1EÍ(÷7aÜ`ƒ #ĻX‡šü"pģîēĢõīßŋŅų§ŧĩųσ́vM€Y„÷îeM+X#ĘAÄâkČ8LcáÁĻđN?ũtCt˜ō#ēB„ˆé­ožųρ‹Ŗ ĘŋŒŽJîØaÚ‘ÆÔáå—_ŪĐæŸÉ <8Ugē3&ĻwI^NžcáéE5L˙ÆäĮm0Bˆđā‚—Ã2ŽÁG›eōú-5foŋxë1F”ãfŒœãcŽ9&EŠsėąĮ&ĄÆ5p 'Ø3Ī<“ÆÆņ3N1ÖâņĐãvÅũcoMžÅũk_D@D }@¨=üđÃI¨ÅûnĨŖlRŦÕßĶV˜Äāˆ’zčĄi-SÜtYDt…5Oģė˛KZŗ„!Ôøų៧5YL"Bžûîģ4"OL̞æ áÕTB”1įˆ6ą1íÆš2ž¸lŽÄ´.ÄĶ‘$"H¯ŊöZŠÅéVĻD('NLĸÂË8."L”'ÄkˆTąÎ-¯aĘą\jŠ1{ŋœ[Ļß˙ũ$~?øāƒ´voà 7´-ļØ"šqî˜ęŨvÛmSä#ëôØgē›sŽ ü`Įt5m3US)‘æ>­Í×ûÕVD@D ũ`ŨwjčO ˙āĶâÉB77Ú6ų€A¯nĩ6}öâÖUo]7Y^ŠņėŗĪĻ'CYģÆk-ž& O2ÅÅT%"‹ųÎ;īœmėšįžIlņZ ‘Ŋʍ†ukŦbkŖX ÅtS¤ˆ>ī7Gâ¸xę“čái§fLŊ2.ÄČI'´TŒé‚ .H‚„h"ëĢHL_ō0ëą(gšĶQ3ÚgíE9â•(žžËũrۖŗ÷ÅC‡~x:ODĪx聇ˆˆ!2‰–rx‚s‰8e*ĄÍ”7cÛd“MŒsE:ņÄĶD˛ĀŸ‡˜ ¯4ĩ6ßJK~" " +(ŦŗFk<đ5kÜķHĶfôUŋ^MÆÎŦS}”e)%†h AnæˇOœižSgUõšíŽą}Ŧ{MۄÚX§Ä ”‰ĩLDPxˆ€ãEØPÆ>6Dvüūøãt3įĻÍB{yŸ*ϛ=eŒÃĮ•/ž|Øgj2úĻ]ŪFŊâiļÔÉrūáX8"MŧsŒūčƒãäÃZ5^c‚€ã˜`ÃxI,ˆœ1v[Ę9§ŦgŖ}.žĻdߙPĪ™R/2oÉ1Ķ/|I>FŽÕĪ5vĘ9nÖ+˛.ãä¸[|9^įD9ū\´ÅXaĀ8øøšĨíhk+ž‡’ˆ€ˆ@û"P,ÔĐ }\¸1Ú]3ÃęęWcíģU;âo}’ÎāžĮ},Ļ&#k¯]Pz„é&M™o#7XЉ´t>Ū\鋛pL.V¸AĮ_ Ī šaķņäyˆ#OØÜŽÍë"ÔH^æb ›ņ‹'Ļ4>ļØĸ;c‹åØaÃąš€Œė°QŽ@ŠcĻíØûą^KŽš¸_ú.NœÎ%âĖŋrh—‹ķæ}P7Ö§œ­ĩųrJ" " í‡@%Bí̟ë‹ĨI˙^qV,ԜHVŦšķЁ­[—š6§> õÂĮķÚLŦųÁv¤-‚Ą8q^xĶ>Ņ Ĩæ' žÍĪT-Š€ˆ@G#Ā,¯ķZ.ĸ“į&fû˜Ŋ18+ĮЕœ$åÆÕŊĻĘļRP{o9ß&ˇ$ÕЂ2­J€i^ĨHĢvÜA:ßrĸ5LhŗJ„ÚĶØK˙+ˆĩ1ëßģņÔg<ŧŦXC¨ųgīáÕÖĩs!ĘsŨŗĩ6knãˆOlPų–%‹¸ĩlĢuņíXį[Ŗæ"PA+Ū÷~ĐQO˜f-ëWkÛnà BÍu—ûÅmönXŦbũk…žū Öî|Ŋ ëö­˛˙Ŗ‡­Ũˇ°(<6Ļŧˆ€ˆ€ˆ€ˆ@ž3”ž~šQøŊī_hûoĶ=͘ąŪÜ.@¸Å”k8 ÖX|Í"nÛ¸æÛ[_Zˇú%SZcVcƒW—h‹@•'P;oQzH“ĩ˙,)ķ4rĐ|;ĒKj<@ĮztÄŠŦXÉČOōÄ Ņ5lãß[`˙™Äâö%НK}ģŧ¤oĪNéÔWŽN€÷ÔNžĐüåˇđ`iŲ>kŖ6íÜ ÔxKo/ā•ZÅB:"kk>JtW Øø›øig›<ĩK}įKDõ”D@D@D@D@čZŊĐFŦWgc†ÖŲZũjŌ먈¨!Ô<ĒVjŨZÉgEŠ€ÂCéeダÛtŗ Ėŗ_~¯ĩ˙ūØŲ~›ÕÉĻÕVŲĖ9UK)ĮƇ)‹ˆ€ˆ€ˆ€t „ŗzÔ,˛ŊØúũؐ ­g7^Ž_“kÔ\¤•Ѝ9Š’b ‡(ØjŅļFu]ũŖĻ ęE\áąŊ<9鏈€ˆ€ˆ€tp)c-ZuuáWth5>ÄüĄ‚ĻPeō#žĸXŖß§a:cM[Œēá#Ņ%ŽJŊDŠēÉĩ •‹ĒyŊbnYąæ ļØŠ˙ “ÄZ1R틀ˆ€ˆ€tth&×MžŦŦaĢnx˜ N–jp,)Ö(¤blŪ)šHķĩlø)Ē5%ŽNÍäDYņĮËāDžŠÔ¤Xķ\°yÃtčâ,n›ęHe" " " "Б¸nĘmC9Ą†_Yą†“7EyO1ߔÍË´öHĀ5“Í÷}[l÷ũĻļ‰5o ¸Ŗrv/×VD@D@D@::R:Ē—ekąąåí0ļĄŧˆ€ˆ€ˆ€ˆ@Ķ ŋÎŪ´JE@D@D@D@ڈ€ÄZWˇ" " " "P ‰ĩJ(ÉGD@D@D@ڈ€ÄZWˇ" " " "P ‰ĩJ(ÉGD@D@D@ڈ€ÄZWˇ" " " "P ‰ĩJ(ÉGD@D@D@ڈ€ÄZWˇ" " " "P ˙/Ą¨äčuJ.IENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Commit....workflow/Contents/document.wflow000066400000000000000000000160561445560650400315240ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx commit "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{105, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Delete.workflow/000077500000000000000000000000001445560650400245615ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Delete.workflow/Contents/000077500000000000000000000000001445560650400263565ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Delete.workflow/Contents/Info.plist000066400000000000000000000011671445560650400303330ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Delete NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Delete.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400302575ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Delete.workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001106461445560650400327200ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëUiCCPICC ProfilexÕYy8U]Û_ûĖŽs Į<ķ,ķ˜yžįšpĖķŒáˆ‚^'øÛ9ūeŗæíŖ÷—đ 00ūmƒ DīöÅĪ9_P˜éîāžŠĀ"á:H3  ôūĒ%/ ĀšXX‚ĀŒCāap›0“˙˛Ķũ‰Á¯v~pģ÷H^°mĖß}ūî ÷ųĮgđ†ņ9îcWˇ;ē(÷€Ôúücąëī×h¤kĨßIoũJ%‹R@é ÔQ(@F1ŖØ$JĨŒŌFiĸÔ` 0¯aĪ~Ƹë?¤Ņ7ölXŧǃ?ŦŨũīž´Āá—uĀßŋ˙c `hšeųĪˆö9ŋ膅ĮGøųG“ĩá7×G‚lę%%A–•–‘ŲU˙ŋ)ģkÖīÁŽÚüZ‹ æádūj¨-€E˙# ˜ öŧ˙Č:āđ fÔ+&2öˇ?Ôî ¯„´p„˛nĀDāį, áĩQ č` ė€3pƒãĮŽÁHA HŲā$8Š@)¸Ē@h- tƒ{`Œ€ 0fÁ°VĀ:؄  !ˆ â!qHR†4 }Č ˛œ!Č …b Dč” åAEPT ]‡Ú nč4 MBsĐ;č ôDŒ.„bBĄ0EØ!ö#üˆDââ,ĸqҌčF &ŗˆ%ÄW$@R#™‘ŧHI¤2Ri‰tAú"#‘‡YČd9˛ŲŽėGŽ!g‘ËČī( ŠEFIÂqj„˛GyĄ"P‡P9¨"TĒՋCÍĄVP?ŅD4'Z­Š6F;ĄũĐqčttú ē Ũ‡ž@ŋA¯c0fŒ0F c„qÆbbr0%˜Lf3ųŠÅbŲ°âXuŦ%–‚ÆĻcĪa¯bī`cß`7pÔ8œ,Îį‚ ÅĨâ p5¸NÜcÜ[Ü&• •*•%•7Uü4~•šššZ…Úš:€ú0õYękÔ÷Šį¨ŋH1‚.a!†p‚PIč"LV‰DĸQ‹čBŒ&ž Vī_7hh¤hŒiŧi’iŠišiĶ|¤Ĩĸ¤ÕĻuŖM - ŊA;LģLGE'D§KGĄ;DWL×F÷”î+=Ŋ Ŋ%}}} ũúE–$DŌ'y“ŌH—HwIķ H~]/†#  } o1ŒÂŒÆŒŒŲŒuŒCŒ+L$&y&ĻLÅLˇ™f™‘ĖBĖÆĖÁĖšĖĖO˜°pąhŗø°d˛ÔŗÆžĮÖaŸCĩÃ7G=Į<ĮY§=NINÎėÎέ.X—+._]õ]ΏžŲ§°/}ߓũÂûėāÆîėv۝֝â~ÃíáčQãąEऔSžz{ž÷\ņŌõ*ôZōÖōÎ÷~įŖî“įķÖWŨ7ĪwŅOŨī´ß;M˙˙åŨ€ĸ€ĪFĨß‚,ƒ*ƒv‚ƒBp!!mĄ¤Đ ĐŪ0î°aŖáâáéáŗĒg"V"M#¯DAQûŖZŖáäp0F$æhĖ\ŦFlqėFœC܍ôB ƋÅgÆŋM0H¸|uĐë`O"obJâ\’vRŲ!čįĄždūä´ä7‡ WĨāS‚RĨJ§æĨŽq<ŌžÆ•v8mū¨áŅÚtšôČô§jĨĮPĮŽ eĘežËü™åõ0[:ģ {+Į+įáq™ãgīœđ=1”Ģ˜{á$ædčÉ'§4OUåŅį%ä͟6?ŨœOÎĪĘ_;ã~æA|Ai!ž0ĻpöŦŲŲÖsįNžÛ*ō/š(Ö)n8Īy>ķüˇī’Į´.ԗr•f—ū¸pņY™aYsšPyÁ%ĖĨØK ũ—•/W_aŋ’}eģ2´rļĘĻǎZŠē熺&ˇQSûîęžĢ#uzu­õ’õe Ė Ų×Āĩ˜kī¯{\ŌhÚØsCųFũMÁ›į›š˛šĄæøæ•˙–ŲVįÖŅ6“ļžvĩöĻ[Rˇ*;x;Šo3ŨÎíÄwĻuîÜI¸ķĩ+ŧkšÛ¯{žĮŊgęŽĶŨņ^ëŪĄ>Ķžû÷ îŨí×îŋs_ũ~ĮÕm•ļ (4* 6=RxÔ4¤8Ô<Ŧ4Ü:ĸ2Ō>ēw´ķąæãî1Ŋą{ãÆãŖOėŸ<{ēīéė3īg‹“Á“ŸŸĮ>ߜ:<žÎzA÷ĸā%įËōŅ™†YÅŲÛszsƒ¯l_MÍ{Í/ŊŽzŊõ&m¸Pđ–įmõĸėbĮ;ƒw#ī]ßŋY _Ú\N˙@˙áüG‘7?i}\qZyķ9ōķǜUļÕĘ5ųĩž¯V__އŦo~ËÚ`Û¨úŽüŊ˙‡ãˇ›q[Ø­ŗÛĸÛí?MNī„ėė„S")ŋr$\#|}øR sg˜;Œ€īúÍ)~YĀt‚m`Œ„ķ_!`į§×Ā7HJƒ&jˆjxŊ€AuŖŨ0Ķ‚=„ŗ âĸÚĀĪP?& Ō<ĸ§["á$͙R˜¯˛ŧ`ceˇāČæâĻį1'įđNđķ ø Ö}Qģ+AÔ—JÜĶ%Ŋ-k('Uგ ˛ĩJ˛jŊڜ:Ŗ†ŧĻ•V’vĩN‡îŪŠĩ!‹¯ą¤‰’ŠŽ™ĩšŗ…ŸeĒÕ9ë:x%xiˇâ™D•]l\#ö%ī?áVåŪé1J™õüâō!ų øÉûëX:y„Ä…&†e„gEäEæFŒ>“›WxātüɄôƒÉ‰1I҇“)‡R SÕČ§IåN§MßÉX=ļœ95Ũ–SwŧųÄėI–S†yņ§KōĪėJŸu;—VTWüĒ„xAŽÔãbNYSųdâ˛ČķʘĒãÕ 5CĩęhëeLŽy^oĖŊQuŗ¯i´yąågm;ī-éÛæwŧģÂēôš›×{ž¯ö^KĪũ;†N , ž~46ty8fD”4:ũ¸aėā¸ÁibæIũ̓ĪL&Ų&_?oĘ˜ļ{!đbķe˙Ė…Ųˆ9ŊW,¯>Í÷ž.}“°`˙Vf‘~ņĮģ'ī;–Ē—OHųû)hÅ˙sĀ— Õøĩœ¯ÕëĪ7ž{ūŨ ūéļŗŗ'0{f‚`/p‡@5˜‚3;Kč4…FœBü@† ßŖbŅt5Æ‹Įā Š‚ņ&Ô{"DfZ.: z5’-CcS%ķ}–u62ģGgW3÷ 2¯Ÿ+Ļ@›āŧ0^DZÔ\,Dü´Ä-ÉįR_ĨeTdåÂå‹šģ•ž)oŠ2¨ņī•S7ŌđԌƒŖáŒN™n•Ū ũ;ƒ†SF‹ÆĢ&ßMˇĖļ-P–´VŦÖÜ6ŧļ"vōöĘŠŽN&ÎĻ.&Žvû÷[šŲ¸ÛxØQ\=ŧėŊ},}ÍüLüu4Ղä‚ÅBøC9ØÃIt‘Ø(DÔVôZĖĮØˇq3&ã'<FĖĪ2ČöÉÉ>~íÄpî‡Sø<…ĶųQgŠ ē įĪĄŠÄ‹-ÎĮ””^č/ũXÆXŽrÉ­"įr˕é*DĩTGmÎÕļē…ēk×Ŗ/ܸųŖyO‹_kA[ī-¨Cęv@g靑nLöŨ”ŪŽžĩ~ūûĘö>ÔPT|¤8¤8Ŧ8"3*öX|Lxœ{‚ũ ãSÂ3ĒIhrûų§Š÷Ķī^ŧ{97ķfvfnîÕėü‹×ķo>,lŧŨy‡{Īž$ĩŦũÁöcø§Ŧ•ĒĪ_>¯ņ|5[OøVˇąđƒs˙Véöâß_ķô0ߒæ0ˎÁGˆr…ķö„â b )ƒĖGnŖBP¯ŅžčEL8f›‹Æ=  Åŗā{¨Ŗ „%b=M4­œGŽŅWŦ…™ Ļ9æ>–JÖ ļ@v;]N!.,×:÷žAr#o1_:¨€ĩ ĻŸ0ZxCdB´YŦDü°„줁YjkĪ3éz™#˛.rbōXų§ W(™+ +ī¨L¨VŠ%ėĩP×@iLi^Ķ:ĻíŖŖ¤K¯ģĸ7¨Ų ŅĐÕHŘɸ“É}Ķ2ŗxs[ KŦå+Ģë›h[c;Aģûg×3ŧœ]č\\Û÷åî÷sĶvgw˙čŅM)ô ķŌ÷æô^õšī[ėė¯ĀīõŊAį‚cC BšC×á}Ŋ>âh¤W”f4o ˆ™í‰+?ī P,‘>q#éåĄŪäēÃįSޤFqKŗ>Ē‘.™Á{Œ!ų#ëSö|ÎŗãŖpüôŸė<Ք×pē1ŋáĖՂŠÂËg/ž+-*/.>_^rņBeéPĒ\ūĨâÄåÎ+KUôÕ*5^ĩĮ¯ļ×-6°^3ųCãMÄf–ČÖúļOˇd;Üžs‡ÔÜ}ë.worßĮ~īûĶĻæš÷8f\˙‰ø3†į‚͆/“g?ΟX}—÷Áúķđ†Ķîü˙>[ÚŨ0ŠœuĀ™ kCrö Ô +"v*!Å ¯=ŌÉũ{˙`ĒđʑJ`ž8Ą ˜†Cų0ߛA`R{Dâ2bņɏ´F&!k“(|‚ā3ą!4­ŒA_BOa˜0V˜lL?‡5ÄÅöãˆ8\nžJ’*šĒĪ„÷Æß ÆRģSˇÂĖ'„pŸ(HĖ&ŽŌ8Ō´ÃlĻ„Ž@wn…>”ū)„´ÂÍđņé$3 s‹K;Ģ)ë [,;žŊ‚C›c’3œ‹ĢÛ™{‹§‚lIūÉ[ÃˇŸŸÄß'įú߄ڄ“E DŠE'Å*Äã%L$E¤ĐR3{ú¤Ģd˛dãä|ä÷)Ø*Z*é+¨ĢZ¨yė PĶHÕ,ĶjĶžÖų¨GŌW1đ3Ė3Ē1žlrŌ4Å,Á<Ü"Ö2Â*ÂÚĮ&Ô6Ė.Ų>Įá¸cĄSŊsË¨ëž7nwuGJĒgš×¤¯ŒŸˇQĀXÖ 9:ÎŲõ3Æ#ļų1>4a$Q!éR2ũáC);G‚Ķ>¤‡d,gúg}Ę ?ž‘›vJ$¯1ßôĖDáĄs†Åv%ÁĨGËZ. _AU)×D\Ŋ\?í†oĶ…–ˇí{;ĸ:‡ģ‰w)}-÷Ą‡ÎƒĨCKŖęc™ˇž‘ž[O§ŧėũ2ĪōÆč­ÍģØĨC’>Å|vYåY[X?ˇ!ņŊr“jËfÛíįá_ë‡ |žUúĀgˆ2†ĸĄRč!´Ž #Ė`_‰G"‘˛H 2Ų3rI”ĒõE렓ĐčL<æ6`õ°™ØĮ8Nœ?Ž•ŠŠĘ…Ē–ę'Ūæž>ÔŨAB áŅ”ØNCĻÉ Y§  }AgM×G¯J›¤@jbPcčf4bereZ`ŽaÁ˛\`Uf}ÂÎNÍ^ÃaÎąÆYÄĨÁĩÄ}Į”gƒ|7‡oŠŋLĀSPXpYčšđaKQ.ŅobCâW$ŽIúJf—ÁČŦÉÎË=–ŋĢĐĨxS NCUUÛÔ:÷ŪS‡YŌ{m”Ž°ž†ū>ƒÃBŖ:ãF“ĶZŗķ6‹~ËQ̧Ö36Ÿí {nIGe'{įh—L×ō}wöĪšc<¸)Ļž^ĮŊoøLûaũ|Īõ  ķ /‰xĸÕbbc¯Į}‰WNˆ8X—øífrúáTâ‹´˛Ŗ_2¤Žee>ÍæÎ‰<>K>uĒį4mžį™žBŪŗEEZÅK%EĨîeLåc9WĖĢĒßÖ6Ôå4x\WēÁys­yēĩ­ũfGIgJ—wkīŪ{ō÷ɉ6†gFûƚ'ĒžfOO™ŧИažũōjüuŨBęĸÃ{îĨĨˇ>e|6_ĨY{¸~fÃüqŗc;ô×ü̧HM` ’ƒ" Fh Ą€8€¸D ‘Į‘OP<¨`T+ƒvDWŖ71˜Ë˜ŦöŽ…{L%OU‚Įâ#áŦŌŽē— Nh%JoĐČĶ´ĐęŌĐšŅ­Ōg‘$Hƒ ąŒŦŒ™’˜Ĩ™įX YmØŲž˛ŸápæäįüÂÕÎ}ŠĮ‹,ĮKÍģĖwŋB C0LČUØLDCTJL\œO‚_’[Jd¤´’Œ‘ŦĢ\˜|ŽBĨâ°Ō7UCĩ¨Ŋuę šÜZû´‹ufô$ô“ ƍ؍ŖMÆĖÍOX,[ŲX_ĩeŗK˛_t4vjsásÍۏsKp_Ĩøz>÷ļõöŗđŋ¨ÔĸÚŽŅī ũąqcņî īã“6’3R8RĶ gxûžu>Göøxnä)B^{žÍ™íÂķįHEąÅS%Vē/*–U_âŽ(ŋ"TYį 7Ž*Õu4h]ëk4ž1×ŲŧۚĐļ}ëômÁÎĒ.ąîĢwĨzîI÷_}@ķ0gúQäĐüˆõčĩ1šņā‰OŸž|2Å:íôâė˧ŗLs6¯2æë_ß}3ĩ°ŗČôŽ˙=ßī2ĪŽlˇ?Ŋ\éü\ōÅUfuuíúאuōúġ˜ ÂFÅwųīw~˜ūx¸Š˛YĩŞ•¸u›iÛsģ~{ķ§áĪ“?'wøw‚wšwį?ĘWNvw÷A>~|šŗŗ*Ÿ_æ°}jggŗ|ggûL2āo ]ÁŋŋWėcā3÷ķ™ģčîõĒŨÛŋ•˙A4zXąî8” IDATxė|UEöĮOzGEPé ö ö^°aAײöŪ÷ŋöŽkī]×Utmk {ED@@éŊ…$¤Ŋ˙|'9áō^ō’Ggōš™;3gÎĖüîÜ;ŋ{f枌™3gÆÄœ!`†€!`†@D ŗFÖĘ*e†€!`†€!ā0˛fÁ0 CĀ0 Œ€‘ĩ|qŦj†€!`†€!`Yŗ>`†€!`†@ FĀČZ ž8V5CĀ0 CĀ0ŒŦY0 CĀ0 C #`d­_̚!`†€!`FÖŦ†€!`†€!Pƒ0˛Vƒ/ŽUÍ0 CĀ0 :!`TąXLŠ‹‹å?ūŋūúK/^,uëÖâ9pŪˇđē‰Į͎gIVVÅŪ{3\S[ĩi(ģ÷o+ƒOī, Ô]Ĩ/ø@5üŗūh÷ۚ>oÖĨū^ ˇĐZS™a?7ĩÖ°ˇ‚k1Jŧ j#GŽ”úõëË>ûė#õęÕķ$-++̎žv7kĢ×ä¸…ŌąMSÉt¤Ūíū{+áā1Ú\.ŸH‘ûWX“93–ÉËĪ’E-“›îÛŅõ‘’wgLKrUÍ­oĒũQ哕Nz´žŅp˛ŧŋn!ĀĩÖū€ŋ.ô÷u áÔj[ą×ÁÔtš”!°^#>Ø&L˜ā-kûíˇ_ÜĸƀY2°— ę r^‰Åē‚יk97_$ˇX$§ČąLÉqd-×yŽ­qÎÁwi˝Ÿ[œéŌ3ĨŅÆÍdđy;ËŌf dØ3VĢōĒLĖĘĖ”Ėđ(ĩūrmF|ô<ûėŗq˛FōøzX^‰˜Ô<֕ū^•÷NMŌeĶ 5éjX]j <Ø ˛ļÍ6ÛHQQ‘?܋Š ũ@ˆ rķ×-¸†z}šŽ —ĮdQNĄdxrSėŽi qÁ–†íĶ÷˙'ũö>ȇÜ%w/æŦkÎÂæü܂ éŊwyûņ¯äØSēH:u|Ÿ¨ęAë[^¤Ü‚‚Bųkæ|gŽ/ÅTØ×\!˒åËŗåũ÷?”ÁG+sįÎwũķĄkOQą´hŅÜM—XŒ­_מûz]ėīôãÚæŒŦUÁ]˛d‰äääHÛļmĢ@›Š¨( DsæĖ‘×^{MÎ<ķLŸÁĸ:eΞ=[^ũõ„e’^PPā-/mÚ´qÄ­Čđĩü‚|geĢįe„Ë–-“_|Qƌ#§všôęÕ+Ū†[nšÅëoŪŧyœāiģt@ŦÎpYõÃōB;qøÔ'ŦoXŋYŗfÉ+¯ŧ"įwž—'-L'r] ĶVpŒs—Ä$'ߙÖÜžĨå‡õ ëY{â‰'âõ õĢžPžöÖÔ0íåâCÖr c’įŽįŠÂbÉqä+ĪųÄ-]ž'ŨzĩīVßv•,ÎŏLN89Įw$ÛÅe5k(ŲŲŲņžöEíOŖG–vÚ).C|*Nķ—Õo0į˜ē Sū˜›!fČ;oŊ)ͯ+_ū8UrĪ–[õ’‘_ũ*ß7Ję7hč,„Ž \ž•ũS¯/ē6Ø`ŲjË­ŧ…šOŸ>ōä“OĘO?ũ$[mĩ•/Ë÷#‡_˛ëĻ˙ũ÷ōŪ{īI´žŽŽûa}֟îūžJŸ^e˞VÁĢ> ŋûî;?~ŧ›xßkÉÍÍ]E˛ŧTÆ=øāƒ~“æ]]ĒcMũ°íčâÁŲ´iĶ¸ÚšRĮT1×öL:U?üp?€hcRŅĄųĩ›'??ßOkųÁƅŨ(ëxâ Ũ†#īgŸ.CŽ;Nzöėéã&Lœč?ĻŖ |zĄË[āČ^ŧNXĨŧdÉ?†ėĒ 3õĨú¨ßįŽ~Į•֏:8’ÂuZ>˛Ņúĸ HŖMŽ!qũčĶüQ}55\ärąģ&´‰öä֓|g%ËpĶšÅ™nŠ´ČM:x†{ZæÎœ&õę7pūty{ؓ˛˙qg‹“p¤ÕMē#§ X ŠŨšĻ†ueŊž°Ä¯ŗĖÔŅ?>üđC zŸôP~•Ä PV¤ ôGtAvV¸ū9zÜbg^"ųËɡ#ž”ē ’>}WŽ´Ĩ,Î?aš,YŧP6ëēŊÃĄHæ-\!ļĖ,Y—éĘõk´\ģ´ū/žôĸtîÜš¤Fß'Ÿ|RŌ/\ŦīMî‰öōk˙āÜ:į‡÷é‰úcIaCÕ_aáRŧSÄ#ũ]¯™ųĢ#`–ĩÕ1I)†f~,Kŋũö›Č5hĐĀ?œHģįž{d=öã?^F8p ŸōÚu×]ŊĨt˙@ryxŗ>ā€ü Í5×ø3i|ōÁrģíļ“Ũwß]žūúkŸįŖ>ŦyL 0§zB˙?˙ų ëī˙ģ}ôŅeæûķĪ?Ŋ•0ZÎŨwßíË=á„ä—_~‰—ÁaúņėŗĪ–Ī>ûĖãFŲÍ˙ûß^NķFqxä‘G|[iן~×Ö=™Œę¤>!ļT@ķƒÍž{îš6Aƒy ׇéëË/ŋ\æĪŸ/ûîģ¯ŧņÆžZF´Ū –;īŧŗĮ]­jZĻĪԁ…5Hŗ+AÚæâˆ×KÔwß~+×_ŊĐ7  ŨAŊ ¸bįs>iŌ$_Į~ŗ[oŊ5>¸pmĨßЧnģíļ¸ŧ–A~ōzčĄŌˇo_Ųu—]|4}§īųįŸ÷ũ‹øX¤~ߖÖ+2õ˜ōĮ^×ļÛnëËüØåaĀG_Xßwß}חˇ›Ģ×SO=寍/ĶÉ>ÜįķWŨô(zI;˙üķ呇’ŊöÚKnžųf¯÷,×wÁ…~šhŅĸxû ZßĩÎwü“éĖ\7š—ī,kŽ€qô?ōty`øDšŋôØsđ™Î’V$˝Lļ“_”į6',+éKnŽŦųļ¸û'™ãžtŌIņ>N?æEqīŊ÷öXrFû"ē4|Ëëz}–/ɕŋr)Ē#;í}žä-Ī‘âœiŌĨÛÖ2oNžlģC?Ųs¯CeĄcnžíyî…ŌįŽ#ũÍë)íGÔAĶT?/š<Ķ#ĪŊøÎ;īøûj{wGŒQ’æŽīíŽOoŊõÖžĐc.NûËwÜ!;;kãQG%?ūøŖĪķÛØąrāĘŋūõ/éŅŖ‡ä: ˇĘSŪt÷<ü0éŸxâ‰rĐA ŲYgå×mL™2Åßä|đ_‡Ä ķŌK/ųŧĶĻMķd‹ŦqãÆōđÃËīŋ˙î§! L đ@eŠM§-xč´nŨÚO—5rëFüŅ=ŽžújOŌ°nõw¤m˙ũ÷÷Ÿ†đ•ū[ētŠŧüōË>ī.nf@ˆæc§"Ÿ”HTßãļ…õU8ÚB]x°A yā‚ $ō˜(/8`ŧķÎ;å›ožņS$Ški•Ŋ•ҁlōäÉĢԇ5R”M:]œ˙ã˙Xmã%—\â‰+× 9ÖŨtĶMrÄG×—ŦŪ¤]qÅËîŨģËc=F”/͟¸Ū2āę }BO\ž[ûƒãĄžī,(Ųū[kÅ2dČņ~Ā…îĩ× '—īĻ‹ļöëØVŦČķz˛ŗ—{"ã7ēÁz¨ėã˜SO;ÕdÛmˇŦŋũíonĐŪË鏚ŧŲĨ¯ÎÔŖÄŠšÛ~ûíŨ “Žpō¤čķĪ!ؙūe€ūĩ×^u–Ōæ>?ö Ú õcpĸ~ŦgēÅéÚa‡{Ō‘å_ŧޞ^’Gë{éĨ—zâŪŊ[wyęé§<ŪK–,õVp6ė%w4•ũaÛŖ_?×ëĘĖ™ŗä7x‚í&›´uũîCųÕ­å{ë­ˇ\]Ņ/Ģ´ú{̌˙GzŠÕŽÃTĸ8a(pDŧPfd×‘æ ĩ(ŖŽb]sëÖÜ~_.wÜQo˙ôp˙°ŦÆâ¸Ėm#“į.WÃ:.Ž?ü¨#˛ûԒ—#û—ĸ^xÁO ōrÃ=ˆC^-nĄŪDũąĀŊLdģg÷˛šÉw~žk›ë­R§ic™3wļthÛX:tÜD–e¯´pųéÎŦ’°>¯Øt ëÕ° âž~úiw¯ˇtŸ'iā§ûųŪ /ēôŦbŧBčü ųČŊņ͎o™2åO˙ėdŊ#z¯šæZOüXį9uęyûíwäÍ7Ū”ąãÆĘĩ×^ëvŠ>' .ōV˙8ĢđHwÜurD˛¤˙Đ12ŧ,ũëąĮžp͞OÉ͡Üė0+öõøņĮŸü”ožųZÎ9įųö›oũKK>øWŋäŪûî•n¸^zč‘x˙sÍp:Ēŋ˙ųŽ]ũ;Ēß5*íũ>cnUŒŦ­ŠGĘ!€<Ü.ŧđBŲqĮŊu†ˇžgžyÆ=@ŪöKWä˜.ÄR‚å wŅEyĸÆ9Ö)DW]u•';ôĒ~H d BB~ŌxĒNŦX8-BĻ„Á'¸ŧ=˛Ö…ŧ „ÔEķi—Då0Hĸ;l ubmŽüXu <<€Y‹Ō­[7ŲhŖäžûîK˜—v`•2dˆˇ(A"(#\ĸ2XUI†-i!ęm#xQg6ƒ°ÆGyԟ<8|â’ĩ‡6PoáOtč čšZ>€ !$G<ģKŽ‘{°—~„ĢDŪKxš’ūąé‰5ĶFŦgûūûī<Ö_~ųĨˇ6õsDrJ›;ė0ŸUą$@^,fŦõŠS'Ë[ģhD‹ëŽŖ7kÖÜ×ËG”ō…°~T¤ĀmŽP]™nw ųKtōk’|^WmŦÍÄ÷îŨÛGíļÛnūĨAē>účcž<ˆ׌>Jú)§œ"íÚĩķųēwī& ,đ„‚G|ØļđÜgHÃ?­˜öt¤ QĪ]ß7Hģf8jÃ5Ëpģ=ņK¯\}wéųīŌ™sÂN…edIũ,ˇƒÔ}Wû RĄĶx|ũMŨu×]'-[ļ”.]ēxB„L"LTGĸūčÚ?U7;B!bYŽˆ:˛ŗ"o™Ėž4Nžw¤;#ĢžėŪīį3|¸ŽØ¸ƒvsũô^(ŠKIM[ĩjå_8y) ëW˛›´D†€ 7l%]ēv‘įžÎÉe:‹ũ§ž_đ˛Š>vVcaÄ Îō“˜Üvûm>Œeū™áŽ ĪŸ“O>ÅĮkyčCGŗæÍŧĖW_}-'Nđũ AŌqCOęŸĪrmšZƌã_ ŠÃāÁGz™#<ŌßkÅÅEĢ,W ÛãkÁ?ßwŌØßkdÕŌ#k•€Õw^wĶĢĪ ķŋ˙šíųnĐdģT°tá0ÉãôAH>% ސŦsXŠļÜrËÕäÅÚĻųŅÅôcÆ ãe@˜ļØb _'ŌqČS+ÍKŨĸų6Ûl3_6åđ0WYtDÛB9čT|,„ŧŅŋųæ›ŪÚsĖ1ĮøöEķ‚ƒļR Ņ9ãŒ3k—(ĘÄĄ—o9aÅ;ũôĶŊ zY¨Ūž}{ßnt)Æa}’ĩ˛Eûƒļâ´-ę—ŦŪLĶVĘŌyÎ҉ލãē1xé' Ņ°"äá\0Ŧú ČX.ú÷ī/,ōË 7ÜĐįÁĸ )ÃBJę¨ĶP`-"‰Ķ0ō&oØ­¸ŅOC] Āč ķc5iŌ¤‰×‡͏Īf,Äô%Â\ÃÍ7ß<^v¨‡6ōĨ{„ūĀÚ-dpäWũ>ÂũĢî0xâ(<ÖsßLs‡Ŗ6⨚ˇĒÅÜĀ˙ˇÃdėČ7=}CžķvĨx [ą[Ī…”ŨŖËW¸œę!’ÔQ–Z>´Ÿ:„iŠq¤‡.ÚIC^wĄÆuģŧXÜ Ũá4h"­Ûl&õzŸ-_Lp–Ŋ…ËīĻ?ŨgKĖ“FÎ:ZčĻ}3œeQ_L(—Cõ1eË5ÖëĻ>2Ô§÷Ϗ¤…ũˆxâÔ§ņ, á¸'T/>‡Ęk‡Ecá…^Žs۰ɧyõŊÔEķiŨČGũąĀEˁ„…mĄœ8j}!Lu°c<Äcy ķRyķōō| h|ʁ‡%uTĮ9ƒ?í eЉnŦd`Ģíë>Ņ6ō6ŪĸE‹¸H-gt2ĖzAČų“Õ *oõLؐ56ęÂúG˜\šöÔS3Î5Œ<y`Â0ņ~G›"Ÿ8qĸŸÎÄŌ¨ƒõ—{īŊ×cŠzĩ ÚĮú=Ļ*Ņ5cÆ oM(ąd­ü´ŽšOë­u ŦSîčĸžLËҟĀ9­;Sã`šÆé32ԝ<čÃĒĘ)CŸ–…O˜û‹kĮēBŦsô/m÷†Äé9~u†-§QŨ,GÖęHc÷ MJĻÎRļížÉĸéå¯_FĘÜIŋĘļ—f.žYũēNļŽ4r˛ëeš#Sę¸5kÚg<`Á?í[ęĶGé8=ĮĮŠ•õ‘A|yũ‘ļ{ž[—›ˇBFņŒ|˙Ņũ2aô‡ū“3 Ôw䴎|æ6<õØ-ōßq;—sYs-wÍõ!ę€NíOø„5^ĪõÚkŸ{‘åXbéįڇ‘åå˜į ģŌĩņ ķsNyXsé;œCÖx^AūÁ‰įŒö7ęÄKaÖÕAȸĪp”O'í‹/žÄۋŪtõ?íwé*/ŨũŨƒm˙VCĀ,kĢAR~7+7=k°j°†‚uP/H(–2ĻYW‚E§T=gá7 Ãy3Œ>t c}b?'Ŧb \,FŋëŽģü7¸6ŨtSoí`P˙ūũQ띖úLG„ų°¸\|ņÅžŽlBā;eZÎe—]æËa!pYmaā`q;ídzlˆŖ.Q ƒ`E|ĮŽũ`|à 7Ŧ† Ö-Čk‡ŧ Ķ=`Îh}XˇŖÚȚ8Ú6ÚFüL2ÆBa!ëųį§ Xt ´?ZoŽ¤á‚ .đrX†9ä8ÎZ>>xĢcđāAÎ.¤qÎŒĪ ĸy‘ dØôĀÚČW_}Õ×Ųe=˛´>æÕē~ÄF‚ŠS§z¨ƒ:-[ëI<ú(—CurÎ:ú ¸Ŗ‹5 ZēčëL÷ŗ>Ž#?ߝŖ-čĐëC_w•Ņļę6Ÿ°.‘žB}dŠKXOtĻĶ)V´—sHZ#ˇŪ.–éŦŌnjØÍē#Sš6j-GwĢŌŖũ‘8°äúŅŅE8?ß­[sSĄz‘ŧ%SeŅ’é˛`Ū4ÉYž@šÅū”ųķæ8 įön [gs;bWä8,šúŧô+ĘG—:Ŋfz]ņ‘ŅCåĸaž+LßCŒ¸Oy)€¸!Gŗáŗiذa^•ęĄ\ĘÂ2 Qe0÷9}˜—6žŖŦæeB-tl"âķ";–w¨.ŗ–2Įķ Ë?ē9('”ĶöÔ_ÛH?âŧ:û{mĀĢēÚ`ŋ ZdõĄ‡Īƒˆ‡oūŧm1íIGƑ΁å‹ 7s"§zŖiauŌ:rŽōZŽö̓¯éČ+VčĮiT†žĻV5Å]åT–úCđÁ0Ä9چhũĒ+Ŧ˜p-!ü˙ūŖštÜ Kb´1ĶmpdMÛÂÕ|ķŅÛå S/ƒŋšë Ys‡3ŒšYDˇƒ´P&ĪX,ŗĮŒ– Ö÷k­¸†'¸ƒ•Ū„9pŠĄļ“2âŸTú#ëą(ƒöĖ7_ŽŋæiÛŽŖ[‘&nĘēšĢO=Šãô/]ļ@ęĖũ\rņՒãúqNÎr÷ŅÜzŽ´O’ū;´ō׈~DŲÔSûõÕúpŽŖūÚâ¨w´]¤ķüāŪÔ4dÕŅ>úũHąĀW,´\â´N>Ú yE7>˜ŗ{”5™ôĩđ~øõ×_ũË5äš××ļjY‰ę¯uÖē­kátöwŊĻæ¯ŽĀĘWëÕĶ,Ϗų0yëį ˛r3+™Đ•xÎ9Tž¸DNe4 ]Ē'ŧᕌ¨œúa9Q]„y¸ŠSŊ„ĩ-?Y[H ukôhŧæ%–Ã@#ęņÁ?d4=ˆöõŅüĄN-_ËRlBŪ¯åâCb4?~XoĘFņ\suZN¨_㰂ōg`0 \0Ōô!H˜sÕ¯uĐ2ëA–[ÕE [âtĐĀ'LšÆqÎ4=>N뉏 íeđQ‡õb0 ë¤ųŅĨõB.F§Æ'’ŅÚdÃzĄ:€2ԏēǝ:5Ÿ–UaŊnԇúĩlÚDš6sŋ uđšhĮ~ŠA‰zåe˜’Æ&×w ÄõgéĘ­#õÜIƒßš6îoģæU?ÚNʍÆi8YZYũ‘>Mģp6ÆģoŋMö ö‹a•îs#¸VuęÉ÷ĶFÉ[¯ūË–æžo°‹âÚ°ßqŌÃ5BŸbE^ŊÆÔƒ~¤įa5Nۃ\øL"=t[}ÉŌ<”Ĩũ„8§>œ#^ŦĀĄ }‹uję(Oû1ž>;#ŦåāŖGë§eŽëaŊ†éėīŠŊų+Xųd^gg)  7"ĸáy4LZx„éÄķ°ĀŪĐČiœæQ=ÄsŽņękē†UNo2-GËTšĐį\–A~uaÄŠNM×8|-_ĶĸyÃx=W_ËV_ãņøP§–‡ĪĘFķøÄ@WŖhŪ0ŋæU™DiÄņ Į˛ÄÎH~ŠŒA…eiy<āqŠ1×&ta[4 ŨĒCķ†íÕ4•Ŗ MĮ×úâĢ yÃ×tt#Ī Í†‘‹æŅŧø¸°\ ãkyZâÂsí̚_ĶÂ|aؚ_]U§kŲĒà YËįęÍĶÔXĐ8čjåÜ÷H÷Ģ—˛VėHNÖÜ1ŌŽábß_ĸuÕ2đIĶt|Å$LS•Ķü„Ë돊5Sügu˜_Ŗ…Ĩ>KŸõČĘruÅ4÷m;ˇNrˇ=}Ÿčéb{°Q|´ok4ž°–E8Ôiģ4.l#2aXe´­ĒŸpXÎ5/>ézędM÷ĒæņŨ?6ĩ°‰Lõ†~xߨ^͇O\čÖĩ0m 뜮ūbfįūŅb0¤Š€vXõŖŖTõ˜ÜúũƒuXŦíâšėzÔĩWá@ Úˇ@HeÔGNäôĐt 'B—4ōë ‰Œ–‹¯įÄĢ>Î5ŸÆ…>į¤ã4˜Nŧ†9ĮŠŧÆÖCuhyâ¨3.Œ'ŋļ…øt:ĘĨ|=6.pĶ…ŽyįĒęjæĒSJ‚Še”~Î#+ĶIäÉ´1ČĪīŊ-‹§ūâ?žčyĸ˜$J T§tZ^ ¯‰kŠ#œô ˆžS_ÚĐÁG¸ų–^hUĸž\ÕA…8'N͈ĶkĨí å58×k¯adpҞ';4¯ęU9ę q%ZÅī.Uũ‡Ī‹$Žŧ8ü° čŅūčjŅŋtö÷Z[•7ÅÖŦU9¤Ļp}G@×é05ÄÚ$ŗ†ĩ.L¯0eÉŅuSÜt ŅsÅR|`Ô×<„uĘB­!¤aĶCeõŒĪŧčAŽz18kũ4/á0Nu‘/Ŧ7yÉŖŽtd5Ÿ8õ¨.­ƒĘRGĻeÃēĒūtų`‰5‰kɔ–S–°ËKõŖ”į‡žĀ.lv7cŅ‚čĩ*/ĒéŠöGČSĨŦĮbjöVRÆ5Ѓ˛š´ë1k&YķÉG¸ S&˛aāúĒ‹ö!âĩ/t\(į#Ü?í'a]4¯ĻáëA>Չ>đÕz…ú9GGÛȝyŌ)'ē{œpX–æŠ-ūēÖßk îŅvY‹"baC` āAĪœ9ƒ8 ōܐÔxĀķđ…˛ŠÖ¤,´á\ķāëšæ']žĢ¯ņšGũhŧ†SÉ•ŅŧøŅ4Âa™œĢ žž‡:ŌuΠÍāÍ:DH$œkĒ$-:ĐGëE[8X#ÉĮ[!DčA‡’5ôW•Kĩ?*ĩĩÛE IDATæÔō¤•‡SŸsŊǟ>Ī9‡ęB.™ u•'Ŗ˛å]÷0=<×ü”Ãy4'o4?y4_īßP.Y;Öåøu­ŋ¯ËX—Uw[ŗV:–fT đ8°Lā˜FáÁÎÏs}O•ŦUĸ*ĩ>K8čĻĢąz C2Ŗƒˇ’•ōęEēö ĩ\ÖžS•mQÉú#ņÔģŧū˜ˆ”$j§Ę%JĢĘvÕ4]ĩĩŊëZ¯iũĸĒęcd­Ē4=†@€€ž2 ëāÅ ¨Ž8}37˛Ļ¨TĖ_›ƒ#esp9ôZrõz'kM˜yČũ„stU‡+¯?RļļAûc˛vÅ>N$SíĒ):Ŗí¯)õĒĒz„}v]čīUÕĮĻAkŌհ熀!`†€!A z^ã"…XĐ0 CĀ0 C rYĢn–Ë0 CĀ0 ´ `d--0[!†€!`†€!`TÛ`P9Ü|.ŅōI†‰'úßĻ+K?oŌĩkWŋMŋļ/F- K3 CĀ0 Š!` *†——wIņۏ|ŗS§NIwrąģjʔ)ū;[ŊzõŠ—X¤MëöĶO?ųįģMÕQNŧ•<Ąž|0vŌ¤IŌģwo¯ĨēëI™Ë—/÷ŠMW™•„Į˛†€!`q˞‡ĸâ'|›ËZûöí“5ՊĖôéĶũ÷ŒØ&SbÅų“O>é_¨ōĄĖvÚÉEœ´THL¨‹<ŖGö–<ȚĻĨĸ‡ŧÕé´.”Yãg˜”8iZĒõD>YÕK™\¯˛ĘLU'ē’šĒБLˇÅ†€!`ŦؚĩJ^sdžXŽßœá\ŋ`Ž?GRPX§œDōęAņœãöŨw_9î¸ãü÷– [ę4]Ãåų*¯~yōk+]ë§~*õ@–ƒŸˇyá…â8ĻĒCåÔ×2 ōÉ'žČqMWšdžæYÉt[ŧ!`†Āú€YÖÖāú3Ŋ‰eræ~ŊŲũđņƟÄA-i:ˆCØë'ĩXM'Ŧi7ö % ?˙üŗŸ.äˇúļŨv[˙{‚ČŋúęĢŪ*5jÔ(˙QÍž}ûJ‡âDCuöŲgūwû¨'V,ÖÎáøÉŖ/ŋüR-ZäķīžûîūËúLĄ2=-9yōd˙Jģė˛KüGŊ˛Ō‰d ¨#GŽôĶĀX iŋƒ¨íS˙¯ŋū’īŋ˙Ū$tĢ­ļōŋ—ˆÚ3fČ7ß|'Į‡v˜×‡•ėõ×_Ļ–;wî,?ūøcÂz˙ųįŸōõ×_{ÜĻM_S-“×Ɵ9sĻoãčÛÖ{ģíļķõĻ.äŲqĮŊŽ#FHĪž=Ŋ|T‡–ƒŧ9CĀ0 C 2YĢj +ž<ÎÔeQVQ™š kȒGpÍ $mÖŦYžl@öØc/ Ą"|øá‡Ëüųķåģīž“ũ÷ßßg]ļl™;äC<ɀ”a™S‡^ˆO˖-=YÂōĶĨK/)ã7 <ōHOåĮ˜•҃ sĖ1>–úQÅ âĮī(RÄō÷ß—­ˇŪÚã 2”ũÕW_ÉAäņŋ˙ũ¯tėØŅŦĪ?˙ܓĖ=zøö`Ą„,žũöÛBÛqÉęMÚ_|!ôŒ3&^.i(ęÉm׎lŧņÆB9ÄEë=~üxéͧ? ‰ü7ŋõ‰ō‘'ĒÃH(›3 CĀXŒŦU=%úģeŠA‡ŦæĶAœ0D7mÚ4Y¸pĄ' ­ZĩōņX˛ųöÛoŊ?gÎO!~8,:ŦcM:įΝë7<ĻēąÍ›7O ƒ,°'ō8uęT?õĒ?5CžDåaŖ<ŦRīŊ÷žėŧķÎqrļ=Ą V4ĘB'i1Ęį‡Íą†iģņŠ7dī—_~Ą>ßėŲŗ}>Ö@tᐧū8ĩX&Ģ7$ޞÁ“üü&į„ ŧHq´_ô­7õØf›müu0`€ŧ˙ūûžXB0ÉŖųÕ÷t˙# ›o†€!`T#kA+"Ë  `Đį`PŽĖČā "Čj˜8ÔčqLQB°aĄdAn˜Åʄëäv’OķāCXT¯Zī% ËÜđáÃ=9Ú`ƒ ˆöōԇ<Ô[u‘–¨<-cĐ Aū3%Lû1åÚŊ{w˛Är{íĩ—'CČ`…‚dą‘€zC”pZĻ֙úS.u×vâ7oŪܯMCY%hœkÕĪÎÎ^ 'Ōh?$™s=¨ƒæ ëĸz•FëÍõĶ:€ךüøÄ“_u _Ķ(Μ!`†€!PYlƒA%‘cPÆ1ŊÉā€0 ‡‡Æ‘Ž,Nķ깆ņąmžųæ~-„‚ƒÕŠiĶĻ>Ī„ā”4`‰ã|Á‚žČAĐŁu Ōiĸ^¤a)ƒHlēéĻÂÔåŸŦ<Čy(‡)TĻ0YÛĨõÖv_e žXōĐK°ė1KûđĩŽäåœx,nzNėđЎZÎЏ iÔ rK8NÔëÖ56$—)^­¯úŠ×‚†>dÃzƒģ֛z2ĩ y%Ž5läá`÷­ęPŊž@ûg†€!`TŦ‹/žøÚJæ]oŗé Y`I‰!<‰0‹á!]X‹ ęĐÅ Ī÷ÚļØb ŸÆZ(ĻęX G$rAúíˇßüú* ë¯Đ á;vŦˇvĄGbÕĸE Ÿ}ŦqCkkŦ qČqÎĸ,z‰Ęƒ ŧķÎ;~Ēbˆe yôáhúßzë-/.:ÖÄA¸øl kŪđ™îÅrŠaA~ˇnŨ&Ė!‚°Ņ~ōĸFŨŠÄ*ZoČ(ä bJ~Ö a]„ŧą.xuԟëÂ4,u'/-QŊŲ”A(ŲT‡¸ŅTG'gMTëšâ¤å™o†€!`¤Š€}7U¤9ĩŧ@Ļ Q,Ngā.Ëae‚˜ėļÛnž@čā.HįęHg ‡DāT2 y_~ųeŋŲ€8dCōA•CÄB%&*ƒuJÉ&iX–¨¤=Ä#KeAÃ4ĩzAL!IęT'u@>š†œĘāƒkXŽęŅøPžúĐ.ôâhåh~éū§!KŨĩū”I>ŘvSG­SXo-GĶTŋÆãĢž† ŽRĻƚo†€!`T[ŗV´"˛ ūX¯°ö`ŨbNäĀüCkŽęČsŽD „ŖŽt%TaōuŅŧZ'•‰–Cē@•Å×ōĐęÔ: ÃĻiŅtâ8ĮašRyõ‰×tâ8”h…2aŧ–‹¯eŠę­ų‰#rÚ~ uk>N1"ŒĶzG픤Ž$ŚNū°<•3ß0 C fYĢjQ+ ‹ã™$^‰‡ĒegđfĒ”i=qâ‘åP‹ųŖ.Ô§d@힍^­7ašęĐŧZņĄ\xæŅ|ÄQw•‹Æ“Ļé¤QÚĸå…ōœĢ|=§Œ¨ŧĻŠŒžĢæ Ī5_ĪU?r8ęŦ¤ M×늌ÆqŽ õĶŖi„õ‰3g†€!`T•&™Ęä^Īķč Ėš),<‰ČEɁÂĻ8é8 sPĮy˜ĻņŦåÂižžĢLH*4NeÔWZŽ–ÕGXe4M}ÕA[ĸeĒ>•!Oč4]}• e¸°šG}Í֋´0:jzXŊ舿QyÕę#.ÔŖ˛ękķ CĀ0 Ę `d­2¨š< ÄQbĸáPĨؤéAœ:Ճ%ÆķÖ=¤…‡ęÆå4>ԍC>t‰dI'žöh:žÆ%*3‘NäÃōÂs-Cķ‘ĻeEĶ——Wõh^­ģ֛üZ†ęR_ķ†åk\"_uĻ*ŸH‡Å†€!`Š€‘5Eĸ>=ŽŠ´pggTÔJQÅĨV6Îe†€!`Ŧ%V~ģ`-UŠ5 CĀ0 CĀHŽ€‘ĩäØXŠ!`†€!`k#kkũX CĀ0 CĀHŽ€‘ĩäØXŠ!`†€!`k#kkũX CĀ0 CĀHŽ€‘ĩäØXŠ!`†€!`k:=öØZ¯„UĀ0 dđ‹ũû÷—Í6ÛĖ‹TÅ÷ëôzSĻL‘O?ũÔ˙n˛ō-Ū0 ĩ@Ưŋūã‡ˇų‘l~ĀZbkģbVž!` PPP ŖFōŋ­Ûˇoß8(•!máķí§Ÿ~’qãÆIŸ>}ė{‰qTíÄ0j<ßxQåwÅųYÉ:DpđAS’ũdRM¨ŧÕÁ0Ö?x6mŗÍ62~üxY´h‘ôë×Ī?Ģ ^!lJÔx)ũüķĪŊ.ˆ?W=ëß°†@ēāšĮĄ-ÃŊYÆVŦXá­jüˇ9CĀ0jĢđĀÂ6iŌ$áyĩĪ>ûŋɋK…h)QËÉɑ÷ßߴΝ;{‹ZüaXúâZÚnu0 C€_Iˆæ_('L˜c ĸ†UMj“!`k}&ņ|ŌgÔôéĶeÚ´i˛÷Ū{KëÖ­}Ë"lúL›7ož|đÁ˛éĻ›Jûöíũ[+CōķkÎ0 š€€>“x>1š1uęÔA]¯ĻļšPỸ!`Ŧŋđ,‚Ŧqđ|ŌįTAA‘Ė7_&NøMvÛm7Ų|ķÍ=H‰›>ĪØH0räHéŌĩ‡´iŊĄŗ¨•ŧąę›k8å°ū"n-7 š‚Ī3,kū…rÖŦYžŦņPĶŖĻTÖęaë'ú,‡¨q0 ē8{…ĖZ°BęfKFaļL?Fzöė)ŅäS§ ētßJbušHAQĻ´mU_Z4Šī§AyrčÃ1éS]憀!Âį‘'k ,ˆéTCø€KGeŦ CĀ0’!Āķˆg5–jĖ\'ßüžTšÔ-–&õ‹ĨEŖ"Š'ųōûīãĨE‹ņĒ‚ĮF‚… J÷îŨd}Yœ“%Ų+2%ģ SvęÖL6iÕĀO1đ0ÔÅŧšß|CĀ0Ö&JØüŗiņâŞŦ­Í YŲ†€!`$B@§@.͗Į?\ u3 ĨEÃ"éąqlШd-dnōäÉ~ãëØ7n,˗/÷ëĶX˜Ë4Š3uS s2eüėē˛(7K buä´ŊZÉÍęy˚­YKt,Î0Ö6žŦ-]ētå|ÁÚŽ‘•o†@)jņĮŋíõųōĮŦzЇ^ôSNËõûg†@ AĀČZ šV CĀXo&ä: ņî'§ÚC­Jœ/%eQ‚VVēę(Ņ—éõSŽ9CĀ0j*ujjÅŦ^†€!°~#€•kęŧBŊŦ˜ÛTP,™Ž\š 8™ē!´Œiš:ŸŠôqčCo~Q†/‡ŧä1g†@MC Ōd-7ŋØMä˘ių2m~,Ëu_ˇ}Ĩ5íúZ} u˜L[PčëßĸĄÛTPĘŖ ZJØH„`ŲJDÖĸ Yúš;Ŋķ˛3䓱y2iö|´ų4ûg†Āš"å26˔6ÍęH›æY˛Cį.œU)ĩ&ksĘKnAîĮcr$7ߨYĨPˇL†€!P!š4XõY“ˆ°AĘĸd-Zˆ5oęôÎˡf-æŽ+žĻ™o†@U"Ā â.ŨĘá;6‘^ëĮU‡Ī­xdä¤\˛ÆPßLßų1[ų`ņ*$YƒšŠ4kČnDģ C:lå?vUZØĸiŅp”¨‘žE‘ēå>Ŗš,l†@ų0Û¸8Gd‘;Jv´‹|1>×'īŲ\†ėŅ,ޤ<–QŪGq•ŦŨōÚņĢ+ąÔmĶA¤_W‘îmEÖ3–Ϗ˜o†€!`†@ˆĀŸ bōŲī"_MÉ+5âėÕHŽ<ŧÕjK8Â|z^.YCđÅ/˛åéO–ø<­íoģCԌ )ˆæ†€!`†€!Pŗ—ÄäŪEf•P*šđĀ–˛_ŸFåe“2Éfš_Ũ&‚Kžcá­HÛæ"˙<$C™%­\`MĀ0 CĀ0 (9nŊ˙˙Ŋ“ųnŊ,3“ŅÆo@Đ%gQyÂIWkčüéëß:mÎ5¨+rá>™Ō¸~õYÔøAæŧŧŧJMœõ+ 4đ?Úė+m˙ CĀ0 CAĀŖNë“[Ū.ö{Ø´yŪūÍũth2–Ŧ)Q›ˇ¤Pžžį›¸k— Ų¸ųĘÍÚnd“)ĻEÃčãVŦX!ųųųRŋ~É. MS?,SĪÕ§äÅoܸąN”/ZרŒęÏĻEÉd,˙JĸxEÆßę}l%z̧~Ģ?kaĸFĶĸaëĢ÷1Å.6†Ÿõ??W5VqO``š6mšĖš5K,X ŲŲŲŌ¤IiÕĒ•˙ŊâM7ŨT6l¸ŸčšI†ôéP,?˙%ūë§ l" ëg­&§÷dB˛Ļ‰ßMʋ;mĪ™ IYôâi^ühZ4œHÂöøãËüųķK[VV–ÔŠS'ū]%ĀáĀéyaaĄl°ÁrÚi§Å‰^"ŨŠ”ī—ū‹ĘGÉĘH5AAL™2Å_PęŽēüņGyë­ˇd›mļ‘C=4T— #5_ĮųsĪ='“'O–!C†øĩNĻ7Yū?˙üĶãŪĻMŠ[יUK$›(Î ō3gΔß˙ŨwÜîŨģk˛÷SɯÉ&ŠK&ŸH6Qœå/A ŠM4ŒTĸ8ÃĪđKÔ7õ•DqÖŦ˙Ŧ+ũgöėŲōÛoŋy˛ĻũŲ˛eū˜:uĒLŸ>]zôčáĮŋP†ķūŨ3Y+ąŽąäl‡.îŗI\R˛â›j¸ēîn6LĪ/SAĐ ƒ ōdmäȑ2oŪ˛ûîģËmˇŨˇ€…:ô\ũ° ÃįЍt,Öjŧæ!ĖXP&sß}÷•O>ųÄËbŽ÷W\áÍž`%‘øģīž;Ž3”…Ŧ‚Ũ^{í%Ÿ~úŠ—™1c†\wŨuíą"˙—_~ΝuRŸēĨrmS*yBËŋjŸąIåÜđ3üÂ{5•>ĘX˙ąūSúë°Õ1^Ž;V f,§Âá&>´¸‘oĩú—**.å]JØJŖãŪj–5M)!lĨĄR˛ĻiĄ%ŠEãŖGŖW9īŲŗgŧ‚Ģ$D”ŠÖ1v„b-ƒ”<ōČ#qÆ )ã@V‰Ē‰’5Oæ#˙ī˙Û'īēëŽÂT+Ž,ˆg­œ +&RGåfŊŲI'ä76`áCŠõY‰ÜAä-†LšN˜0ÁO7˛k$ęĀkß[l!LB<đ@iÚ´Š¸_đú!B6Ļr{ė1OhO=õÔUTQWmƒ&DÃĀøiP,lln Ž´Em‡œŌá:vė(X'Y_ĄF'o`rũõ×ûķvíÚųø%K–øxȝ–­˛2Ž8ūņĮrÖYg „R‹5ޞ ęÂļmÛÆķkĖ7 CĀ0Ō‰€Nj™XԔ ŠQ -mȒOĮ@Í+%vĮ)JÖãĮã#' ÉZ Q[šŦ¸ČíVĻ#:¤E‹ūĀŌu ´ ˛ōkŦ9JÖ4NëB¤ ™ƒ¸‘Ž\Ye!‡ƒü`Ŋđ`]ģá†âų´ęĸē4Ÿę×xˆã!‡â§ Ÿ~úišãŽ;ŧĨ Ë\"šĸĖ'Ÿ|R^}õUo=cúëNËĻn˙ųĪŧɔ‹ycSrXü¸čB„† ˙ũīũîOôDëĢz!FZwäB׊S'yôŅGå’K.ņäŠéĐO<҇!åԙ˛:tčā7!č”1:ĐŠe˛Æ kĢÎÍ'*[e!úBp„ ˛ •ŧģ랋'hlvĀtL;ĩb˙ CĀ0 ĩ€Ÿįˆē°%"jȓ/:ūûÕf%ŒMųÎj„ÎåMHÖPJ&÷ŸS7Zė,J%ß[ķ ūĩoßŪOI†IŦSÂE&G# 8ˆ’4Øi@IŊJČįšFÎŅĄŸš .ęT?–;>™qbŗV<­§’ |Ķ|ԉ8œ|)â ­8tjžhų„Ų8ĩņÖ[oõÖģķÎ;Ī[Æø\¤)Sô¨å a:nܸqB^uXĢ´Üh}U/¸ĒŒæ }ŦY,ęŋéĻ› ÛŗĪ>ë¯Å…^/"Q§e˛ã–kŖå$*[eĮ˛W¯^žŦAJÁBË@VuEË´°!`†€!N0@1·.´¨é”hÔ˛FžčXVTÜĀŠa­üĘĪ’…zõ<áš5M,åjņ`Y'–č§/˜cz+UŲâ 10P%Mä'^‰šôĒ—xâUFĶ’ųįœsŽÜsĪ=ū[b?ü°ŸjL&[ņũúõ“_|Ņļ ><åbĮaš‚Đq :TŽ:ę¨UČkĘ #‚\ˇ|0nĨcÍe*yâZW‡ã{z8-§:Ę0†€!`†Āš  †Õ5%l*ƒÍĻ)ßJÆa’ĩdÂĢ(Nā3JÎ`|Pĩĸ uhŨ𕴐ŽaMķ$;gŨÕąĮë­Y×^{mÜǧĶ{l"Ā15ĮÎÄĒv\8ÖĘá˜öLÕmžųæ^‹¤3<ĸģnSÕ•ÊŠSš|FKâf›mæÅ°|U‡Ķ…˜L{âÔB}ƒŠŽ˛M§!`†€! ,īRĮZlŨL –´°‘Ž.˧qŠúI§ASUĘArXĪą%šw åŖį/d ̚N{F‰r¯ŧ!‹ęOfA>–#ˆĶX¨˜‚ÃąĢ+ģ•Ā%ŌQ‘8ĐŗFŽĪYĖ;ׯũ"?S‹ŠēÁƒû…‹°wvR2•ठėÔTœĒ>•c#ëˇÛn;ŋĀ_7_đM8vŠō Ŧl*¸ā‚ |˜ĩsXâØÍY‡U‹ÎĨ߀7› p\ÂL÷by7ĻÕ͆€!`k Æ!žÁ‡qÕČ žÖ ÂQĶxōŦÉøUĨdJb-ęÜšsü3ZņT|ˆD f… ))ƒ˜…V3G/įú œWÄABÎ=÷\Á˛Æâz>I9a$ˆÜĨ—^ę7Œ5Ē"ĒĘB]{ĩT]ņÂ"7ŗX:ˇ.’ ”ŊÁ •Âʓ,°ëk ¤+j™S"ĸ7M'žé?Ö:ąH}à 7,¯¨”Ōą2ąŗąĒĻĩЅ  ŋ)Ëæ"މcz’Î‘Ē ëëy[ Í:홨~Xō˜ž„ĐU6Y|˙ũ÷rīŊ÷ʎ;îčwˇŌŊĻa™\_Ŧ”•(=”ĩsCĀ0 C đy/fš3“9ÆyˆZ˛)Đ{>n “æeIĪM2åÖ!-Ŋᅱ<:ÖUše-Y…S‰‡¸`iÂē­h44ëԚ’Ÿ°ĩđ„qUqÎ.TŽĒpl2ĐOdT…>ŦYXģĘs|īŖ*׍'s\kˆœ9CĀ0 C Ļ Ã ÃøqÃÁƒqū@:dmM,jÚÖEÖ`“ŅĨZQķkL5ëįSjWËŦ5†€!`ë ŒcÜ7J9ĒĶÕ(˛V 5Ũ5 ĻA͆€!`†@ų$ütGųŲLÂ0 CĀ0 C YKĘV†!`†€!`•DĀČZ%ŗl†€!`†€!`¤”ÖŦ-X°Ā}ŧõ“tÔĮĘ0 CĀ0 C`Ŋ@`Aå˙ÚSJdŸ˙šôäK× āŦ‘†€!`†€!`¤ Ÿž#‹ū\QnQ6 Z.D&`†€!`†ĀÚCĀČÚÚÃŪJ6 CĀ0 C \ŒŦ• ‘ †€!`†€!°ö0˛ļö°ˇ’ CĀ0 CĀ(#kåBd†€!`†€!`Ŧ=ŒŦ­=ė­dCĀ0 CĀ0ĘEĀČZš™€!`†€!`k#kk{+Ų0 CĀ0 r0˛V.D&`†€!`†ĀÚC Ĩ_0X{Õ[ŗ’‹‹‹eüøņ2aÂá'ŗęÖ­+ąXĖhÎČČđgáځĮSˇeJVVÅŪA2ÜåoŊqc¸wG9áŧ­¤Aƒēž?Ø?CĀ0Ē—jū¸[Į‘ZKÖ¸!†.™™™r衇JũúõĢúž3}5Ž;Ī“N5“LGÄáâîŋ¯eŦĈÎQvGÚEŠÜŋÂĸ˜Ė™ąL^~n”\đˇåŪ§ēūRkoėŋ!`¤—ŌyĨ Ŧ‰ãHÅL•jöÚÉ4vėXYąb…ėŋ˙ūR¯^=_ ,i%ƒ8yÉaá•XÔ|ææ‹äÆ2%§8CrđYËuGžck„sđ]ÚrįįgēôLi´q3|Ūβ°QyîŅ_×N§ĩR C V#`ãŌē1îÖÄq¤VšŠŠŠdôčŅŌĢW/á\§933é(™> 1!ŪüڅÃÂå1Y”[ä¯ĢģÜŪ/yúcRːOß˙ŸôÛû gWsÖ5÷¯¸8æŦkÎÂæü܂ éŊwyõÉo䔺{ģéÔŦZ=pXã C }ظ´îŒˇ5qŠr˛ļxņbÉÉɑM6ŲÄßŗf͒aÆÉ\ō]ÍsķÍ7ËŲgŸ-͛7OI7EAA´iĶF ¸‹Ũá˛2xķWJÔTYž={ļŧüōËrŪyįir™ō…ųË ŋøâ‹ŌŗgOŲf›mâ˛,yŌp‰ôƒÉYgå1I”Ž5YūښžŦ &˝uųÎLw­cÎ/•_)×^|†ÜôHKéŊŨnū;ŅbĮÚ c[áō6oŨL&΁ÄYŖķ˜3 *A`MÆ%*`ĪųÂ^ŒęÄŖ&Ž#U: zꊧĘÁ,ĮwœlˇŨvĶ9sæČã?ŽøĻäGķÜwß}˛lŲ˛”ō"Y„ŒpsúƒÁ7æŦ'ÅEÅ>ž0é„?ũôSščĸ‹|xÖĖYžžaē—sōÔãĖ3Ī\-ŋĻĢž0Ė4,}¯ŋūēŒ3ļBųÕũ÷ßŋ@Œ“Ĩ'ĒĸúÕļüš…1ÉqG^ĄëŪw3į/]ž'ŨzĩīCßv•,ÎÎõé9Ž åˆ—_îül'›ÕŦĄ,_ž<åūf‚†€!P>-Z´đ/ĢŧČī´ĶNōķĪ?—ŸŠŖF’-ˇÜ˛9SĪÂķĩĸŽĸãR8ŽÔļįt˛ö2^—ŒËkŗũ5qŠ2ËÚ×_-ãÆ“¯žúĘ÷a:æÚp4.x:uŧĪy–ÛdZ’´^%c"īžûŽėĩ×^nĄš#wÅ%ĶĻäĶt•zōɎđ{ŊÄEĶŖáEŽLąnŽe˖>'N?ēSÉÕ QGFÕEĶ×Įp­H„ LŦjgø°§eîĖiR¯~įO—ˇ‡=)ûwļ8 _2ęˆ|NAą¸ĩn™ ëÆ¯ooæ C jxë­ˇ¤C‡~æâž{î‘gŸ}ļjZXūōÍ7ß1U{úÜsĪÉG}$øŠēƌKĒ{}yŽŋđ ōņĮËO>Ÿ ƒĩŅūš8ŽT™eõ=ũõ—'lܨQ#ŧ¸ãĻämgā2}úôxü­ˇŪ*}úô‘Ã?\~úé§x|˛“ŖŽ:J †å9ČZ~~ž#Kųnāu "VzđVÄ+ ņŞË.ģø°ž1=đĀŌkĢ­ä„Nß~ûÍËŋâĻGŠ/2Ä|āōüķĪKßž}eŋũö“éŽũú6€ĖwC0ĀËûō‘œ1c†pĀžÍē2TūĄ‡’}÷ŲGvŪygšęĒĢâõãĄp +g×]w•Ûoģ-.ĪÍ˙ã÷ßK˙ūũeûíˇ—O>ų$ŪĘōå%iomNĪwÖąÜ|ĻB‹ŊŸįG˙#O—†O”ûK=Ÿ)Ë Šœ\L˛umQ^ąĖ]V Ķ—:ĻįȚ9Cø„R=dâĉž€ĶO?]úõëįŸc˙ū÷ŋã…2“A<ãĪAĪŽĶN;MvÛm7éŨģˇ,Y˛$.¯'|ĒéČ#Ô ė¸ãŽōöÛoûg(y 8žáû¸g.åtéŌEŽ9æGÚˇß~ģŠŽ;î¸ÃËąDįĻ›n’#Fø:Lš4I>˙üs9ūøãÉVŽKe\:Û-oÁxĀ3˙?˙ųOüšÎ˜DüNŽ=ā‘č9ÎԘŊƒŧ:ėžûîļŒģŧāvĘ)§ø%9‡š¯%}ôŅ‘Fūa7Ũu×]qũCÜLc.i,gzڑ)ÆkÆķ§žzJ^~é%?“ļ÷Ū{ûņquéŌĨū:aA=˙ÜseæĖ™>˛q“qņ67ž1Ž ÜsOß70j0“5ЍĄĖÔų™$Wˇĩ_ÛĢãjeÃ5qŠ2ËÚ;ė gœq†ėąĮrųå—ËÅ_ė?›Aī…œũņĮōŊ#Ŧ={É]ÜK.šÄ_n"Ū‚0]˙ķŸ˙ô7UY=ū†nˆ¯‡+KŽOv`ÉËËu¤m…?÷6o)áŗ Ŧ^™2uŠl´ŅFžÔå;b‡EiØúÎķņˆåž{ī‘ë¯ŋ^~ø™7ožO[ļlŠ,\¸HžsíéŊõÖÎ2÷Ž\yåUō‚ģąč\ŧ  ˙wŪņ˜ O˜ÎĮƒâŽģî”ÜÜ<9öØc}'ėŅŖģ'iƒė&ˆ¸œxâIŌvãåÎ;ī”SOũ› ´ˇˇęegg{ũ´ũ9GšY>øā}š÷Ū{ĨoŸž>ŋ–_Ō^$Wļˇä•Ĩö†gd;ËØÜ×÷\ëŨ+Y"ØãšūmXÖŗnmYnąĖÉsyVŲmøæ C qž‹<ōˆˉ>˙üķũô(/ë'ģŲ ˆOnnŽÜxãūåà 7ô=˛Ŗ1cÆxōhļf3BƒĀŸū韓oŧņ†'$<+y‰FîĮ”!C†Č¯ŋūęIØu×]įĮ§ŧŧ<˜Š[´h‘ûūbiÛļ­ßX:Ŗ–5ÖF3vĨâR—†ž4Tēvëę7É]xá…rĀūHۊûėsiĩÁîyUė–•Œ+ásū$—ˇ[W—÷×ŅBŪũ]^Ō1¤|öŲgōÚk¯KŗĻM=qËÎ^&īŊ7\fģvžņ÷3ܡHį;’ĩLæÎëĮAÕŅĸũ„9ggi͌Ķ…q ˛ũŪ{īųĨD/ŋüŠœâŽá‹/Ŋ(Mš4qŸĪzߍÉĶO?-įœsv™ãæYgéfæž–ûīģߏc~øŋ.īŧũOi× ˇœÅÕ/l¯ŽãU=ŽÕÄq¤Ę,ktÔ˙ûŋ˙“W_}Õß0oØ-2áÁÚÖŊ{wÁ‰g 7ÜÕW_íõÃŪšIĘrŨēu“ĻŽŗ•įx{ÃÚĮ́īĪKٙ„3%Ķ0ųAƒÅÃŧÖ­[ģˇŦŖĨaŖ†2xđ`ųōË/]=Ų¤P˛9ü䎸â iܸ‰3ƒäQét,ŪyûĐōȏžvíÚKįΝ=)9r¤O':Ž„Īũ.ä;ÆcF^¨ë˛[´hîõŊ˙ūûrĐA;BÕX(¯S§Nn|+ų x8ÎéÆu!k¸éĻ›ēéėŽž^Ā¸… xũ7pžá†ë}[CË7)ũڞ=zúŲŸwūy~|ËĘĒoÖGÛWÕáš8ŽTš rÁē5n ČėšĒ.ŧščLŦ_8âˆ#|2ĻkŊ)Už˛>æft)QĶrÕG/D‘›“ÅúČÆGFÃä§ tFôié´ įÉ K×đ?ü Ûnģm<Œ yŅĄ2Äąč–8J˜ûŲ AyZohܤˇÜr‹0]Ë[Ą:>ô‹.t“_íYß ëeH“ú%8€„GÃũûåÃa2vä›%aßyģŌ÷ĀSüûZą#nEEn÷¨{X,_Q$Yę)„æ†@"Ā—ļØb‹¸F,>,šė˛Ëüs.žāN°„=ķĖ3Ūō…!`čĐĄžpņlŊûîģũlëYŖVžĶ1(|FķđŧäŲ>ŸŖ2kFwYãd•ą€¯0āôšÎš.ĻE™ŊšôŌKũĖ éúœ'īa‡æ,XįÄķRé8ž7Ēa–éøĄųulÂ'Łsę@8<ÃēOÛĄ>äCJ–šō?‘įH6njšÚ^ˆ43Q{6ęņ•žĻ õõr˙Ē#\Į‘*#kėxäĶŧqađ;vė虱‚õ™gZôá‡ö¤%šž(Ė4 ^øDéGĮäĸ‡Œ4:Žy{LáíÚĩķa.:ōėÄJF< ËŒ4:TØŲÂKš†édûîģoō‚ËssęÔŠ~J.˛–Ŧč›6mšˇ é3Ų ÜT#ÆÜīŋ˙.|v‰)ZÆÔQgf„ zåšōÆ%Ļ™ea=KƒĐ͸ĸŗTÄÆ ‚E§ĪyÍ fė´ÕŧČã+#g}ˑ°T˛>˛˜ #ŊUĢV[Îß|ķMáCžŒ}„ŅĨc*úpÄãHã Ė43u`Š[åxë9>aS 3Ũ=ūü¸>–$Į3kÚF-[ģeGÚŪęįjâ8RedÅ‰˙øĮ?ü,Hėŗ(ŋəĖÁ–ųÜV8ž=ļpáB˙QÉä‰g!?ë č e9Ū´Sásāôs΃"¤ˆ8Î!šŧšąPS.oƒÄkgä}čJÔQŅƒŲ—é]M'ŽüZn˛_~ųÅ[!´8ÚÃz?Ū&X”I1Uŗđ“|ˇ+¯ŧ2ŽOËFŋļ-,Ë+]˙5Ž_ė,kõ` ÁƒE¯ŠŖūDX=ëãĐIįĄ“i8ĮņrŽÛŠQÄiÛõ-‰:ą>NķĨĘč§L™âĄbļÅiyjDÖ;}Ķtvģ`$ŦįäÖCåS­Īú$īw…˛I‡Ąë~nYĄwęĶŅß|ôv9čÔË|ēģ˙K›[Zé6†ēŨŖ…2yÆb™?~œÜv|'˙đRėJ4ŲCØxĀ€ÎXĀ]ãÆ}1<Ë!ĄcāF ۚ8ŦIl.Ār„>žõŅû]땨Ŧ@ŠŽY—Ĩ\Æđ`\ęXũpZ×č8Āx–Œá`Š_fH& ŖČ)ú8ˆgŒŠę¯H˜1ëb[^~fšĀ•ú’—öp­“Õŋ<}•IOį8ráĶsdôŸ+¤į&™r됖ž*Š û]•ŌTŪÂõaAeCĻRíôeé! JĮfq?oDÔIMĪząÕĮĸ‡KÃzQuĶ­Ē_ĶŖōŅ0S—˜ąĐ…ųC}Ô1Ē/L'¯ĻëÍĻáhy.aeā͞Šû‚–n‡#kŽ+”ļRŌÆĩzåeîB–4ˇgÄŊ˜¸sįģįšÔĪ­#õÜIķė_\Ú2Ū/üE´†€!Pm@.pŒęĸDx^vה¨Š~õĩ| ̟,žôŠŒY<ŖS—xŽņü'O8nßž}|\HöÜĮę™hÜxå•Wüį9°Üą–ML1†ōÔ7 '+/‘~ō%Ē*ú˜‘Ķüø:ūUĻ|ō—Uŋdé5qŠR˛FÃk‚ãfį†f}ëÎÔ\Ģ[ëŨnM¯l˜oĨ%r•Õ§ē,Āē(‰đĀ8Û‘55ėjŦjáš7'CÚ˛VĖ[č’‰Ōžuá*†âož!`Ô *úũļt´*Õq)Ņs-Ŧ_U¤ŗŧf€[zÃÔ/SžXrÔU…~Յŋ.ę̉ãH­$kt<Öļąqīģą. +[øÆv&;¯=4lėvsŌg-ƒyRVÚŧđ<Ã}ž—•é~Á ŋHæL˜&ã?!ËgŒ“ãÜz™đáUšŨûė*iAAAšzĒĸŧaÆÉŅG-˗/_­ŧ˛ŌBáŽ]ģĘO?ũFųķŠļaMË[­ "jf šUĢĸ.ŊôRß'ŗŗŗËm×sĪ='ƒNY>T˜J˙ åS9į§Ŋ.\(]ēt‘ &Ŧ–å”SN‘?˙üsĩø˛"ĘĶYV^K3 C Ļ#v˛v÷ŨwË\°Æ¸`uŲvÛmËÕSåíˇß~2f˘„d­Ŧ´°r×^{­lļŲfa”Ÿ×ŽhÖ¤ŧU /#P0+Ŗyĩ"‰ßŧ7nœ¤BÖ9äĄ˙;6aNHĒ÷X˛üÉâÛˇo/-[ļ”6mÚČFm=z´zčĄ2}út:t¨üũī§ŠÅŦoßžžÍVd:5Ũ|CĀ0ÖeŌJÖx›>|¸wÜqqĖžûî;Ųe—]¤uëÖ˛å–[Ę˙û_Ÿvß}÷IˇnŨä…^Ũwß]vŨuWyņÅ}Äé†n,@×]w?Ūx㍸N=‰–—ŸŸ/Ŋzõ’=zø7wˆƒÆƒ>čŗ0ÕČF }÷Ũ׆$4kÖL6l(īžûŽßDA}^zé%Ÿ§Ŧ4FŽé-Ô777×įá_eÛPŲō´W\q…'Ûmˇ$šZ]W1ƒŧ`Š9ė°Ã<ÆGy¤īŋ˙ū>ŒUsįw–FÉÖ[o-{īŊˇŒ?Ū§1BöŲgĐ? 7Џd}—ŧÉtrč×Ŋ{÷–œœÁŠDŊ¯ŋūúr‹„œ|đÁŌ§Oyâ‰'¤~ũúņß35j”ŋO6Ųd¯˙ÕW_ëkŪŧšŋˇčÃüÄMč’å+¯&ËęNv~˙ũ÷ûzÜ|ķÍBŨÔ=ūøã˛Į{Č| üą\y啚$§Ÿ~ē 8P/^,§žzĒė´ĶNņ4N’é\EȆ€!`ŦĢ,]ē4K–,‰š;6wîÜØ)w˙ÛéŌßb§?09æĻË<ÜÃÕm‚(Ûš)ö¯ũ+.4g̘›žˆšišØŠ+b}ôQĖŊmĮ‰đ2nPŠqŧķÎ;ągŸ}6ÖŽ]ģØoŋũsS'1G°bŽhÅyä|úé§qŊz-xGØb;wŽíļÛn17 ÆÜ soô>‹€b?˙üsŦ¸¸8öĀÄÎ=÷\Us°ØöÛoīķŧōĘ+ąŽ;ÆÜāéĶËJC`Ų˛e1Gđb'NŒë[“6TĻ< vۈcŽôƜåÂcîHIŧ>z˛ŽbÆuŨtĶMc\C˜węÔÉûôgúÕíˇßîûĩ#ö1ˇ‹'öųįŸ{YŽĢ›vķįôĩ8Ÿ—õ¯ŧž[–Nʧ_/Z´(ŪW_}uĖYąĘ*Χ9RįÛāˆgėÄOŒšgNlöėŲ1îYGŌbnŠÜëG‚bŋüōË*:AQoueå+Ģ–•OuWÆ˙ņĮũu:öØcãĪ€PĪ›ožkÚ´ŠĮŒ{Ԝ!`éD`ʔ)~ü„ņü†Á]Ür˙ėå9îŦū>NTo"~Ī‚oĄ—ņŠglČË8—hBÕA֜!æ, ~đTp!`‡ĐwŪy1¤äŊ÷Ū‹'ßzë­~`#p:tčO‹ž$*OeÜúąØīŋ˙ŽÁ¸ĪāæÖŜƓ+7uŅēÜyį1÷æī“ËJĶüũû÷_…Ŧ_Ų6Tļ<ˇV0æ,•žJČočÖuĖnŧņÆØe—]æ›Dßēčĸ‹üųË/ŋėÉQØV~%.Îjs–ļ˜ŗ:ƈw֛P4áyy}ˇ<\îHW*Ž˜~ũúÅEŨôgŦqãÆąYŗfÅŪ~ûm-ī¸ãŽ˜ÎrģíļÛâōœDÉZyų’õĪōō­Rh\îsgŨöÄTŗ;Ģt ˛úõ×_Į6ß|ķØüĄI憀!Ö&YKÛ4čĶO?í97iŌ$n„dZpà 7Œ‡9!N2=ĒŽ5.|įDLôt5?QyĄPtũ˜ģŌrüņĮË;ėā§;īēë.ŋĻ,Ė­Ë¯ŋūO.+-.”⤞m¨lyÎ2ákÁ7bĸSbë:fL9̧8Ģ‹đ‘æ3Ī<͎5Q?c:‘ū„ãZģÉĘʒ§žzJ äãËú—HgØwËĶŲĒU+˙÷b$ŅõW‰ĘuVYqä:žÄ”Ļ^KÖ­qÎ"{=˜>捪âō‰NRɗ¨Ļ’/QyåÅąĸE‹rų嗋ŗ˛Ëc=ĪŌ Ayūųįũô'רŊ¨ÅĶėÄ0 ÚŽ@ZČ •zč!q͊ĢāéŦMūĄŦk‡æÍ›įČá`é,~į$íá‡7Eâuđ!:Ö¯pāXĪÃe\˛ō|b’n:É/ž>üđÃBɀun K¤ ëYVZT†×¤ •)OËMä×ĖXk¸ãŽ;zōyqĶŨžŠÎ"å×įũđÃ>ėĻHåüķĪ—É“'ĮĶĩRœeNœί…d=YYŽŧžK™Ét˛~Žĩ–|4‘ĩW'f šÎčIDATt’'˜e•šdŊ'kÉxąxōÉ'}?$mž6mš_Oɸ“O>YœõIœ™ž,•åæKÖ?+[^™•q‰nšÚLÖÛąÉ%ú‘mĘÅąļē™3 C`}A -d âÃāĨ– —…ÖŧMŸuÖY~“‹Áą†„,`XģØ pÄGø…āšŸČ,Ôf`Â*σS˛ōŦŲÄņ#_Īž=ũBfôĩmÛV  [lą…¸ĩO~đdÃ%—\âFvŌa‰ĸ>ČtīŪŨ‚„A3Yzi7尝M œŋõÖ[$yWŅ6TļŧoŋũÖoŠĀj‘——᭐ÎūķŸžĩ3 ÁUW]å-ežaîŸ[_č¯!›Ø@†įã3l>`sœŨĘlD(˕×w“é|ũõ×= qË üĻú›UÎ9᜞Šķ§[nšÅo0`}ˆ~J{ŨÚ<Á* ésk1…t6´đumÜ1ĮãûDtîúCyųț¨Ļ’ŧu÷Üsoģ@š ›3 CĀÉđ ×$xkĮĘÂÔĖ/,’q3‹ĨwĮúr÷É+ˇØâņSūŅ7aMdG'¤…íõɃW¸3 9v,ē5k~§h˛|ėđä§WS)/™>,un-ŸĸJ$ãúhû¨++-*†+Û†Ę––­įĩ3m 3|Ô1=Šõ6ü\2LëqÍ!¯ŧP0Z—¨īŽŠÎdåĶŦģL&r´Ģ"͆qeåKÔ?UwYųTĻ">¸íĩ×^âÖĻU$›É†€!Pí`čҟ™R+˛Ÿ›ŌŲ€˛*váĶsdôŸ+¤į&™r됖~ր1(ēL)-s C† )ĢŽ>-JÔøÄÁĖ™3ũÔoōÉ>¤‹õ@-ZH*åŠlÔO6Ē\"’–JšĘ$ō+ۆ˛ę’¨œ˛âjfÚžDD4n¨(Q#^‰>ÖÕʸhß­ ÉęAĘęŖáZÆd:ŗ•/Q˙TeåS™ŠøX4™"6g†€!°´ĩ•ÅĨ~Æ  Ķ | ͜!NXøĪÚ¯dÎ}nÃOĪ'KˇøĘ!åxæ CĀ0V"PcÉkÂ8ĖkvUēĪxŦĸ­LCĀ0 C`Ō˛Á`•-`†€!`†€!2FÖR†Ę CĀ0 CĀH?FÖŌš•h†€!`†@ĘYK*4 CĀ0 C ũYK?æVĸ!`†€!`)#`d-e¨LĐ0 CĀ0 ô#`d-ũ˜[‰†€!`†€!`¤Œ€‘ĩ”Ą2ACĀ0 CĀ0Ō€‘ĩôcn%†€!`†€!2FÖR†Ę CĀ0 CĀH?FÖŌš•h†€!`†@ĘYK*4 CĀ0 C ũYK?æVĸ!`†€!`)#`d-e¨LĐ0 CĀ0 ô#`d-ũ˜[‰†€!`†€!`¤Œ€‘ĩ”Ą2ACĀ0 CĀ0Ō€‘ĩôcn%†€!`†€!2FÖR†Ę CĀ0 CĀH?FÖŌš•h†€!`†@ĘYK*4 CĀ0 C ũYK?æVĸ!`†€!`)#`d-e¨LĐ0 CĀ0 ô#`d-ũ˜[‰†€!`†€!`¤Œ€‘ĩ”Ą2ACĀ0 CĀ0Ō€‘ĩôcn%†€!`†€!2FÖR†Ę CĀ0 CĀH?FÖŌš•h†€!`†@ĘYK*4 CĀ0 C ũYK?æVĸ!`†€!`)#`d-e¨LĐ0 CĀ0 ô#`d-ũ˜[‰†€!`†€!`¤Œ€‘ĩ”Ą2ACĀ0 CĀ0Ō€‘ĩôcn%†€!`†€!2FÖR†Ę CĀ0 CĀH?FÖŌš•h†€!`†@ĘYK*4 CĀ0 C ũYK?æVĸ!`†€!`)#`d-e¨LĐ0 CĀ0 ô#`d-ũ˜[‰†€!`†€!`¤Œ€‘ĩ”Ą2ACĀ0 CĀ0Ō€‘ĩôcn%†€!`†€!2FÖR†Ę CĀ0 CĀH?FÖŌš•h†€!`†@ĘYK*4 CĀ0 C ũYK?æVĸ!`†€!`)#`d-e¨LĐ0 CĀ0 ô#`d-ũ˜[‰†€!`†€!`¤Œ€‘ĩ”Ą2ACĀ0 CĀ0Ō€‘ĩôcn%†€!`†€!2FÖR†Ę CĀ0 CĀH?FÖŌš•h†€!`†@ĘYK*4 CĀ0 C ũYK?æVĸ!`†€!`)#`d-e¨LĐ0 CĀ0 ô#`d-ũ˜[‰†Ā˙ˇw0v[>žŗÁÆxž ažđb6Yė%ˆ° H,9 !a‘X˛"č"EX2#@älŧ ˆl‚A€8ŽÃÎW×g||§îLÛĖĖĩgū’îtõŠSU]_÷u˙>UŨWD@D@D 0ēž'NœXĀK." " " " E ´™X;vlŅ>å'" " " "P€ĻA ‚’›ˆ€ˆ€ˆ€Tƒ€ÄZ5¨ĢO(H@b­ (š‰€ˆ€ˆ€ˆ@5HŦUƒēú‚$Ö ‚’›ˆ€ˆ€ˆ€Tƒ€ÄZ5¨ĢO(H@b­ (š‰€ˆ€ˆ€ˆ@5HŦUƒēú‚ Ŋwʔ)öüŗ`“rhĀ”9;5ē nÍÍ ‰ĩØøíĮ[ˇnŨ–ipņâÅÍlË84ocyÎËÉģocyÎËU_üüņmŧ>rļXŽëG׏_#ž×GÎËuũčúņkġņúČŲbšŽŸŽqũ|öJ?›ökų™ož_HŦÕÖÖZŸ>}š×–"^po–Uũօo3hÁ ~âWūŸŠpy´šÕõŖëG×ΞÁˆVŋ4ÁAß}Vôûƒž*’ Šĩëׯ_j/^”ž÷-ž÷m´UĘį|s6Õ_Ę7˛ČąĘŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ubžļļŨVS!ąVSSkŊzõJSžåAŽ(ŊŒ­'Ę|ßķŅ_õÅ/^~čú)ˆ<<yéûŖīOŧüŅ÷Gß˙ˇA÷ߒņīFüž8#ļÕŌ/55‹{_Č!´˜ ‰5Zđú6Úŧ/ķmšŊŧN%ŋJvÕ_zĘYÄ}ņ[v:#ō¨”ŋĨ×Vdš´”eǝëëÁSŧ*åņõ2ßĒ~‰@äQ)/~Ģūõã×{Ĩ­^ŨQ‰Œė" " " "°X+; īŊ÷žŨvÛm6gΜ˛’ŽÛ7ožņē”šsįūŠN˙ũwc<ĶĻMûSítæĘ?üđCb´`Á‚åĻø.72UX…§AW í6ŠÂ<ōîģīŪÔ֐!Cl‡v°#Ž8ĸÉ֖™É“'ۃ>hûîģoZ§GÛˆĻž={ļe7Ųļf˘a×_ŊŊüōËVWWg ļõÖ[ÛņĮokŦąFļNš‘ÉúBŌ—_~igžyfúė¸ãŽåŽ+ÅūЧžjüqĶąŦĩÖZ6zôh;ōČ#­˙ūMööĘŧđ vĪ=÷Ø}÷Ũg̝žzĢŨŦj|[D@D@VzĢDd­ĻĻÆöÚk/ģņÆmũõסûīŋßžúęĢvK_q]ĀAdW\qEģôUŪčE]doŧņ†]zéĨöüķĪÛÕW_m“&M˛ķĪ?ß-bbËé’K.I"ĮŊ6Ûl3{ėąĮlģíļsĶJˇ…÷í°›nēÉvŨuW{æ™gėœsÎiz0Ĩ=šķ ŖÕV[­ÕnVEž­J" " +=•>˛æ‰lm°Á)Ōôæ›oÚĖ™3SÛk¯ŊÖŪyįëÛˇ¯}ôŅæQ$7bωLŨzë­Iˆ}öŲ)útÖYgŲ¯ŋūj§œrŠíˇß~Izlī¸ã›>}ēŊõÖ[vÜqĮĨ~˜úBD}øá‡Š­C9¤YŊØFŅ<ŅĨ>úČļß~{Û|ķÍS4o“M6IcAŧŧũöÛ6f˘$ƈ,N:5 šqãÆ‚ƒú=ĸqD/ŧđBãX~&LHuŋũö[ģîēëėŗĪ>KŦvÛm7;đĀ ÁtņÅ'ú@8­ˇŪzvÆg/Dn¯1;úG,Ų>|¸}ũõ×öĘ+¯$ư ŌČšøíˇßĸqŧ÷ī“O>ąÛoŋŨ>ũôĶ´îšįÚÆolŗfͲ[nš%ņ *ēÕV[Ĩčâ#vįwÚSO=•Dņ/p@bJģ¤ösj|ÉÎãEl›1ûēŊË/ŋ<‰VÎ1kđ}ôŅT ÷ķĪ?ÛÃ?lø0fSÉ\D+ëâ$ž Îī°Ãŗu×]ˇÉæ‘K/‡{GņM§?" " ž÷!–Z-oZeÄŅ„ĸ‚ˆŅŌK/Ŋ”""O>ųd*cM$"qÜŧ_|ņEģęĒĢ–™æBđ!Å|2„?žöĢGMõ‡6Š?ęp īžûŽ Üúoz…&+f+$W%Gú&šļĮ{ØQG•ÖļqõõõéC}ĸaūVd'bhQŖĩ×^ÛöŪ{oëŪŊģĨô´æškĻhS‘Ôûå—_RQ{Ųû-ß"ØHœÃ×_=‰MÖķqūųß׉Hë?ū˜ĸf”û‹›‰0n¸á†‰SŦ#FŒHūŒ‰¸]vŲÅ ÔėüSŪŅ|ĶÁ鏈€ˆ@§&ĀŦB{÷ōĻUFŦå b„ņ5dĻ1‰ŠđāSx§Ÿ~ē!:HLų]!BÄôÖ7ß|ĶÄĮÅŅ…­ŋŒŽJîØaÚ‘ÆÔáe—]ÖÔæŸÉ 6,Ugē3&ĻwI^NžcáéE5L˙ÆäĮm0Bˆđā‚—Ã2ŽÁG›eōúí5foŋ|ë1F”ãfŒœãcŽ9&EŠsėąĮ&ĄÆ5p 'ØŗĪ>›ÆÆņ3N1ÖōņĐãvåũcīHžåũk_D@D s@¨=ôĐCI¨ÅûnŅQļ(Öīi+MbpDI=ôĐ´‰Š@nēŦG"ēš§wŪ9­YB„jüüķĪ͚,Ļ@!ß}÷]‘'ĻUYķ„đj)!ʘŽsaD›Ø˜vcMO\ļEbZ—béH¤×^{-E‰ât+Sĸ”‰'&Qáe&ĘĘb5aDĒXįĮ–W„0åØZj¯1{ŋœ[Ļß˙ũ$~?øāƒ´voŖ6˛-ļØ"šqî˜ęŨf›mRä#ëôØgē›sŽ ü`Įt5m3US%‘æ>Í×ûÕVD@D ķ`ŨwjčO‹–üāĶ’ÉB77Ûļø€Aߞ%ĩ6}ö’ÖšUīX7Y^ŠņÜsĪĨ'CYģÆk-ž& O2ÅÅT%"‹ųN;í”mėšįžIlņZ ‘Ŋʍ†ukŦbkŖX ÅtS¤ˆ>īˇEâ¸xę“čái§fLŊ2.ÄČI'´LŒé‚ .H‚„h"ëĢHL_ō0ëą(gšĶQ3ÚgíE9â•(žžËũrÛöŗ÷ÅC‡~x:ODĪx聇ˆˆ!2‰–rx‚s‰8e*ĄÍ”7cÛtĶMsE:ņÄĶD˛ĀŸ‡˜ /š:šoŅ㒟ˆ€ˆĀĒE€ ëŦŅ|Í÷<Ō´Y%}5°o‹ą3ëÖeYF‰!h›ųígÚ#ī4XMŖfģsBëU_P딸ō!ą–‰ pŧĘØ'†ČÁŽßü‘næÜ´YhO"īSeøqŗ§Œ1#pø¸ōŗûL­QFß´Ë{W>͖:YÁ? ĮA¤‰wŽŅ}pœ|XĢÆkLpl/‰ã‚‘3ÆNbK9į”õl´ĪÅÃĶ”ė;ę9SęEæí9fú…/ÉĮČąúšÆN9ĮÍzEÖĨqœ7cc‹/Įëœ(ĮŸëļ+ ?ˇ´mÕâËq(‰€ˆ€t.åB Ũ@ĐĮ…Ŗũ¯ĢgXCãjŦ}ˇęnGüŊŌÜķ¸ÅÔbdm“ŋ””aēISؘ —Fjb#흏7Wúâ&“‹nĐņ—Č3hnØ|`Ā ‹uBŦŸb­Đ3Ėąž^ŌuCÔØ˙GoûˀŌĸđؘō" " " " yĖPøúiFé÷ž˙sÔ"Ûë^iƌõæūpÂ-ĻŦXÃąÆâkq#ØŽ˙×{ëë’@ëŲ¸dęī#ęíßGÖÛ°5%Ú"PåE@D@D@DĀ Ė™ŋ8=¤ÉÚ–”y3tM×= 5 c=:bÔĒXÉČOōÄ Ņ5lžˇĐūg‹Û—*žîíō~}ēĨW|P_ID@D@D@ē:ŪS;uú"ķ—߃ĨeûüÛ<÷ˇē&ĄÆ[x{¯Ô*jÔiYÈXķŠPĸkŧúÁƇŪÄOëlōÔ/mÔShN Gí"Ŋ~ƒí:ĸÁÖXŸ^GED ĄæQĩJëÖ*>+JJ(ÜßÖ5Ûhđ|ûå÷9öŋ?ÖŲoŗēŲ´956snÍ2ĘąųaĘ"" " " ]ƒáŦŪõ‹mp߅ļÁ …6|đ"ëĶ“—ë×'Æ5i•"jNĒĸXÃ! 6„Z´­UÛĐø¨éÂFWúAl/ONú#" " " ]œ€GĘX‹V[[úB1¨ %TYąF㈯(ÖhÄ÷i˜ÎXĶŖnøH´AAID@D@D Ģ@/‘ĸnrí„@CCåĸj^¯œ[VŦyå‚-vę?Ã$ąVŽTû" " " ]šÉu“/++EØj›&ˆĶŸ•„+Š5 Š›wJg.Ō|-~ŠĒAMID@D@D Ģ@3ųQVūņ28‘o)ĩ(ÖŧlŪ0ē8‹Û–:R™ˆ€ˆ€ˆ€t%Ž›r[įКPïUą†“7EyO1ߒÍË´ÎHĀ5“Í÷}[n÷ũ–ļ…Äš7PŪQkv/×VD@D@D@ē:J:Ē5.Ë%Öbc+ÚalCy– ”~Ŋe•Š€ˆ€ˆ€ˆ€T‰€ÄZ•ĀĢ[(B@b­%ųˆ€ˆ€ˆ€ˆ@•HŦU ŧē"$֊P’ˆ€ˆ€ˆ€T‰€ÄZ•ĀĢ[(B@b­%ųˆ€ˆ€ˆ€ˆ@•HŦU ŧē"ūKaĀĐl¨ÕIENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Delete.workflow/Contents/document.wflow000066400000000000000000000160551445560650400312630ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx delete "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{10, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Diff (Side by side view).workflow/000077500000000000000000000000001445560650400274505ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Diff (Side by side view).workflow/Contents/000077500000000000000000000000001445560650400312455ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Diff (Side by side view).workflow/Contents/Info.plist000066400000000000000000000012111445560650400332100ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Diff (Side by side view) NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Diff (Side by side view).workflow/Contents/QuickLook/000077500000000000000000000000001445560650400331465ustar00rootroot00000000000000Thumbnail.png000066400000000000000000001110641445560650400355230ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Diff (Side by side view).workflow/Contents/QuickLook‰PNG  IHDRkĄ_ëViCCPICC ProfilexÕYy8U]Û_ûĖį8ĮpĖķ1Ī2™įyž Į<ĪCD"‘Ą”D‘D*C(eLB¤"’(¤¤¨I!ßVĪķŧī{}×ûß÷Ύ¯k¯ũÛ÷ē×ŊîŊ×Ŋ×ēkĀžLˆAĐek¤KqvqĨ`§pČ@„ęĄcmmßũ—cũ€vĢFĨvmũĨ˙&fđņö˛†ŧ|ĸŊCa| „ŽwDT Č Xū$>&ƨ0fŠ‚„ņô.ö˙ƒWvą×oŒFũÖąˇÕÍŽHĨFų@„å”8oØI 9Ė'0 FgkzP}`? ëH†††īâ^‹zũ›˙ÃTĒ×?6ŠT˙đŸg[ÂëFG„P~ßü_Ą!ąđûú}á’bš;6,đščCÕ7ƒ¯\đų+"ä÷˜Á:‡o˜ƒ,ÛŒa^–VaMŋ(C[Ãm!ëˆŨ] ŋ3Č/"ÆÚū/ųĄÄ=Kayo´Áßv.QMwĮŒ–7FÅÚ:ĀXÆ]Ņqv0†# z“`īô—ʏ¯ū_rÂ/ĐĐ䏂c˛Û<æüÁáfģ>Ā}!”€ž DÁeæ@č˙UJ?@…kâāēh ` ˇ‡Û„Øō—žŪ˙’ūnįˇûO‹ā ëÆūĶįŸŪ(pŸÛ >0ū[N…ûØ­Ûõ.Ú#0í_}ū­ąkīˇ72ĩ2īeļūö %Œ’C)ĸtQ(M”*  XP@ Ĩ€RAé ´Pęp*0o`Ëūû¸k?´Ņ/îlx‚šc\ģûė^×Įßځ˙Ü˙/@āĐrËōßã{ūĐ Hˆ ôˆĄčĀ_ޝ$Å$Ė[Z’"'#+ģ[ũ˙æØŗū8ģjû{.‚X†˙% P@},ú_˛Āj?Āįø/™`ūâԌxĮFÅũą‡ÚŊ ĐÁĘx€…ßŗPę@S`ė p‡ã'ŽÁ(’@*Č9ā$8ŠA¸Ē@h- tƒû`<ã` Ė‚ˇ` Ŧ€u° A"AŒ;Ä A¤iB9d š@ž?ÅBIĐ(ʇŠĄr¨ēĩAŨĐChš„æ ÷ĐWč'‰ "˜ÜaÄ„ Ba†°GėGø#"‰ˆtÄ ÄYDâĸŅ@Œ#fKˆoH€¤A˛ ųRH¤Ō éŠôCF!!ŗ‘…Č d=˛ŲEÎ"—‘?P#Š‚’‚ãÔå€ōFEĸĄrQŨ*T3Ē5ŠšC­ ~ĄIh.´Z m‚vFûŖãŅčBôtē=Ž~‹^Į`0,Œ2Æ゠ÂÄäbJ1 ˜.Ėfķ ‹Å˛c%°X+,ƒÍĀžÃ^ÃŪÅ>ÅžÅnāhpŧ89œ!ΆKÃâjp¸§¸w¸M<=^¯†ˇÂûāđyøJ|;~˙ŋI` ˆ4ö„ B*á,ĄžĐG˜&ŦŌĐĐđ͍ԨĐŌĻ9KsæÍÍ"™(NÔ#î#ÆO¯ģˆ“ÄU‰$LŌ&š’bH'HÕ¤{¤W¤ ZFZiZZÚÚÚfÚ§´ŸčđtBt:tît‰t…t7é†é–éņôÂôzôTúCô%ômôôßdŦBrj2,’ąda˛Ų‡œNžDžGžgD2 0ę1z3aŦdėc|˄aa2a bĘaĒcbZa&3+0;2`.ažÃ<˂df1a aÉcidyÆō“•›U‡Õ—5‹ĩžõ)ëw6N6m6_ļlļļqļŸėvö`öSė-ė/9Pâ6ņ8ú8–9™8Õ9Ŋ9ŗ99_p!¸Äšlšr]âäúÆÍÃmÄÁ}Žû÷2 6OOO'Ī{^F^MŪ@ŪŪģŧ(ĖJå,Ĩ—˛ÂĮÅgĖËWÎ7ġÉ/ÂīŸÆßĀ˙R€  "ā'P Đ#°"Č+h!˜$X+øB/¤" T$Ô/ô]XDØI8S¸ExQ„MÄD$Q¤VdZ”$Ē%)Z!:&†S +{"ŽW/–@H(IJ”JŒHĸ%U%Ã$+$'¤ˆR:RqRĩRsŌ,ŌæŌiŌ-ԟöîqŨsjO˙ž_2Š2!2•2S˛dYSŲ4ŲvŲ¯rârŪr%rcō$yCųųVų/  ž ž+2*Z(f*ö(n+)+E)Õ+ŊWTöT>¯<ĄÂ¤b­’Ģō@­Ē̚ĸÚĄúCMI-F­Qíŗē”z°zúâ^‘Ŋž{+÷ÎkđkP5Ę5f5)šžš5gĩø´¨ZZ¯ĩ´}´¯hŋĶĶ ŌšĻķIWF7JˇI÷ģžš^˛^—>RßH?[Ȁlā`PlđʐßĐß°ÖpÅHŅč Q—1ÚØĖø”ņ„ ˇ‰ˇIĩɊОi˛i¯ŅĖÎŦØėĩš¸y”yģÂÂÔâ´Å´Ĩe˜e‹°2ą:mõŌZÄ:Ōúļ ÆÆÚĻÄfÁVÖ6ÉļߎŅÎÃŽÆnŨ^×>Ī~ĘAÔ!ÖĄĮ‘ÎqŸcĩãw'}§|§Yį=ÎÉÎ...­ŽXWG×+ŽßÜ ÜθŊŨ§¸/cßŗũ"ûėčÎáâ~ĮƒÎƒęqĶíéäYãšEĩĸVPŋy™x÷ZņÖķ.ō^ōŅö)đyīĢá›īûÎOÃ/ßoŅ_Ã˙´˙û­€Â€å@ŊĀâĀ/AÆAeA߃­‚¯ī„8…4„âB=CÛÂČaÁaŊá<áÂG"$"2"f#Õ"ĪDŽD™E]‰†ĸ÷GˇÆ0ÁÉá`ŦhėŅØš8͸’¸xĮø›„LOČJx—h˜xų ę ÷Áž$ž¤Ô¤šdäōCĐ!¯C=))é)oŽJ%¤§>N“IËO[;ât¤=;ũpúüQŖŖĩ´Q™ę™eĮPĮ eÉgËú•í“ũ(G&§0g+×;÷ŅqŲãgīœđ;1”§”wá$ædØÉg§´NUå3ä'æĪŸļ8Ũ\@)Č.X;ãqæaĄBaYĄ(ļhöŦųŲÖs‚įNžÛ*(/Ņ-i8Īu>ëü÷RŸŌ§´/ԗq—å”ũŧxņyšQys…pEá%ĖĨ¸K •Ž•ũ—U.W_ḒseûjØÕŲ*ÛĒŪjåęęޚŧZDmlíûkûŽ=ŠĶ¯k­—Ē/o`iČšŽĮ^˙pÃķÆŗFŗÆž›*7ëo Ũ:ßÄØ”Ũ 5'4¯´´Ėļē´Ž´™ļõ´Ģˇ7Ũ–ž}ĩƒ¯ŖäķŧNBgzįÎŨÄģßē"ē–ģũģį{÷yž82ųåE܋ͩÃĶčéė—ô/ _qŊǘ›i˜UšŊ3§?7øÚîõÔŧ÷üŌ›č7[oĶH …īxßU/Ę-vŧ7|˙äƒÛ‡ˇKK›Ë>ž˙$úéÖgí΃+Î+oŋD}ŲųšģĘžzuMa­į›õˇWëĄë›ßŗ7Ø7Ē~¨üč˙éôķŨfüvëėļØvû/ŗ_Ķ;Ą;;Ô(ęī\ —??ž^…9„ Ėž@ ũÃ)~kĀt‚u`Œ„ķ_a` į§×ÁwH J‡&ęˆjxŊ€EuŖŨ1Ķ‚=„ŗÄsã734O‰¤G´éÆč—Č8F)& æT–kŦ/ŲŲ8,9s¸†xx-(š|ã|‚ūB5Â_DÕÅâÄīIĨ ¤“ötÉlËÉĮ+\Sü¨,¤bŖšĸV¯>§Á¤Š e­ŦS­ÛĄ7¤ŋbHcÄjĖg"eĒlĻgncábéo•f}ÎĻž ^Ų¯8'g1W[ˇČ})ûO¸WytzŽPgŊžú |É~‚ū z–AÎÁž!ĄņaIá™Ų‘ųQyŅ'cÎÄæĮÄ8p21ã`JRlrĖĄ ęaįTŖ4# éRGy2č2v2W-gMgä´åÖo>1{’õ”Q~ÂéŌ‚Á3;E2gŨĪĨוŧ.%]/ķŧ˜[ŪT1Y‰¸,zÅâjlÕņꆚĄÚutõ˛ Ļ×Ŋn$4æŨŦēÕ×4ŌŧØōĢŽīļL‡æ‹NĮģ>]áŨzŽÜËī=ßW{ŋĨŋįÁŨ‡CÆß<ē<ûÄ`„<2ũ´aôā˜á8y|æYũÄÁįĻ“ė“o^´NeNÛŋ|šųĒæÂläœūkÖןį{ߔŊM\px'ģȰøķũŗKÕ˧?Ļ~Šûŧđ%đkđjÂZîˇęõŒ?ŧ~Žl…ürßŲŲ€ƒķE!°¸‚C LÁ™t šBČ N!~"C‘Pqh"ēc‡%`pEø‚)Íĸ(‰—–…Ž›^’AlĮɔË|•åë:;…Ø3˜+Ÿģ™į%ΧĖī&%Ø&4/B•ŗ•8-y[ę…ô7&YU9ų…bÅ&Ĩnåį*[jŒę{å5Œ5Ŋ´âáh8Ŗ[ŽWĨĶāŽá Ņ”ņĸÉĒéŗ-ķmK”5› -Ÿ¨Ŋ‚ƒŠŖ’“ĻŗŠ‹™ĢŠ›ũ>§ũÖîļļžöT7/Go'_+?sĶŨ@Í õ`ųņP0Žp–r$}6Ŋŗû)î]üˁɄ§‰ŪOęIn;Ԟrķp}ęÕ´ō#ĶĢŽöe,#eIdæøææŋ~b8īã)BžâiĮ‚č3Ņ]EķįPÅ%–įcKË.ô—}*gĒPŊä^™{šåĘtĸZ篺6÷Z[ŨBũuÍŅnÜúŲŧ§Åŋĩ°­÷6Ô!}'°ŗėî“nLÎŊÔŪŽžĩ~*÷>ŌPTzŦ4¤4ŦôDvDüŠÄ¨ČĪ8Į3Ļ âsü$4šũâķԇé÷/ßŋš›y;;37÷zvūå›ųˇ6ŪíŧĮ}āX’^Öųh÷)âsöJ՗¯_Öxŋ™¯'~¯ÛXø)°šĢl{q‡˙¯ņĮ˜o) ˜æƒ;āÄšÁyû Bq1Š”E ˇQĄ¨7h/ô"&ŗÍÉāâÃŦ„šĸ$q‰TOC§ᑪ •äDFk&fˆyŽĨõ*[&{‡=§—07–{į-ī Ĩ‘¯„?C LĐFHK˜_-˛!:.Ö,^*qXŌCĘPš"ŊĩįšLŊė9WyqŦ„âĨĘ*"*;ĒãjUę‰{-5$4QšSZ×ĩéøę*ë1č­č\6L2r3V5a6ųlúĀŦÜ<ÁÂÎRÖ kõÚēÃĻĐ6ÆÎÄ^Č~Įášãu§,go%Wzסö}yûũŨu<8<>yvS‹ŧÂŊ |¸|V}ø•ø‡hrĀk}o𚐸PÃ0ž°ux]¯<å­Ã bgãzâ+¤&ø$ObHÚH~u¨7ĨîđųÔ#iQGÜĶmŽjfHeōcĖBgũĖūœ3Ÿûüø?ũ';O5å7œn,h8s­°˛čōŲ‹įƊ+JJÎW”^ŧpĩl¨UĄp‰Zyârį•Ĩ*†jÕīÚã×ÚëØŽ›ūŽĄą&RŗnKTk}ÛįÛrîÜŊKî éž}§7ĨīSŋ΃éGÎĶķ<š˙4vĖā™ÄsÆBĶF¯Rf?͟X{Ÿ˙ŅæËđ†ķîø˙Ų[Ú]0JœõĀ…#r÷ Ü+köĒ!Í o=ŌÍûgũ`jđĖ‘Jaž8Ą Q˜F@0ߛA`ŌD2â2â âRiƒLFÖ 'Q8x!fbCh$ZŠž„žÂ0cŦ19˜~,k„=ŠíĮ‘pޏbÜ<^ ƒī%0|7i°44­0ķ %> ‘rHĢ´N´í0›)Ĩ'Ō¤_acøH%¯0Æ0ū`:ÂLd>ÉÂĘRÉ*ÍÚÎfÆ6ÃĮAā¨äÔáœäŠāfänãqáŲâ­¤XQ~ņÕđī ô &Úūwá6‘QC1ąIņJ‰IS)Qi´ôĖž>™*Ųlšxy_…}ŠvJVĘ*†Ē&j–ęž{5â5Ķ´ĘĩÛtĻu?é“ T ũōkL.›ž4K5O´ˆ°ŒŗŠ´Ž´ņĩ ŗ ˇOqČu<îTä\īŌã:âļ°oĮĮCÃ͉šæUáũĐé'ëīP8 BtC…=‰āŒ ŒjŠūë×|€”–ø$I1ųR ÃáCŠ;GBŌ?f„f.gd΍8ž‘—~J4ŋąĀėĖxŅĄsF%öĨ!eGË[. _AUŠÔD^ģ\?ƒũĻ_Ķ…–wí{;ĸ;‡ģI÷¨}- G.ƒeCK#ŖYãˇŸ“_ØL§žęũ:ĪúÖøíû¸ĨC“?Į~q]å][X?ˇ!ųãę&~ËvÛũ×áßķ‡,ŧŋUúĀˆ2b 2č´Ž  Ėa1†D"åTd>˛fäR(OT!ę1‹ÖE'Ŗ;Đ?1ǘĖ,Āęcŗ°Oq\¸\+wÅ×âœ7`îëKĶM"Ļ_“ĖHí´ÚLÚuē@ē—ô6ô} j wȊä&FuÆn&cĻf7æ–XV,ë6ļgė45œœk\ÅܚÜK<xÍx7(×ų‚øyų§ĘŊ„D„–…¯‹ĩãû.>$qEō˜”Ÿ´ŅYŒėšÜŧüS…{Š]Jˇ”á4TĩQ­MŊsī}1˜%}ĐAéŌę‰čkė3L4*2Ž3i4­1Ģ5o°hŗėˇąž°™ąũb9đ8J9Š8;¸Ä¸fšUėģģÎãÉC5ķ ō>îsĶwÚ čt.¸'äk˜x¸wDiäãhŖw#ūk‚JbäÁē¤ī‡´R2¤‘ŽXĻ—ũš)},;k"‡'7ęø@ådôŠžĶt^gzŠøÎk—,•—y”3WŒVæ^ą¨Ŧ~WÛP—ÛāyCų&×­ĩæéÖļö[ĨŠ]>=nŊ{ī+< Ÿ+w|,/ę1ŋŊĀöĖvŅųsä⸒ŠRë Ũ•ĘĢ/ņTV\žZį 7¯)×u4h_īk4š9×ÕŧۚØļ}ûôĄÎĒ.ņîk÷¤{îËô_{Hû(wæqÔĐü›‘ëŖ´c!ã'„žž|6Å6íüōė̉Yæ9ÛיķõoîŊZØYd~/đ‰o™÷#÷'öO۟_­t~)ũ°*ģēēvã[č:e}ü{ėqŖō‡Âģ?Í~>ÚTŨŦÚbŨJÚz°Íŧíĩ]ŋŊųËč×É_“;;!;Íģãí'/ˇģzˆ¨ o?žÚŲY†÷/ķØ>ĩŗŗYąŗŗ} &đ?Ž?˙+v•1đžûųŦ]tīFÕîå?Ž˙Sßy‡x>a IDATxė|UEöĮOzGņ¤¨(Ø;‚ŊëęÚ]ėĢŽmíēû_ëZv]{YëÚËŽŊlØ+" Jī= iī?ߓœĮåō^ō’ŧÎäs3wfΜ™ųŨš3ŋ{fî}9S§NMˆ;GĀpGĀp‰@nƒŦ•WĘpGĀpG@p˛æÁpGĀpŒ€“ĩ|qŧjŽ€#ā8Ž€#ā8Yķ>ā8Ž€#ā8Ž@FĀÉZž8^5GĀpGĀpœŦypGĀpG #ād­_¯š#ā8Ž€#ā8NÖŧ8Ž€#ā8Ž€#Ѐp˛Ö€/ŽWÍpGĀp&#āÔ‰DBĘĘĘä—_~‘ß~ûMæĪŸ/M›6â9p999ę{xÕÄ㑛ķ$/¯zĪŊ9ĄŠē´”]t•#Oī.-Z4]Ž/h ūyôûmeĮ›UŠŋ×Á-”5•9ūsSYÃŪ nÄņ‚¨ :Tš7o.ûėŗ4kÖLIZ^^^#n}ãn×ÖŽ/ūĐQsĨ[—ļ’H7ŧ;üWž(įā1Å\!ŸHiøWRšSÉs “yŋ-’ëīØ>ô‘ōgg›LËsÕÎĢoĻũŅäĶ•Nzŧžņpēŧŋj!Āĩļū€ŋ*ô÷U áĖj[ŊĮÁĖtē”#°Z#ØÆŒŖ–ĩũöÛ/iQcÂ,ŸØË'u&9/ÃbUÁƒëĖĩœY$RP&’_ŽDŽä˛VŽÂĀÖ8įㇴ%Á/(Ë éšŌjívräš;ĘÂv-äŲ˙ŒYnBŦͨ&ũ1/7WrŖG…õ—k3äŊwäŅGM’5âĮˇÃûķ2,¤1āąĒô÷Úŧw’._mHWÃëŌh``+))ČÚV[m%ĨĨĨz0š—––čDˆ šûĢ\Cģž\ךK2/ŋDr”Ü”…kZN\°ĨagûđíWd÷ŊŌP¸äā%‚u-X؂_Pœ#}÷î!¯=ø™sriŌ¤‰ö‰ÚžŦžUõGĘ-..‘ßĻÎVāæRF…ĩæYž,Y˛XŪ~û]9ō¨cdæĖŲĄc> í)-“ڇåār‹ą÷ëÆs_¯Šũ~ÜØœ“ĩZ¸ĸ ,üü|éÚĩk-hsÕE€‰hƌō /șgžŠŲ™,ęŌQæôéĶåÅ_LY&éÅÅÅjyéŌĨK nĨ:ÁCԊŠ‹‚•­™NĘ „‹-’§Ÿ~ZFŒ!§všląÅÉ6Üpà Ēŋ}ûöI‚gí˛ ą.ÕÕË íÄáSŸh}Ŗõ›6mšü÷ŋ˙•sĪ=WåI‹ĻšĒ„i+¸@ƚƋŠ’_Lka"7ĩDX÷´î÷ã7CåĒ Īëīë(}ˇŲEq ’J‚Šƒ%niČÛžs;™83WõAvĀĄļ]UũąI“ĻIü.\$_--úŦ/ų…Ō¤iK).*­ZÉûCŪ‘ãN8Iú÷ÛB.)–Ĩ…%Ōēu+5j”ĩV­Z&ĢíDŽėõEĮgŸ}&ŗf͒ƒ>xœVVŋį/'˜āŒ3ڎŠōŖõÖ˛öāƒ&ëÕoúĸō´ˇĄ†i/ײVP’Âp=—–”I~ _…Á'ná’BšįÆ+ĩ[Ũ{Ķ2qä‡xdō‹%Č%$đYüŧv-eņâÅÉží‹ÖŸ†.;ė°CR†øLœå¯Ŧ?Ū`Î1qNŽü23GÆL-–×_}Y~›ŨT>ũvĸ˟.Ŋ7ßB†~öŖ|ũÕ0iŪĸe°†Zä´ų–õOģžčZc5dķÍ6W sŋ~ũ䡇’īžûN6ß|s-KûQĀ/ŨõŽĻũõ×ōæ›oJŧžŽĢûauÖ_ßũ=“>Ŋ:ʸe­šW=:@~õÕW2zôč°,đļj)((XN˛<ÔÄŨ}÷ŨēĮÉōތ.Ķą˛~´íčbālÛļmRmCŠcϘ[{&Nœ(‡~¸N ֘LtXūTífâ)**Ōe-lB8˞:Á_&6y?úøc9îØcĨOŸ>7fėØ0ųąUŦé%!oq {É:a•RÉōLŲĩféËôQŋCũŽ­¨u($…=8æŦ|d9âõEF›BC’úŅgųãúj¸4ä˛pMhí),i&Ea]3',k–å†%ŌŌ°āyëŲGdæÔIŌŦy‹āO–מ}Hö?öl ´†ĨÃpä—IqYØĶÔ˛Š,]ēT Kō:ĀĖũãŨwßĩ ú¤Gå—KŒ*돴ūˆ.ČÎŌĐ?‡š,Ā ¤hÉ<ųrȧŌt=å›ߐßíš™ĖĪ=f’,˜?W6ÚtۀCŠĖšģTÖė˜[ž/3”Ģ{´BģŦūO?ķ´tīŪŊŧFᚃß|PŪ/BŦöĻp‹Äûų­pŽ„.øŅûôTũąŧ°€Ąé¯ˆđpŪâQŸũŨŽ™û+"ā–ĩ1É(†3?–ĨŸ~úIš-ZčāDÚmˇŨ&ģíļ›üņ2lذdü AƒtÉkįwVKé: …<ųĀdšÍ6ÛČŽģî*ŸūšæyīŊ÷kK,Į™ž¨˙ÔSO ēūøĮ?ĘQGUiž_ũU­„ņrnŊõV-÷„N~ø!Y‡åĮŗĪ>[>úč#ō˛!šO<ņ„ĘYŪ8÷ŨwŸļ•ö|øá‡IŅē§“1Ô'Š-°ü`ŗĮ{Ŧ€ ÄcĪ=÷T ׇåëK/ŊTfĪž-ûîģ¯ŧôŌKÚ+#^o&ËwÜQq7̚•Š#u`baäléŌ@Đ°Ļ…8âíĀõ՗_Ę5×\#ôĘ pP/ČŽ,øœ7Në¸{ĀėÆoLNîCB[é7ôŠ›nē))oeŸŧ‡z¨ôīß_vŪi'Kß-č{üņĮĩŸˆÕīˊúaEĻ~ųEumŊõÖZæû!>úĸõ}ã7´ŧ]BŊ~øaŊ6Zf}ë­ˇ4/˜?–GŅKÚyį'÷Ũsėĩ×^ō÷ŋ˙]õžú.¸Đ/į͛—lĂÃꛭpQāŸ,g„ĨĐÂĸ`Y Œc§Ë]o•;+Ž=Ž<3XŌJeIYäᆗËä…ˇ@Ö´-áūIᏆøÃ’}œ~˃âŪ{ī­XrÆû"ē,|Ģęv}–,(ųķ )j";ė}Ž.ɗ˛üIŌŖį–2kF‘lŊŨî˛Į^‡ĘÜĀÜ´í…áŌŽ#ũMõTô#ę`iϟ‡\Æ4ÂČs/žūúëz_mŽķ!CĘĶÂõŊ9ôé-ˇÜRû}1âŦŋüã˙ƒĩņ÷ŋ˙Ŋ|ûíˇšį§‘#åĀ”ũë_Ōģwo)n“§ŧÉa<=ōČ#ĩ,°ûî›o’éŒGΆ- Üãô9ú)õYĄķŽģî’-‚Eą‡Ĩ_Ģŋú ¤?ÖõũP_ũ~ãnnY[†E•g z8ü0éŸxâ‰rĐA ŲYgĨû6&L˜ 7ų;īŧŖû˜tžyæÍ;iŌ$%[Ld­[ˇ–{īŊW~ūųg]R„(°4€ƛ-[0čtîÜY—ËZ…}#: †áĘ+¯T’†uk@ mûīŋŋ~B ĒøˇpáByîšį4īNa’fBˆįãME>)‘Ēžƀm ûĢp´…ē0°A pÁyL•°@ūķŸ˙”/žøB—H ׊*Ģ—ą‰lüøņËՇ=R”M:]œ˙å/YkãE]¤Ä•ë†{„ŽŋūzųŨī~'\\ēz“vŲe—)–Ŋzõ’ûīŋŸ(-SOÂ?ĩ „:XĐWöūāԋ‚eą~k­LŽ;îxp!…{íĩg+ ËE[ę>ļĨK UĪâÅK”Č_wŨua˛,û„ æÔĶNÕO‚lŊõ6„uĘ)§„I{¯ ?ō.ŽxtĻåV,ČŨļÛn „{˜’ĸ?†`įęÃũ /<,Ĩí5?ö Ú`õcrĸ~ėgē!čÚnģí{(åTW9Y/ĪcõŊøâ‹•¸÷ęŲK~äaÅ{Á‚…jEĮgŸ}&Ümeŋ@ØvÛ}÷Đ›ĘÔŠĶä›0y‚í:ët ũî]ų1ėå{õÕWC]Ņ/ËĩúĢUF˙‘^aĩĢÃ0•(K@Š/‘)‹›HûšÁZ”ĶDJ°Ž…}ká}_.wŌQo=Â?,k„ą8. ¯‘Î( —Ģe“WŽ~܇å-|jIåHįūãĄčÉ'ŸÔĨAn¸qțÅ-Ē7U,‹Ã˜ÃũĀ‹‹š) ~ah[č­Ō¤mk™1sēlĐĩĩlĐmY´x™…K—;ķĘÃ6^ņԁíWˆ{ä‘GÂŊŪ1|ž¤….÷ķŊAtéXÅx …Đ?đƒō^x â!Ļ˙~2a¯:v˛ßŊûÛUJüØį9qâyíĩ×åå—^–‘ŖFĘUW]ŪR}LæÎ§V˙AƒĢđĐpÂu D˛ŧ˙Đ1rT–ūu˙ũ†eŲ‡åī7ü=`VĻõøöÛīt Ę_|.ú͟äË/žÔ‡ļ*|đ!Ą~īÉíwÜ.×^{ÜsĪ}ÉūštÔ}˙ĶŽ]‡ũ;Ž?4ĒŪû;}ÆŨō8Y[ŒC € n\plŋũöjáŠī?˙ųO@^ĶÁ’É9– ą”`yÃũųĪVĸÆ9Ö)ĸ+ޏBIÄŊĻŌY‚Ÿ4B͉ gå@Ȍ0hBøĮĶ#{]ČËDH],ŸÅaqIU“$ēŖmĄNė­Â‘Ģ„‡˜Ŋ(={ö”ĩÖZKî¸ãŽ”yiV™ãŽ;N-JʈN.qŦ*Č¤Ã–4Čuˆˇŧ¨3/ƒ°ĮGyԟ<8|âŌĩ‡^ ,žÂ!Ÿč°IP…V>€ !$Gė°Ã4ĢaI€ŧXĖØëͤIžZģhD‹ëŽŖˇk×^ëĨ|!Z?*R^Ž0]šáí@ō—ëĻ{’4o¨6ÖfâûöíĢQģ랋>40Ą1éQ×˙û~-âÃ5Ŗ’~ōÉ'ËēëŽĢųzõę)sæĖQBÁ#>Úļčšf¨‡z­Xö ¤ Ņ,\ßâ0I‡fjÃ5Ë o{â—;#¸úáŌķ?¤2„ƒ )Íɓæyá ŌđQ\ë3HEÅããčo掞újéØąŖôčŅC 2Š01Šú# [˙4Ũŧ Ë DŦ$Ĩ…‹dú¸Qōx Ũ9yÍd×Ũ>ĶGx1"ģâpĐnޟŨ åu)¯i§Nô“‡ÂhũĘß&-—a`Í5;IM{Čc?ärƒÅūCí<Ŧĸ7Ģą0âŪz‹í' šéæ›4Œeū™Ž ãĪI'ŦņVúĐŅŽ};•ųėŗĪeėØ1Úŋ$7ø¤Á:>´gh˕2bä}€ĻGy„ĘqÄz¯•••.ˇ]%Úl˙´īÔcoÕIœŦÕVíŧáĻ7ŸIæ•WÂëųaŌdo 2Š`éÂa’ĮŲ@H>#LސŦsXŠ6ÛlŗäÅÚfųŅÅōc˖-“e@˜6Ųd­é8ä)‹ÁĘōRˇxž6ÚHËĻs“EGŧ-”ƒN“ÁĮBČũË/ŋŦ֞Ŗ>ZÛĪ ÖvH-DįŒ3ÎŦ]F (‡^žå„īôĶOWô˛Q}ŊõÖĶvŖË0ŽÖ']![´qéęÍ21mĨ,;įčˆ;Ž“—}Ō Û$BÎ툆MËŀ„Mū`šæškj,ē",l8,¤”aŽúą ļ2!R8 #ĪaaōFÛcu7úiT0ēĸųąš´iĶFõĄĮōãķ2búaŽáÆoœ,;LJ6ōĨ{„ūĀŪ-dpä7ũūÕu,{sߗ>>,†Ī–Ė™%­‚u´$,ûæËĸ=˜P.‡écɖkl×Í|d¨'ÎîM „¤EûņęO?b, á¸'L/>‡É[šsįĒįz9¨‹åŗē‘úc‹— ‹ļ…rĸÄŅę édЃ7ÖČC<–§h^Ę#oaaĄļ‚Ƨ,ŠŖ9ΙüigTčÆJļÖîh}Ā'ŪFžÆ;t萴™å ԁN–‘Ų/"ēzcA办%ōąĮÆ\´ūÄæWŽ=õ´ÉŒs #Ī oL4L<‡žQ–ČĮŽĢ˙XmōŖŪārûíˇ+–Ļ×Ę }ėßcŠ]SĻLQkBš%kŲägu´|VoĢa[rGõeYŽū6ČYŨY+Č5Ƙ‘ĄîäAVUHúŦ,|ÂÜ_\;öbŖYû¸7ė ÎÎņë2løX9­šæ˛ÖDZ‡_ hSq´ –˛­÷8HæM+ŋũ0TfŽûQļt¸´ ņíš7 ˛MĨUmŨ,/šŌ$ėYŗ>Ŗ€EūYß2Ÿ>J˙ÃŲ9>Ît˜ŦFFâĢꏴ ܋Âūģ‚ÂĨ2ü“˙Č×īŨ)c†ŋ̟œiŅĸy §MäŖđ˛ÁÃ÷ß ˙{úžđærA kÁĸŽYĒ>DĐiũ Ÿ°ÅÛš]{ ãs/˛]K,ũÜú0˛<3žđVēõ#Æāh~Î)k.}‡sČãäœgŦŋQ'ęŗ¯BÆ}†Ŗ|ú;iŸ|ō‰ 80Ų^ôÖW˙ŗ~W_åÕwW°ũß ¸emHĒŽāfåāĻg/V öP° âÅÉ`ÅRÆō ûJ°ˆāl@ĩs6~ŗ1œ'Ãø Kë›øœ°Š1qąũ–[nŅop­ŋūújí`Đ€PĢÎʉú,GDķaqšđ ĩŽŧ„ĀwĘŦœK.šDËa#pemaâ`s;ídylˆŖ.q ƒ`E|ˇnŨt2žöÚkWĀëäuƒ 6P–{Āņú°oĮ2´‘=q´lŦ ü,˛œÆFa!ûųį§ Øt ´?^oޤáüķĪW9,C‡rHg+ŧÍ1y0s€ iœ3‚aâ™Tė /2ŅI^z`oäķĪ?¯u€AvŲO†,m§DķZ]ČG?âE‚‰'*ÔÁœ•mõ$}”Ëa:9g}ÜŅÅH&+ ]ôu–ûŲ Č„GĮ‘ŸīÎŅtØõĄ¯ģÉXÛ? /Ÿ°/‘žB}˜dŠK´žčŦOgXŅ^Î!i­Â~ģDn°J‡Ĩá°>Ž\iÛĒŗüūÜåáŋ –Ãūtmx[7,\C>6ɇ@^^‰´)j"mÛđÛ Kĩ†#;Įˇsp°0ž…Mž¸(&–ôx$,š~ôGt.* ûÖÂRč}“ÂeŪ‚É2gÖ$É_2GÚ%~•Ųŗf įļa[` oÄ.ÍX´Õŧô+ĘG—9ģfv]ņ‘ąÃäâaÆ–ī!Fܧ<@ܐ#ŽU‰čØôėŗĪĒ*ĶCš”…eĸĘaîsú0mŒŖėæaÂ,tŧDÄįE wlī0](f/dŽņ Ë?ē9('*gíi žĩ‘~Äy]ö÷ƀW]ĩÁ´ČÚ ‡Ī@Ä⯓?O[,{Ō‘q¤s`šÁbà ƒãfNåLo<-O^Ū„Ã F9¤QâąL0HÚ MįÜtŲ9ų°nP7Ģ7åSņ”ÚÉķômK´ŽĻÛō[Ø|ȒåE§éĨŪXŒ(ßęmi6q°_ ’dņVĶIū¸3|Ę V.˛ÄC,íē˜đbКA—FŦÄ“Ÿ˛i#}„ƒëŖ.æŦL‹3Ÿ6aá˛ĨHâŲ‹G\Ôrb˜YČņâ xŌFĶOyÔßÚdåS'Ģ#į&oõāÚX?ą<ø–Žŧa…~œÕÉdčkfU3ÜMÎdŠ? Ŗ8ĮÛ¯_]… Ž%„˙‰_:Hˇ5Â=IsˁŦY[¸š/˙ûf9čÔKāoá:CÖ ca1ŧAZ"ã§Ė—é#†Ëųƒšë^+Ž!ä î`e÷aœahí¤LÇ8Ã'“ūČ~,Ę =3g͖ã˙ö‹t]ˇ[ؑ&aÉē}¨O3iô/\4GšĖ|J.ēđJÉũ8?Iøhnŗ@ÚĮɀí:é5ĸQ6õ´žG}­>œã¨?‡ĩ‡8ęoéŒܛ–†Ŧ9ÚG˙ ø†…•KœÕ ÂG{!¯čÆsŪeO&}-z?üøãúđ‡E yî5ä­­VVĒú[­nĢZ¸>ûģ]S÷WD`ŲŖõŠiSÜ|L˜<õsF˛r3™°•xÎ9Lž¸TÎd, ]Ļ'zÃ19ķŖåÄufp3gz [9V~ēļÕmyĐcņ–—p´&zyLFDū!cé‘h­åę´ō­,Ã&*ÃāmņV.>$ÆōãGëMŲč žknÎʉęˇ8Ŧ  ōLL”ËÁFš ‚„97ũV+ƒ°Äaš5]äab˛%Î& |¤Yį,ĶããŦžøČĐ^&sČQ/&Ãh,?ēŦ^čĀÅÃč´øT2ö"ĩŲhŊĐGĀ ęG]Í7–ĪĘĒ˰]7ęCũ:ļm-mۅ_…øBt`ŋÔ Ü žü’L9Iã%„Đœp $ôƒ`é*h"ÍÂI‹9_…6îlģå5?ŪNʍĮY8]Zeũ‘>Mģp­ZŒß~¯öË`•ás#¸NMšÉד†ÉĢĪ˙+–öÚ7x‹âÚr÷ß%I×}†yíS?ú‘GëlqÖäĸcéQšĩ‡,ËCYÖOˆŗxęÃ9ōčåĀ •ĄoąOÍåY?Æˇą9ÂV>zŦ~VæĒļkXŸũŨ°wËFæeq~–v#"=‡I‹Ņtâ,đã74rgyLņœ[ŧų–na“ŗ›ĖĘą2M.ęsnÎĘ ŋšhęNKˇ8|+ßŌâyŖņvnž•mžÅãGãĸ:­<|ލl<&FtÅ1Šįæˇŧ&“*8r,KŧÉO‘1Š0đQ–•Į3Œš6Qm‹ĨĄÛtXŪh{-Íä(ÃŌņ­žø&Cäđ-ŨČ3)ÅķGÃČÅķX^|\´\ ã[yVâĸįÖW-ŋĨEķEËļüøæj;ŨĘ6ũkŽÉ^žPoFĶp`Aã š=–sí‘áV5.3d­,œŧ™#dŨ–ķĩŋÄëjeā“féø†I4ÍdLÎōŽĒ?Ö,ņŸuÖaēG K}–4>둗ęŌIáÛvaŸä.{hŸčŲf{°1|Ŧo[,ž°•E8ĖYģ,.ÚFdĸa“ąļš~ÂŅzpnyņIˇƒ´¨NöÄq¯ZÍūņR /‘™Ū¨ŊoL¯åÃ'.ęVĩ0mÖšžú{3?ץÅaČë°æĮŖLõ¸Üęũƒ}Xėíâšŧõh{¯ĸMtb°žB&c>r6ą g‡Ĩ[8礑ß&IdŦ\|;'Ūôqnų,.ęsN:ÎōG͉ˇ0į8“ˇxÂv˜ #OuÆEãÉom!ž>åRž-[‡åÂĀŧˆ U 5 ÕŠ ‘ŠåT|Î#/7H•ʤŋČ÷ož&ķ'ū ĪN5ž&ŠŌ"Ē3:­Ē?F¯IhJ œô ˆ~P_ŅĐÁG¸ų–^ÔĒD=šσ qNœĨg×ĘÚ•ˇtâ,ŪŽŊ…‘ÁÅË"œî°ŧĻ×䨃ŕk}ģÔô[>Z8ōâđŖm@õGhD˙ęŗŋ7"ØjŊ)žg­Ö!u…Ģ;ļO‡Ĩ!öư!™}0ėuay…%Kžˆn“˜ųāf‰–69āÛcžå!lKf ! ˘&k0>ōv 9ęÅälõŗŧ„ŖqĻ‹|Ņz“—<æHGÖâđ‰ŗø¨Ķeu0YęȲl´ŽĻŋž|°ÄšÄĩdI Ë)[ xËKõŖT凞Ā[ØŧŨŒE R`×ĒĒü™ĻgÚ!_,•˛‹ĨAÚGØH×ĀĘæĐ^ŦĮė™dĪ'á&L™ČFû××\ŧo}|¤ãĸrūY?‰ÖÅōZžä3č_ĢWT?įČáhųÍ!O:åDņä'-Ëō4Uëī÷x;œŦÅņ°#°’0Đ3€3s0‰3ą!ŸÉ ™IžÁ?:)TV´M$•Éؤ… į–ßÎ-?éæėÜ|‹ˇ<æĮã-œIž¸Œåŏ§Ž–ÉšÉāÛyTG}3i3yŗŌ įšI‹OôņzŅöHōņVzĐad ũĩåÛĄy1 IDAT2폆9uŖ|&i#0ÄáĖįÜŽƒé§ĪsÎaēKįĸēĒ’1ŲĒŽ{4=znų)‡ķx8OŪx~ōX<žŨŋQštíX•ãWĩūž*c]YŨ}ĪZečxš#Pl2`ÂãĀ2c…Ás{Ī”ŦÕ *>KtŌ­¯ÆÚ5Œ’›ŧŦTU/Ō­o˜åаõÚl‹éL׉§ŪUõĮT¤$U;M.UZmļĢĄéjŦí]Õú{CëĩU'kĩ…¤ëq"ØĶ(ēM^LŠæˆŗ's'k†JõülNŽ”ÍÁuæ°kÉ5ļ띎5ŅŧČCÖč'œŖĢ.\Uũ‘˛­ ÖĶĩƒø8öņp*™ēhWCŅoCŠWmÕ#ÚgW…ū^[ínHz|´!] ¯‹#ā8Ž€#ā81ęæ1.VˆGĀpGĀpj†€“ĩšáæšGĀpGœŦÕ Ė^ˆ#ā8Ž€#ā85CĀ_0¨nš‹M´|’aėØąúÛt•ŠâįM6ŨtS}MŋąoF­ OsGĀpę!ā/T/•Žž%Åo?ōAĖ 7Ü0í›\ŧ]5aÂũÎÖ[l‘,ą.H›ÕíģīžĶįģMuQN˛5<Ąž|0vܸqŌˇo_ÕR×õ¤Ė%K–čGjëĢĖÂãŲGĀp$nYKBQũžM„emŊõÖKKÔL+2“'OÖīņš<Έį=ôūžQåC™;밃~Eœ´LHLTy†Ž–<ȚĨeĸ‡ŧuéŦ.”Yãg˜Œ8YZĻõD>YĶK™\¯ĘĘĖT'ēŌšÚБNˇĮ;Ž€#āŦ~øžĩ^s&džXnߜáÜž`n?GR\RgœDōÚAņœãöŨw_9öØcõ{K-s–náĒ|“7ŋ*ųlĨ[ũĖΤČrđķ6O>ųdĮLu˜œųV&á>ø@‰įņt“Kį[ž•Ņ‘NˇĮ;Ž€#āŦŪ¸em%Ž?˛Xv gáכÃ/ûIԒf“8„°}pԊĩt–ÖēukĩaøūûīušßęÛzë­õ÷‘ūųįÕ*5lØ0ũ¨f˙ūũeƒ 6H ĶũŅGéīöQOŦXėÃņ“GŸ~úŠĖ›7OķīēëŽúe}–PYžŒ—?~ŧū„ŌN;í”üŅcUVņ/• učĐĄē ŒÕ6đ;ˆÖ>ķûí7ųúë¯õ#Ą›ožšū^"j§L™"_|ņE’vØaĒ+Ų‹/ž(,-wīŪ]žũö۔õūõ×_åķĪ?WÜĨK­Š•I€ë‚ åO:UÛxāj;ŖõŪf›m´Ūԅ<ÛoŋŊę2dˆôéĶGåã:ŦäŨ9Ž€#ā85AĀÉZ Pcæ€\ņåq–.KķJ+ÕYC–<6[#iĶĻMS˛qØmˇŨTBEøđÃ—ŲŗgËW_}%ûīŋŋf]´h‘ÆrČ!J2 eXæĖĄ—âĶącG%KX~zôčĄ"2~“đˆ#ŽP‚„,?ƜĒ<ˆdččŖÖâ˙ū÷?éÖ­›Ŧ?ūXIfīŪŊĩ=X(!‹¯ŊöšĐv\ēz“öÉ'ŸČ Aƒƒ#F$Ë% E šëŽģŽŦŊöÚB9ÄÅë=zôhéׯŸD~„›ßúDųČ×á$ ”Ũ9Ž€#āŦ NÖjˆž‘ ûŨĮĘÔ ‹CÖōŲ$Nĸ‚›4i’Ė;WÉB§N4K2_~ųĨú3fĖPrņÃaŅa{âĐ9sæL}á4Ķ…lÖŦYdƒ=ņĮ‰'ęŌĢũÔ yR•‡eŒō°JŊųæ›˛ãŽ;&ÉI´č‰Ę`EŖ,t’Ŗ|~Øk˜ĩŸzCö~øáĒĄųĻOŸŽų DXŅ…CžúãĖb™ŽŪ8ĘOōķ›œcƌQ>âhžč'.^oęąÕV[éu8p ŧũöÛJ,!˜äąüækÃ?ÃČÂî;Ž€#ā8ÕAĀÉZuЊÉ2)C˜ô9˜”ã328ˆ˛&Î&u&zK”,dXh Y–Eą2á6 o’ĪōāCXL¯Yī% ËÜ[oŊĨäh5Ö ZåŠy¨ˇé"-UyVƞ{)aŲ%×^Ŋz‘%éÛk¯Ŋ” !ƒ ’Å‹Ôĸ„ŗ2­ÎԟrŠģĩŋ}ûöē7 yd qnu6ņâÅ+āDí‡$snu°|Ņē˜^#€ņzsũŦāĮĩ&?>ņä7čˇ4Ęsį8Ž€#āÔÁ †Č1)ãXۃdp@ ˜ĐŖ‡Å‘Ž,ÎōÚš…ņąmŧņÆē— BÁÁęÔļm[Mã3!8# Xâ8Ÿ3gŽÖ9ˆē8°NAú Mԋ4,e‰õ×__XÚŖâĶ•!射Ę&{ģŦŪÖō› ÄKzi–=–bižÕ‘ŧœÅÍÎ ƒ>õ6Ëú‘!:An §Â‰zcŨÃēÆ äe‰×ękžaÅõ ĄŲhŊÁŨęM=YZ…ŧĮ6ōpđö­é0ŊZ ˙sGĀpjˆ@Ū…^xU ķŽļŲl†,° ‚dD ‚=‰0›á!]X‹ æĐÅ$Ī÷Ú6ŲdMc/Kuė…#9€ ũôĶOēŋ Ãū+tC¸FŽŠÖ.ôãCŦ:tč yĐĮ7äą6ąĮ ‡élúĮĸ—Ē<Ęë¯ŋŽKĩC,kČŖG;Đ˙ęĢ¯Ē ¸@ęØáâŗ%ėyÃgšË¤† ų={öTBFŨY*…PņĄa,Š|L˜BaŖũäE/ŒēSˆUŧېQČĔüėAÃēyc_ņæ¨?ׅeXęN^ZĒzķRu LpäĨ Č8č~`:6 ÖDŗŽNVžûŽ€#ā8Ž@ĻøGq3E*"g–Č$ŠÍéLܕ9ŦL“]vŲE „MŪč‚dppnŽt&zHÎä –÷šįžĶ— ˆC6J>Čcrč€XB(ĐcÄÄd°NŲ$Ëu‚Ą‡ƒxd‰Ŗ,c4ÍŦ^SH’9ĶI§!g2øā-×ôX|TžúĐ.ôâhåX~ ˙ˆ3ŒĨîVĘ$ŸaLģŠŖÕ)Zo+ĮŌLŋÅ㛞–-[.WĻÉēī8Ž€#āTßŗV´b˛LūX¯°ö`Ũb’Nå˜Ā™üŖÖ›Ô‘į܈:ĮéF¨ĸiČCVĖÅķZL&^éFMßĘC_T§ÕŽhšÕK'Žs–+“7ŸxK'ŽÃˆVT&oåâ[Yχz[~âȇœĩßâĸē-gÆYŊãyĘS—‘bK'´<“sßpG nYĢjq+ ›ãY$ۈ‡ŠegōfŠ”e=&qâ‘å0‹ųã.ĒĪȀåeSŊYoĸiĻÃōZ9ÄGåĸįŅ<–8ęnrņxŌ,4ęO[Ŧŧ¨<įĻßÎ)#.oiæ#cįæGķEĪ-ßÎM?r8ęl¤ KˇëŠŒÅqŽ‹ę#M§6lĖ'Ν#ā8Ž€#P–™dj’{5Īc“2{ϰđ¤"[@'›Mā¤ã,Ė9dĀįŅ4‹g/ÎŌđíÜdĸ¤ÂâLÆ|ĶaåXŲq}„MÆŌĖ7´%^Ļé3ōDĨ›orQ™h\´–Į|Ë­iŅtęhéŅēØu@G<É›ū¨>âĸzLÖ|Ëãž#ā8Ž€#PœŦÕĩ‡‰8NL,Ui6ivgÎôāĮ €…ņŖyہŌĸ‡éƏĘY|TW<ų¨K%K:ņ´ĮŌņ-.U™Št"-/zneX>ŌŦŦxáĒōšËkuˇz“ßĘ0]æ[Ūhų—Ę7™Ę§ŌáqŽ€#ā8Ž€!ād͐¨†ĪDc)-úfg5T4JQÃĨQ6Îå8Ž€#ād eß.ČRŧXGĀpGĀpô8YK§8Ž€#ā8Ž€#uœŦeũxGĀpGĀH€“ĩôØxŠ#ā8Ž€#ā8YGĀÉZÖ/WĀpGĀpô8YK§8Ž€#ā8Ž€#ušÜ˙ũY¯„WĀptđ‹ 6ÚHEjãûuö Ŋ &ȇ~¨ŋƒ›Ž|wG Ûäüøã ~x›ÉæŦmËvÅŧ|GĀp@ ¸¸X† Ļŋ­Ûŋ˙$(5!mŅņíģīž“QŖFIŋ~ũü{‰ITũÄpŒo<¨ōģâüŦd"8ø ) é~2Š!TŪëā8ĢŒM[mĩ•Œ=ZæÍ›'ģīžģŽU¯ę6#j<”~üņĮĒ ĸÆOÅUGĪęwŧŎ€#Pß0îqGË O–‰ĨK—ĒUávį8Ž@C@r=°°7N¯öŲgá7yq™-#jųųųōöÛo+AëŪŊģZԒƒaŃkChģ×Áp~% #š>PŽ3&Á(D ̚ j“#ā8ŲFĀÆ$Æ'Ŗ&Ož,“&M’Ŋ÷Ū[:wîŦUŦŒ°Ų˜6kÖ,yįwdũõחõÖ[OŸZ 9ČĪSŦ;GĀp6&1>ąš3qâă íWŗ­!TÖëā8Ģ/ŒE5Æ'§Š‹KeæŦŲ2vĖO˛Ë.ģČÆoŦ Ĩ"l6žņ"ÁĐĄCĨĮĻŊĨKį5ƒE­ü‰Õž\ŖKĢ/âŪrGĀh(0žq`YĶĘiĶĻ)YcPŗŖĄTÖëá8Ģ'6áCÔ8XŋxŠL›ŗTšæ•INÉb;z„ôéĶGâ/ĪœŊHĐŖ×æ’hŌFŠKsĨk§æŌĄMs]e0ä°Á1é3]î;Ž€#PDĮ#%ksæĖIØRCt€ĢĘxŽ€#ā¤C€ņˆą ‹[5ĻÎ)”/~^(mš–I›æeŌĄUŠ4“"ųųįŅŌĄC‡ä‹Ļ‚Į‹sįΕ^ŊzÉæ2??O/͕ÅÅš˛CĪv˛N§ēÄĀ`h›y-ŋûŽ€#ād#l:6͟?_ÉZ6+äe;Ž€# [ģ°HxwŽ4Í)‘-KĨ÷ÚŞFĢō=ļšņãĮë‹ėckŨēĩ,Y˛D÷§ą1—eR}2 K sķseôôĻ2¯ OŠMä´Ŋ:É횩eÍ÷ŦĨēį8ŲF@ÉÚ… —­dģF^ž#ā8˜Å˙ĻgË/Ķ Ĩ]‹R´i‘lØŠ$ųB8ްĨCxųÂÆ‹ŧDĐĩk×å–7ô&Îi"CÆ4“……y˛I×réak&­jNØŧû9Ž@CDĀ_jˆWÅëä8J˛€aøoEōŸY–/×[#!›tI(šŌ§ÍЎ8Y.€˜õčŅCŪxã õ¨Eå8'?zЇ^ôã|¯šÂā˙G "ād­^¯’#ā”#šzúĶÅR>Y–Č‘=J—ŗ‚ʼnXĮŽeĮw|Ōâé2âЃ>ôĸŸ8wŽ€#ā4T|„j¨WÆëåŦÆØËNķ—”Ęˆß’gĀbûJ¤u‹r X*fDŒ4KÆŲ9>zЇ^ôSÎĘՀ˙sG  ād­\¯†#āŦˆĀc ‚Œøđ“SëA­Ę/#eq‚VYēé(חĢú)Į#ā8 & ĩb^/GĀXŊĀĘ5qVą‚Đ,/^*(“Üœ@ŽÂ 8™ö2BÔ2fiFč4SÅ?âЇŪĸŌ-‡ŧäqį8Ž@CC Æd­ ¨,,ɈIE2ivą,*_÷÷JÚõõú8Ģ0 ™4§DëߥexŠ ‚GA´Œ°‘Á"˛•ŠŦÅ ˛8ôĩzg-ΑFʸéŗŅĻiūĪp•E / 2kļ˕.íšH—öy˛]÷!œW#ĩÕ&k3æ—Č3aCîû#ōĨ ČŲYP÷LŽ€#P-Ú´X~ŦIEØ eq˛/ĈšÅˇ zg-–°g-Žr+žĨšī8Ž@m"ĀâN=[ĘáÛˇ‘-ē5OĒŽŽ[ÉČØI•dОL_˙vąÜ÷ÎüåHĢkĩiג'ܘv:Ž€#P l°Fž~ė6Ž*ja‹§ÅÃqĸFú&]DšV9 Æ5yØpĒ`ĩq~žČŧp”ŋŅ.ōÉč=NÚŖŊˇ[줒Ē[NUÅ5˛và sdȏĄÄ ˇÕ"ģo*ŌĢĢHËfÎŌ ÷GĀpGĀˆ"đ뜄|ôŗČgãD +Œøƒļh%—Ūi…-Ņ|v^%YCđéOË#,Đ<ƒí”]!iNĐ D÷GĀpG é rûģ"ĶĘ)•\p`GŲ¯_ĢǞIĨd ŗÜá%‚‹cã­H×ö"˙wHŽ´rKZ•Āē€#ā8Ž€#ā8qōÃ~˙ŋžŲaŋ,+“÷ŸŅE_@°-gqyÂiwkØúé‹_mÁĩh*rÁ>šŌēyŨYÔøAæÂÂÂMœũ+-Z´ĐmÖJû?GĀpGĀpđ¨Ķ$ä†×Ęô^ÚŅgéˇA™|˙›č×5NÔFZ6Ī[AÎîɔdÍŋW˜üvÚŊsS’˛øÅŗŧøņ´x8• „íŲŗg –ļŧŧ•lĒ8Ī_Ž@›xŠTqŽŸã—Ēo¤ę+Šâŧ˙x˙YUúĪôéĶ姟~R˛fũŅĸEzLœ8Q&Ož,Ŋ{÷Öų/*Ãų€^šŦ•[רrļ]đY4.-YƒņM5\Ķđ ˇ ×ŦŸ_Ļ‚ A2öÜsO%kC‡•Yŗf)i# GŨ87Ÿs~¸ŲŌ+N8áųüķĪU˙6ÜpCŲ˙ũåčŖ–uÖY'_W'°īn¸A>ūøceā”ĶŦY3ųä“O”pŽ7Nž|ōI)((Ã;ŦÆÕxīŊ÷´”M7ŨT2Õû¯ũK^{í5ųíˇ@÷ƒËëŽģNŽ:ę¨ׅkø—ŋüE?üpšųæ›kŦĮ3:Ž€#ā8 æōīžûN K•ÕĢķųÖ[oŊaëŗ.F°˛ĀeøâĨ˛møhn:ūR)Y›š°œu ̊éTVɚ¤a%cīŲŧyķäĖ3Ī”ĩÖZKÉMĢV­ÔÂCšYÔđŖ.˛fí0`€,Y˛Dž˙ū{šįž{pHT];ČĘoŧ!}ûö•ã?^-NīžûŽļÉęF8†Ģ[¯hŪøy4ÕûöÛo+íÛˇ—Ë/ŋ\÷žķÎ;J‚Ķ剿OwŪŗgO9餓dË-ˇŦV›x*yüņĮĨ]ģvrŪyįĨSīņŽ€#ā8Ž@Ŋ!ųÂĸÆ nķÍ7—#FŦPžÅ#‡ųä”z­,ķŖ:ãįAČXyÂæ™gėëjŨf›mĻaˆōė_cĨËú ~ûυĪyđ“6gá“u)×6ä(­øąO~"ŒŅ%„!L,áŊ˙ūûJ|đãįŦh^Î-ŋųĻË,gĪ>ûŦŧōĘ+ÂŪŽĩ×^[:wîœ|KBi›?žŦķrŊ¨ūTįZxøGÖ\~~ž–Eeīˇß~ōđÃĢ é—\r‰.—ūđÃG™,Ÿ˛T9cÆ %7Ûnģ­@°ØáĐ/Ÿ‡¸ožųf…4âMžsˆäÁ,,eR'͇Ī:8$ŗ_ŋ~˛ëŽģĘM7Ũ”´€EuØšųŅ2,ŸÃ^Ė cąwĐâ-ažĀ‚2éœûîģ¯|đÁ*‹5L¸Ū—]v™š}ÁK"ņˇŪzkRgT˛ v{íĩ—|øá‡*3eĘšúęĢ)Zą"˙§Ÿ~šĖou2ŸēeroS&yĸ2žų>Å&“sĮĪņ‹ŪĢ™ô™¨Œ÷ī? Ą˙°Ûķåȑ#bÆv*>aâŖ7ō­P˙ EeŧË[EtŌ[Á˛f)儭"TAÖ,-ęc‰bĶøđáÃŖŅ˝÷éĶ'YÁåbĘ4ëo„b-ƒ”Üwß}IÆ )ã@ֈŠ‰“5‹Oį#˙ÄOhōÎ;ī,,ĩâxŖƒ ņė•3`aÅÄA截|Âė7ûÃū /6`áCŠũYŠÜA¤C–\ĮŒŖËŧ5wā‰ĩo“M6–!x ´mÛV¯N¨~ˆ„ĨÜûīŋ_ 튧žēœ*ęjm°„xØâ8ā]ÅÂÆË Ô‘ļ˜ŖíS:\ˇnŨë$û !ÔčäiLŽšæ=_wŨu5~Á‚šŗ˛MBÆuĮ_~ųEÎ:ë,CjąÆQDRØĩk×d~Ģ“ûŽ€#ā8Ž@}"`˟V&5#hæCÔĸ–6dÉgs å•r;Cāåûņ“ņą“”d­œ¨-ÛVVŪVˆ,?ÆtH‡ôĀŌwL´ Ęō[Ŧ9FÖ,ÎęB¤ ƒ¸‘Ž\ee!‡ƒü`Ŋđ`]ģöÚk“ųŦębē,Ÿéˇxˆã!‡ĸ˅<ōˆüã˙PK–šTrE™=ô<˙üķj=cųëÎĘĻnO=õ”šLšø7^J@‹Ba‚ĐđBÆ˙ū÷?}û=ņúš^ˆ‘Õš¨Ûpà åß˙ūˇ\tŅEJŽX=ņÄ5 )§Î”ĩÁčKļdŒtZ™ė1ÃÚjkķŠĘ6Yˆ>¤!ˆŧ…JŪvÚI /;`:ĻVŽžø?GĀpG đyޏ‹ļTD yōÅįß2ŨmVÎØŒīŦ@čBŪ”d Ĩd ˙9 ËĄeÁĸTūŊ5HņoŊõÖĶ%ÉhûÔ°†`‘ÉÄŅČĸdÍ&vP^¯r2šĨ‘‡stا&ˆ‹;ĶåŽOf@œxŲ+žÕĶČžÅY>ęDœN>ČqV:-_ŧ|Âŧ8ĩņÆoTëŨšįžĢ–1>×iÁAĘĀ=fyÃBE˜Ž€5j”×Ö*+7^_Ķ Ž&cųĸ>Ö,6õ_ũõ‚…íŅGÕkqÁ$˅HCÜY™ŧqËĩąrR•m˛ƒ JbšÅ[(Yƒ”‚…•Ŧ銗éaGĀpG >ĀÅ<uQ‹š-‰Æ-kä‹ĪeĨe-‚öĘ/û,YT¯§Üŗf‰\-ŦėŌ˙ôË`,oeę [4j¤‰üÄQŗ‰ŪôĪAŧÉXZ:˙Oú“ÜvÛmú-ą{īŊW—ĶÉÖEüîģī.O?ũ´~ļŊõÖ[ƒ<Ë„ŽcđāÁōûß˙~9ōšąÂ˜ ×íîģīNZéØsF™Fž¸ÖuáøžÎĘŠ‹2\§#ā8Ž€#°2˜aÆtD‰ ƒŠ6“Áį‹ĻßJĮaR’ĩtÂË)Nā3FÎ`|PĩēÂ_ ę°ēái!Ũ–͓îœ}WĮsŒZŗŽēęǤUĪ–÷x‰ĮŌo&ÖļãÂąWĮ˛gĻnã7VQ,VÎčë6Sq9Ŧ˜ļ”ËgT°$n´ŅF*†åĢ.œmÄdŲgŌøL]”í:GĀpL`{—9öbÛËfI‹6ŌÍEķY\Ļ~ÚeĐLDå 9ėg‚Ø@„R­ģFåãį/d ̚-{ƉroŧQן*ˆ|,G–˙°Pą‡ã­VŦHŧíh.•ŽęÄąž=r|ÎbæĖ™ē÷‹ü,-fęŽ<ōHŨ¸{įMJ–!–´750gĒĪäx‘ƒ}‡Ûlŗnđˇ—/ø&oŠō ŦŧTpūųįk˜ŊsXâx›ŗ&Ģ&5>œKŋo^&ĀqŗÜ‹åÜXVwį8Ž€#ād æ!žÁ‡qÍČ`žÕ ÂQŗxōŦĖüUĢdJb-ęŪŊ{ō3VņL|ˆD f… )ƒ˜E­f^Îí 8¯Žƒ„œsÎ9‚eÍõ|’rÂ>6,Hš‹/žX_6lXuT§”…x°ŒŸÔÂąÁ„5SĮ6Hķyc”ÂQŽb”ŠåmHŸ IDAT>“ƒxŊôŌKúĸqXFyy‚ŸņÂa9ŊëŽģt?/p@ ˙üį?טŦņļëĨ—^ĒËŪô^ļ0S1ÖYČ4ž_@ā:ņæ­;GĀpG [°į.žÁʓ˛x},~‚ŧũîy\.“pNø IJ×>C&{ŗT]öä<5ĩLēw.•ķVū‚A&…U%Yā­GŦ)Ž¸eΈˆYÜ,x–˙ØëÄ&õ5×\ŗĒĸ2JĮĘěĩĩ´h…Ν;WøM1X6qe˓tˆTmX˙Ø/ČĶmļeĪTõÒĮō$„Ž&øđ’Å×_-ˇß~ģlŋũöúv+m°k-“ë‹’˛RĨGeũÜpGøŧ+MĖ™éķĨqĩĖ[ã8Ž€#°ē Ā<ļaøF)G]ēEÖ겥Žģa!Ā2¨;GĀpG”Ÿî¨:›K8Ž€#ā8Ž€#āÔNÖęe/ÃpGĀp"ād­†Āy6GĀpGĀpęŒöŦ͙3'|ŧõƒú¨—á8Ž€#ā8ŽĀjĀœ‚=B;Ģūĩ§ŒČ?˙sņI¯Āy#GĀpG.xd†Ėûui•Eų2h•š€#ā8Ž€#ā8ŲCĀÉZö°÷’GĀpG'kUB䎀#ā8Ž€#ād'kŲÃŪKvGĀpG JœŦU ‘ 8Ž€#ā8Ž€#=œŦe{/ŲpGĀp*p˛V%D.ā8Ž€#ā8Ž@öp˛–=ėŊdGĀpGĀpĒDĀÉZ•š€#ā8Ž€#ā8ŲC Ŗ_0Č^õVŽä˛˛2=z´Œ3FøÉŦĻM›J"‘ĐÍ999Zqnx<|SŽäåUī$'\ūÎkˇ–A{w“ÎŨ\Z´hĒũÁ˙9Ž€#PÛøŧÔđįŨ†84Z˛Æ ņÖ[oInnŽzčĄŌŧyķÚžį\_D`ĶgɆkĩ“Ü@ÄáâáŋÖ2Qî Ä ({ í"Ĩá_IiBfLY$Ī=6LÎ?å}šũáAĄŋ4Ú[Ŗ˙ī8õŽ€ĪKõy lˆķHõL5jvv29R–.]*ûīŋŋ4kÖL+%­|g"/?<ŧ ‹Æ€ĪĖ"‘‚DŽä—åH>~ ká( lƒp>~H[ü‚˛Üž+­Ön'GžģŖĖmÕDû÷Ųé´^Ē#ā4j|^Z5æŨ†84JķAiiŠ >\ļØb áܖ9ssé(š†˜ī~ãÂaĖ+(Õë.ˇúåŖ?&ĩųđíWd÷Ŋ vĩ`] ˙ĘĘÁē,lÁ/(Αž{÷įūBN>ģoXNÍkÔ‡7ÎpęŸ—Vųļ!Î#ĩNֿΟ/ųųų˛Î:ëč]0mÚ4yöŲgåüķĪθވįųûß˙.gŸ}ļ´oß>#ÜÅÅÅŌĨK))aâ. GČĘäÍ_Q3eŅđôéĶåšįž“sĪ=ג+•G(šŋ˛đĶO?-}úô‘­ļÚ*I +“' —J?˜œuÖYŠIĒt#¨éō7ÖôEÅ YŦkŦwæ†k~Å ¨üøÍPšęÂ3äúû:JßmvŅkPDËk+.YōļīÜNÆO‡Ä•9YŖķ¸sZA`eæ%*āã|šaÁ.F]âŅį‘Z]=õÔSåāƒ–c=VļŲfÅtƌōĀžųņtīMWČüÅšžZ~ąų@ō‚ŋ8øyíZʒ%K2îo.č8U#ĐĄC}XåA~‡vīŋ˙žęL56l˜lļŲf5șyÆ×ęēęÎKŅy¤ąĶéÚSRÂ|]>/gŗũ qŠ5ËÚįŸ.ŖF’Ī>ûLû03’ÆoŌ¤‰úœį…— ĸ–$ĢWų˜Čoŧ!{íĩWØhČ]Yų˛)ų,ŨäŸtR |eĒ—¸xz<)īŋ˙ž<øĐCÉÕ0ČFûâø ŲĘŌōŌ´ˇ1§ëXAKĄeęÆ1āˆĶåŽˇÆĘĮGž,iĨA.!‹ƒum^a™Ė\T,“ĻȚ;Gø„RīŪŊeėØąZĀ駟.ģīžģŽcO<ņD˛PV2ˆg~`Ä1vvÚi˛Ë.ģHßž}eÁ‚Iy;áSMGq„eûíˇ—×^{MĮPō@pŒáû„1—rzôč!G}´Æ‘öå—_.§ã˙ø‡ĘąEįú믗!C†hƍ'üąüņdĢŌe2/ļˇ`<`Ėꊧ’ã:sņ;„ö€GĒqœ­1{GōÚ<°ëŽģ Ø2Wŧō‚ÛÉ'ŸŦ[r _K8捪"üŊa.ēå–[’ú +eĖš¤ąé‘@Ϙ¯™Ī~øayî™gt%mīŊ÷Öųyuá…z° žwÎ92uęT͟nŪd^ŧ)ĖoĖcƒöØCûF V˛…9”•:]I u°y;Uû­Ŋ6¯Ö4Üį‘ZŗŦmˇŨvrÆgČnģí&—^zŠ\xá…úŲ z/äė—_~‘¯š`īŲ3áâ^tŅEzA¸‰x Âtũ˙÷zSUÖã¯ŊöÚä~¸ĘäødV‘‚@ږęšÚHÔRÂgØŊ&2aâYk­ĩ”Ôb‡EeØæÁķū÷åļÛo“kŽšFîŊ÷>™5k–Ļ-Z´PæÎ'_…öôŨrË`™{].ŋü y2ÜXt.žĐ˙úë¯+&ČĻķ1PÜrË?Ĩ  PŽ9æí„Ŋ{÷R’väG† ĸƒË‰'ūAēŽŊļüķŸ˙”SO=EöÜsoĩę-^ŧXõĶöĮQäfyįˇåöÛo—ūũúk~+ŋŧŊH.koų#Kã OY,c3‹Cß ­dŠ cįęĶ˙°ŦfßÚĸ‚2™Qō´ŦĩÛđŨ9Ž@L⌋÷ŨwŸNæDŸwŪyē<ĘÃúIaõâSPP ×]w>ü¯šæš:Ņ# 11b„’‡TĢ%Ȱš5üúë¯:NžôŌKJH+yˆFîÛoŋ•ãŽ;N~üņG%aW_}ĩÎO………137oŪŧđũÅŌĩkWßØ:c–5öF3weâ2™—˙a°lÚsS}Iî‚ .ö?@ —*™ųčŖĨĶk„ņĒ,l *ŸWĸãüBŪž›†ŧ?ōîō’Ž!åŖ>’^xQÚĩmĢÄmņâEōæ›oÉôĐÎ3ūxFøéė@˛ÉĖ™3u4ũ-ÚO˜sæqļ6M™2Y˜§ ÛožųĻn%zîš˙ĘÉá>ũĖĶŌĻM›đųŦˇÃÜy<ōČ#ō§?]éŧyÖYg†•šĪåÎ;îÔyėŨwßŅëōúk¯3J‡V„í,Ą~ŅöÚ<^ÛķZCœGjͲFGũë_˙*Ī?˙ŧŪ0oØ-2áÁÚÖĢW/ŊāÄŗ‡‹îĘ+¯ÔMũ°wn’Ę\Īž=ĨmčlU9žŪ°öqsāëyE87—pŽä†&ŋįž{&ÃŧΝ;‡§ŦŖ¤eĢ–rä‘GʧŸ~ęÉK å/'2€Üe—]&­[ˇŅ'3Hå‘NĮâɑ§+üč[wŨõ¤{÷îJʆĒ鄧Lĸƒ u93č õãÉōĘ+˙"¯ŧō˛4iÚ$ĸ_SęĐŗg/%‘Č[ųÖžÕ-Ü,`WˆqqiŽú%œ‡ĨM;–†sâJԗŸ+Á'KÃQš“'ÍCū˙(nUˇ—§;5B̤•{élĶ@. j #Y-[ļÔņ‘odō0Ī8†c<…Lœxâ‰jÅaLÍÄa)bŦÄĸá0Į܄.ˆ$‘ųĀļŠ˜LU~ģví„6dâ2™—ē÷讄”vCי;YÁ9é¤Áōũ°īu›Í+ŅqŋyGŽPĖČkķuc_v‡íUßÛoŋ-tp T­…ō6ÜpÃ0ŋ•P<:ĪŲÆm!k¸ūúë‡åėnZ /āGÜÜšsT?ä œ¯Ŋöm shUķ&åŖßÚĶģwũ˜ũšįĢķ[^^“d{Ŧ>ÖžÚ7Äy¤ÖM ö­qS@ž`×tPsŅ›‹ÎÄū…ßũîwšŒéÚnJ“¯Šš]FÔŦ\ķŅ Qäædŗ>ō„ņ‘ą0ųi}–F:íÂĮ) éūæ›odë­ˇN†‘!/:L†86ŨĮ „šŸ4(Īę̀ÆMzà 7Ëĩ<šãCŋčâ@7yđÍŅžÕ-ܲYŽ´i^ŽH(áßī>+#‡ž\ņŨˇ$ũ÷ŽoÍ;W"*<ņläg_Ą2ĮSƒu*|œ]`Î( BցˆãĸɓU1åō4HŧuFÎ҇ŽT=˜}YŪĩtâČŠå&ûá‡ÔĸĄÅŅöûņ4ÁĻLÚˆŠšŸäƒŧ]~ųåI}V6ú­mҞTéjø¯uķ˛`YkϘ…ËŽQ8m[u–ߟ{Ŗ<üˇÁr؟Ø÷¸nØ÷QžW7|!lyy%Ōύ‰´mŗĖŧBčMvę hožųf7 ]Œ›ĖŠ7ŪX÷Oņæ(Ž1‘y†xÆD^8[YĮĒ„ Bđ /¨:ꑁHōōs•9Œ |į’— ›íŲCĮ ŧtP•Ģj^ÚĘ Õæá7ęĀŪ=ö…ņĸŲFm¤ûųĀ,:oQnĒŧėņ&?ķō–}œŗ4Ę o”I#‹Øƒ>¨ËĐ´•4æŌĐÃ9s…mŪąų‘0ۃĖÂĮÖ%–Šy¯˛y“˛ØŖ idO#äķĒĢŽŌ6s­ŲBD™õáâ<’6|–›_*€ĩÂâaå—=9OFM-“žŨšË­'­U%Fļą“ŅËÔņ[,zeõ‡ ÂęŲ‡N:ĖęÄ9Ž's›*EœĩŨž’¨ûã,_ό~„ ē ŗ-ÎĘ3Ģ ú°ŪŲ“˜Ĩķļ ÖIÂvNūx=L>ĶúŦNōˇU*ëti'aE3,k‚Ū2ŸŽūōŋo–ƒNŊDĶÃũ_NØÂÖJ>Š[PT"ã§Ė—ŲŖGÉMĮo¨ƒ—a§ŠüŸ#āÔ ŧxĀ„Î\Ā]ëÖ­ĩÆrHDÔ1q#…meÖ$^.Ār„>ÆúøũnõJUV LįŦęĖKČR.sx0¯‚uŦ~8Ģk|`žKæp°´/3¤“Į‚…Ņä}Ä3GÅõW'˜ĮõŠb[U~VšĀ•ú’—öp­ĶÕŋ*}5I¯Īyä‚GfČđ_—JŸuråÆã:*!5RíwĩJSyjˆîGˆTŲ9d*ĶN_™Ō¸ tl6÷ķDDĖôlÛ|,zXą,lÕ^``šÕtâ[z\>féķ/ēhū¨>ę×M'¯ĨÛÍfáxy.geāĶąmø‚ŽaŸG kĄ+”ļ ŌÆĩ|ų%áB–“´đÎHx0 įÁãš4/h"ÍÂIûÅ?„>´Y˛_čEôŽ€#Pg@.pĖæâDxvW–¨™~ķ­| ›Ÿ.žôęĖYŒŅ™ÎKŒcŒ˙ä‰Î„×[oŊäŧn܏Î#Ô3Õŧņß˙ūW?΁åŽ7ayI€%ƨ<õ†Ķ•—J?ųRÕ?}ŦČY~|›˙jR>ų+Ģ_ēô†8Ô*YŖá ÁqŗsCŗ?Œ}gfŽĩ‹muŒŋnO¯i˜oĨĨr5Õgē<„uPRáqļC kfØĩXÕĸįjN†´EČZOĄ ÆĘzK–›0 ÷G ņ QąīˇÕGĢ2—RkŅúÕF:Ûk†­7,ũ˛ä‹%Į\mč7]øĢĸž†84J˛FĮco/.đ}7öĨae‹>ąE;“Ÿ7ZļosԜ`-ƒ))Ģh^ô<'|ž——~Á ¨TfŒ™$Ŗ?"Kό’cÃ~™čāU‘Ũ=GĀhD0đŨ´úr m^Âji–K–Ũ-C !Î#’ŦÁä1Ĩōōß}ã ÕŪ—uD?[,ą ÜĮ„>C߉? ޘÃcGĀČŸ—2ĮjU•ŦËy¤Q’5.4 ąޝ8ķ 6_`ļĩëUĩ#xŊëQ6íŽ~1‚§m'juƒŗkuVw|^jŧ= Žį‘FKÖč€ĮË|ŖĖ6-6ŪŽâ-[č+NŌVAĪë8™ āķR&(­š2u94j˛f—ģ.´2ÜwGĀp2EĀįĨL‘r9ČüchŽ—#ā8Ž€#ā8Ž@Ŋ#ād­Ū!÷GĀpGĀČ'k™c咎€#ā8Ž€#āÔ;NÖęr/ĐpGĀpĖ¨ĩ ūũīg^ĒK:Ž€#ā8Ž€#Ј8ãŒ3j­uĩFÖø1ô=öØŖÖ*æŠGĀpGĀh(Lœ8QŋÅÉ'Áø&'>?gÉ÷ķ8p|Īĩ4üčô§Ÿ~ZĢÕöeĐZ…Ķ•9Ž€#ā8Ž€#Pģd…Ŧ}öŲgĩۊ*´ÕwyŠĒĶ^WŨ6Ôwy+ĶļtyWļ éô6æxĮŦq^Ũ’’m˜ųĩŅJĶe~mčtŽ€#P7Ô;YûíˇßäėŗĪŽ•ÖWЧ6Ę{öŲg卪Ž’%K–ŦP^eiQáM7ŨTžûîģh”žWˇ +[Ū HŅ0KŅŦFuņÅkŸ\ŧxņríJ×ĪzķÍ7…|§œrŠLž)ģîēĢėŧķÎōôĶOkÄéÚk¯,@W_}ĩ/ŊôRR§ÄË+**’-ļØBz÷î­OĄĀģīž[ŗ°Ôȋ †ûîģ¯N†$´k×NZļl)oŧņ†žDA}žyæÍSYC‡Õ§aę[PP yøWĶ6Ô´<ĢĮe—]Ϥq›mļ‘TKĢĢ*fŦ‡v˜b|ÄGhx˙ũ÷×0VÍwÜQZĩj%[nšĨėŊ÷Ū2zôhM2dˆ’&5úĮ!‡ĸņUũK×wɗN'ׁ~Ũˇo_ÉĪĪ,"ÔûškŽŠĒ8í|°ôë×O|đAiŪŧyō÷LíúÆûJÁæĖ3Ī”yķæ ÷÷Q‡´ŧĘŌĒŦP5ęâAX¯¸âŠŽ÷Ū{Ok—î:TVÃ˛Ē{ĨšÍOÛ'2Ņsįwęĩ†pˇoß>™åŨvÛMŪyįy˙ũ÷åōË/OĻ~úé2hĐ ™?žœzꊲÃ;$Ķ8I§s9!8Ž@Ã@`á…‰čą`Á‚D˜°3gÎLœ|ëΉ.ū)qú]ãa °Ō# á%ˆĘ]˜˙ú×ŋ’B3fĖHS|âąĮK,]ē4ØDxrLĄ2aRJpŧūúë‰G}4ąîēë&~úé§DXH‚•D+qß}÷éņá‡&õÚIŧ<âaKtīŪ=ąË.ģ$Â@ž¤)žN5˰aÃß˙}ĸŦŦ,q×]w%Î9įS•°ÄļÛnĢyūûß˙&ēuë–…ĻW–†ĀĸE‹ā%Ǝ›Ôˇ2m¨Iy^#NŌ›K`Šy %ÉúØÉNJ×uũõ×Op q`žá†ĒOĻ_Ũ|ķÍÚ¯ąO„ˇxüąĘr]Ã’žĶ×8ā=¯ė_U}ˇ2”Oŋä)ŪW^ye"XŠ++NĶŠĶ6â™8ņÄaILŸ>=™/U?#‘{æŧķÎK„åĪÄ'Ÿ|’øá‡’y*KK ÕŌI]\Ŗđv–ŽŒŅãë¯ŋÖZ§ģ•Õ…Œ™Ü+Յ%]]ĒĢ'*˙íˇßjß>æ˜c’ãf4ũå—_N´mÛVûãš;G9&LĐų~Äø /‚ģ„íL:†3Ž ļÆÁ‰ĒâM¤Ã¯āYđ-ô2_ÁÃĸŧŒķZûtGUÔĢV˛ožų&)Š• +× 'œ q<}ôŅjĩ Â̰×]wZš˜6mš<ņÄĮ’âM7Ũ$éžc’Ē…“ž*cÆuĨ/<õÔSj9{á…äđÃ×åž@ŽĩÍė×Âa9# KÕi§&XÖčwôĒ\U}ˇ2”nRĩtlŋũöDĒ*N>˙üsYgutĪÂ÷Üs<˙üķúš¸eNÕĪHëÕĢ—lŧņÆĩP›|UiQšč9ũ OōĸŅj%ėÚĩkÚ4ęPÛ׈>ĩ4îxĨ—î:TÖ_ČWÕŊ‚LÜU† mOW—¸žę„éŗ?ūøŖ<ōČ#jUžđ “}¤°°P.ēč"ĩēwÜqÂA=Ü9ŽĀLJ@Ŋ-ƒ2˜Ä÷Ę0¸­šæšËĄF˜xs,šcŋß91WŲæüTåY>üøū1&žã?^ļÛn;]îŧå–[tOY4Oŧ. ’æ*K3™T~MÛPĶōÂSļVƒÉ ruĢ:f,õ@‚AøH3K¸TũŒåDúŽk}îšį*Ą~øá‡eĪ=÷ÔøĘūĨŌíģUéėÔŠ“>8°ėßK”ĒÜ`•UÂii,ËÛĩ´¸úōéŗÁrĩžū¤˛4ęWÛ×hΜ9úâËÜŅcŌ¤I Ge×!]] GÃ7ÕŊb2QŋĒļWV—¨žęœ‡U ]ŌžôŌK…Ĩßûīŋ?™ŊE‹ú@Éō'÷ÅlLķGĀXň›Úębŗ`؏–`é(6pßuIDATꞥDëÖ­u™†xL€,õ„7UŒåžđf" Č Ė,#ŧöÚkIaÂRS$#GŽL.ī¤+Ī2‹š.‡ZęÔŠ‰đÔŠĻĖ0č&‚F—ĒL†ē„Ŋvjž >]NŧíļÛ4š˛4Ë?`Ā€å–A-ž&m¨iyá-ÜÄ+¯ŧbE'ÂãäycŒÆËŦ.†ôÉļąTF?ŗĨ1ú| g‰_~ųEe‚u"Á5ÅaŌfÉķteŽĒž[™N–Ž‚OûR°kŋĒj“;[‚.͇IY—A­ŪV×tũėöÛo×Ĩ0“‹ú•ĨEåjëŧžŽõ­ė:žĒ.ÄWv¯^WU]jĸ“q•í a¯o"ėL qMÔxGĀȁl.ƒJ}ĩ°Ą9–ßRB–rá—tō ›Ū—ÛĶ) ›|›l˛I",å$nŧņF]6Eė÷aŸR°’)ą˛}kéĘc˛îͧîWB_X‚Õ=hĻ/§ĩ×^;–ÁúĄ~ØĖOЉ°Œ fXvŅũ?ēĘŌĐ6˙j9䥔%LÕmCMËûâ‹/´=”ŦB‰K.š$–zũë_ĩų3ž­íbīYԅBôڅ— ›ožš’q*ŽëĖūļđVî- K|ŅŦiĪ+ëģét†åŲDxIDû!ûĻŽŋūúDX–O+`Úr,!X ĩ¯Ķ?:č íûáE MŽŦŸņĀ,ąÚNT (æ*K3™ÚöëķĨģÖĻTuŠę^ąŧÕõĢĒKuõ!˙îģī&–ŽD°ę&‘*2jR†įqr˛IÖr kQc`¨’.˙…‰L.{ržŒšZ&}ģ5—[OZöēxTŪÎŋüōË´?7Å Ũwß]xU<c?Mô-'äxc‘ī?E—üâųÄ'ŅOdR^\…ys*Xat‰Ęâĸ~°ŧh7ņ⎲´¸l4\Ķ6Ô´ŧhŲvŪ0ŗļŒ?>åŪ–Gg͚ĩܧČÃį/¸æaŗž.Æ÷šŪt~Ēžģ˛:Ķ•EÂ=›|›3\C¯¯k”ÉuHW—ÚÆ0“ēÔ¤Lôîĩ×^ē¯ą&ų=#ād†Û°Ø‘éĪMą'š*wÁ#3dø¯KĨĪ:šrãquŋ,sP|›RŊĩĒ*›*×įų-›bƒÕŖÖ>¤›Ē,sG`UEĪ~5>GãÎpęl’ĩz{´ēđaM {Â4ßBsįÔ'lü?餓Ō>ˇĄ/Ŗ¤đG žāív'jõļãd Kָ܇;G đS<áUŲ(ÚËtGĀp–C Ū>Ũą\ŠpGĀpGĀČ'kÁäBŽ€#ā8Ž€#ād'kŲÁŨKuGĀpG #œŦe“ 9Ž€#ā8Ž€#œŦew/ÕpGĀpŒp˛–L.ä8Ž€#ā8Ž@vp˛–ÜŊTGĀpGĀp2BĀÉZF0š#ā8Ž€#ā8ŲAĀÉZvp÷RGĀpGĀČ'kÁäBŽ€#ā8Ž€#ād'kŲÁŨKuGĀpG #œŦe“ 9Ž€#ā8Ž€#œŦew/ÕpGĀpŒp˛–L.ä8Ž€#ā8Ž@vp˛–ÜŊTGĀpGĀp2BĀÉZF0š#ā8Ž€#ā8ŲAĀÉZvp÷RGĀpGĀČ'kÁäBŽ€#ā8Ž€#ād'kŲÁŨKuGĀpG #œŦe“ 9Ž€#ā8Ž€#œŦew/ÕpGĀpŒp˛–L.ä8Ž€#ā8Ž@vp˛–ÜŊTGĀpGĀp2BĀÉZF0š#ā8Ž€#ā8ŲAĀÉZvp÷RGĀpGĀČ'kÁäBŽ€#ā8Ž€#ād'kŲÁŨKuGĀpG #œŦe“ 9Ž€#ā8Ž€#œŦew/ÕpGĀpŒp˛–L.ä8Ž€#ā8Ž@vp˛–ÜŊTGĀpGĀp2BĀÉZF0š#ā8Ž€#ā8ŲAĀÉZvp÷RGĀpGĀČ'kÁäBŽ€#ā8Ž€#ād'kŲÁŨKuGĀpG #œŦe“ 9Ž€#ā8Ž€#œŦew/ÕpGĀpŒp˛–L.ä8Ž€#ā8Ž@vp˛–ÜŊTGĀpGĀp2BĀÉZF0š#ā8Ž€#ā8ŲAĀÉZvp÷RGĀpGĀČ'kÁäBŽ€#ā8Ž€#ād'kŲÁŨKuGĀpG #œŦe“ 9Ž€#ā8Ž€#œŦew/ÕpGĀpŒp˛–L.ä8Ž€#ā8Ž@vp˛–ÜŊTGĀpGĀp2BĀÉZF0š#ā8Ž€#ā8ŲAĀÉZvp÷RGĀpGĀČ'kÁäBŽ€#ā8Ž€#āü{įcUĩîņ™ač(ˆ¨õ‚ĸoä *Øsž%–÷ÔÄgo1&[Ô¨Īc,šjė%–čĩ×XžŨ+FŊ#īŠącAŖRʛß:|ÃĮ™uΜÁ™30ķ_əŊöˇžĩÖ^ŋŊûΎÖŪ§sHŦuwõ*" " " XĢ“œD@D@D@D sHŦuwõ*" " " XĢ“œD@D@D@D sHŦuwõ*" " " ¨ĢČĢB§É“'Wč)7J´›X?~|%ũÉGD@D@D@D  4 ÚXrjXĢ6qõ'" " " m ąÖXrjXĢ6qõ'" " " m ąÖXrjXĢ6qõ'" " " m ąÖXrjXĢ6qõ'" " " m PŅKq§M›f˙øĮ?ÛĐŦ\E@D@D@D@Ę˜Ö°SSņĐr.ŠŦ"ą6hĐ ›¸ũDëŅŖĮr .Y˛¤…m9‡Ļ÷ņm,ĪŲb9y÷ņm,ĪŲbšę‹Ÿ_#ž×GÎËuũčúņkġņúČŲbšŽ]?~ø6^9[,×õĶ=ޟĪ^`3~->ķ-÷+kĩĩĩÖ¯_ŋ–ĩƒĨ’ /¸ˇČĒ~ë¡´`?ņ+ūĪT¸į›ŗÅ:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|mm#ģ­ĻŠÄZMM­õéĶ'My=¸ĸô2ļž(ķ}ĪGÕŋx=ø5ĸë§@ ōđ|äĨīž?ņzđkDß}üßŨ zÄŋņûâŒØv–~ŠŠYÜÔû"ĄlĒHŦŅ‚ĐˇŅæ=x™o‹íÅuJų•˛Ģū˛ķPĖ"î‹ßōĶ‘GŠŧø-ģļ"ŖČĨ\>–ŠžŽ?ŽOņz(•Į×Ë|Ģú‘GŠŧø­ú׏_īĨļzuG)2˛‹€ˆ€ˆ€ˆĀJ@@b­č$ŧ÷Ū{vÛmˇYCCCQIõvįΟoŧ.eŪŧyĒĶß˙ŨΌ3ūT;]šō?ü-\¸°ÍÃß6#S Pņ4č ´Ũ.U˜GŪ}÷Ũ›Û6l˜í°ÃvÄG4ÛÚ33uęT{đÁmß}÷MëôhŅÔģwīöė&ÛÖŦYŗėúë¯ˇ—_~ŲęęęŦąąŅļŪzk;ūøãm5ÖČÖ)6"2Y_HúōË/íĖ3ĪLŸwÜąØuĨØ?õÔSíã?n>–ĩÖZËÆŽkGy¤ 8°ŲŪQ™^xÁîšįģīžûlõÕWoĩ›UoĢ’ƒˆ€ˆĀJO`•ˆŦÕÔÔØ^{íe7ŪxŖ­ŋūúv˙ũ÷ÛW_}Õ!pé+Ž 8蠃ėŠ+ŽčžŠŊčĸ‹ė7Ū°K/ŊԞūyģúęĢmʔ)vūųįÛâÅ,B,Ÿ.šä’$rÜkŗÍ6ŗĮ{ĖļÛn;7­t[x<ØxāģéĻ›l×]wĩgžyÆÎ9᜿S:ō 9ŋ0ZmĩÕZífUäÛę ä " "°ŌXé#kNČÖl"MožųĻ͞=;ąŊöÚkíwŪąūũûÛŅGmEBđp#fJ‘ČÔ­ˇŪš„ØŲgŸĸOgu–ũúë¯vĘ)§Ø~ûí—Ą÷ĮöŽ;3gÚ[oŊeĮw\ꇩ/Dԇ~˜Ú:äCZԋmTš'ēôŅGŲöÛoo›ožyŠæm˛É&i,ˆ—ˇß~ÛÆ—Ä‘Åéͧ'!7aÂCpPĄG4ލã…^h+ÂoŌ¤IŠîˇß~k×]w}öŲg‰Õnģífx !˜.žøâäO§õÖ[ĪÎ8ã ã…Č5fgC˙ˆ%"[#GŽ´¯ŋūÚ^yå•ÄD9ŋũö[bC4Ž÷ū}ōÉ'vûíˇÛ§Ÿ~šöĪ=÷\ÛxãmΜ9vË-ˇ$DEˇÚjĢ]|ä‘GėņĮˇƒ>Øîēë.;ųä“í‹/žH6Î)¯§!ĸWmžÎA[ŽO`îÜšÖˇoß6 t•ˆŦ1ĸīŋ˙ŪîŊ÷^ģûîģmôčŅFԈÄÍ‘sķÍ7ÛļÛnkW^yeZoÆMú†n°áÇ'šGˏéû:.ĻYúé§ėĩũ÷ß?‰Ļåˆz‘žxâ {õÕWíškŽIâoüøņÉūg˙ P8ž-ˇÜ˛9ŠF4}ėIäXŸ~úédŸ8qĸ!@3cƌI\0Xgu’pÃÁ‚)Ūyį%qJ„rŸ}öą;īŧĶžzęŠtč𠊇x9ā€SÚ%uԘSãK˙p/bیŲ×í]~ųåI´rŽYƒ÷čŖĻZ¸ŸūŲ~øaÇ1“˜JFā"ZYˆ'ņq~‡v˜­ģîēÍ6\z9ÜĢÅ7œūˆ€ˆ€ty܇XjÕִʈ5ĸ' D1ĸ1¤—^z)EDž|ōÉTƚ""HDâ¸yŋøâ‹vÕUW-7ͅāCŠųd|íW¯^ŊšëoÔáŪ}÷]:´õßô M–Ė"VH>ŽRŽôM4m=ö°ŖŽ:*­mã8ęëë͇úDÃü­Č>NÄ Ņ8ĸFk¯ŊļíŊ÷ŪÖŗgO#JéiÍ5×LŅ4Ļ"Š÷Ë/ŋ¤ĸŽŗ÷[ŧE°‘8‡¯ŋūz›ŦįãüķŋŽ‘Öü1EÍ(÷7aÜpà #ĻXG•ü"pģ랋 2¤Åų§ŧÚ|ĶÁ鏈€ˆ@—&ĀŦB{w[Ķ*#ֈr1B„ø2͘DExđ€)ŧĶO?Ũ$ĻüˆŽ!bzë›ožiæãâhŅĸÖ_FG%÷Gė0íŠHcęđ˛Ë.knķĪdFŒ‘Ē3ŨĶģ$/'Īąđôĸ‹Ļcōc6!DxpÁËaĮāŖM2yũŽŗˇ_ŧu‰# Ęq3FÎņ1Į“ĸ‚Ô9öØc“Pã8á„ėŲgŸMcãø'Œkņxhq;‡âūąW“oq˙ÚčZj=ôPjņž[é(ˊĩĻ{ÚJ“Q’C=4­Eb*›.ë‘ˆŽ°æiįwNk–!„?˙üķ´&‹)PDČwß}—ÆCä‰iUÖņ´xé>-,ts‹mŲ ú÷.¨ĩ™s—ļÖĸzu ÜdyĨÆsĪ=—ž eí¯ĩ@tøš4"06Dvüūøãt3įĻÍB{yŸ*ϛ=eŒÃĮ•/ž|Øgj2úĻ]ŪFŊâiļÔÉ ūáX8"MŧsŒūčƒãäÃZ5^c‚€ã˜`ÃxI,ˆœ1v[Ę9§ŦgŖ}.žĻdߙPĪ™R/2īČ1Ķ/|I>FŽÕĪ5vĘ9nÖ+˛.ãä¸[|9^įD9ū\´ÅXaĀ8øøšĨíhë,ž‡’ˆ€ˆ@×"P,ÔĐ }\¸1Ú˙ēz–56­ÆÚwĢžvÄß&Á=ûXLe#k›üĨ ôĶM™ļĐÆm¸,Réč|ŧšŌ7á˜\ŦpƒŽŋ<@žAsÃæãÉķ.Gž°š›×E¨‘ŧĖÅ@2ļãOLi"}lą DvÆËąÃ†csŲaŖĮLÛąöcŊŽsqŋô]œ8œKę >~ä8Đ.;įÍû nŦO9[ĩųrJ" " ]‡@%Bí̟›KĨɐūqV,ԜHVŦšķ¨auÖģį|›×Đú×Į :MŦųÁv§-‚Ą8q^xĶ>Ņ Ĩö' žíĪT-Š€ˆ@w#Ā,¯ķZ.ĸ“į§fû˜Ŋ;"+ĮšŅ•œ$åÆÕ§žÆļYP{ošĐĻ~ˇ,Õ܂2U%Ā4¯ŋR¤Ēw“Îġ›œh SD@:€ÂŦĄöÌEöŌ˙ÄÚØŋš Đrę3^VŦ!Ôüŗ÷˜ZëUWˆō\û\ƒÍ™ß2âTžc ä"nÛc÷j]|ģ×ųÖhE@D ŊGЊ÷ŊtÔŏÍMŗ–MĢĩmˇŅĄæēËũâ6û€7,Ö ą~ŠĩBĪ|Đ`˙|Ŋ ë† Ēą˙ūžö—A…Eáą1åE@D@D@D@ō˜Ą$đõĶŦÂī}˙į˜Åļ˙Ö}ԌëÍũá„[LYą†bÅ×,âF°]˙¯…öÖׁÖģiÉÔßGÕÛŋŽˇkJ´E Ę‹€ˆ€ˆ€ˆ€hX°$=¤ÉÚ–”y7|ĄMšĐ3 5 c=:bÔĒXÉČOōÄ Ņ5lžˇČūg ‹Û—)žžMíō~Aũz¤W|P_ID@D@D@ē;ŪS;}æbķ—߃ĨeûüÛ|›đˇēfĄÆ[x{¯Ô*jÔiYÈXķŠPĸkŧúÁƇŪäOëlęôžM/mÔShI Wíbģ~Ŗí:ĒŅÖ\Ÿ^GED ĄæQĩRëÖJ>+JJ(ÜßÖ5Ûhčûå÷ûßëėˇ9=lFCÍžWŗœrly˜˛ˆ€ˆ€ˆ€ˆ@÷ @8ĢoũÚ‘m0d‘ēØúõæåúõI ąFÍEZЈš“*)Öpˆ‚ ĄmkÕ66=jē¨IÄ~Û˓“ūˆ€ˆ€ˆ€ˆ@7'ā‘2ÖĸÕÖ~E†PãC@Ė*(‡*+Öhņōø> ĶkÚbÔ ‰6((‰€ˆ€ˆ€tWč%RÔMŽhh¨\TÍësˊ5ī X°ÅNũg˜$֊‘j_D@D@D ģ@3šnōee…[mķÃqúŗ”PƒcIąF!Ŗ`ķNéĖEš¯eÃOQ5¨)‰€ˆ€ˆ€twh&˙ Ɗ?^'ōåRYąæ ¸`ķ†éĐÅYܖëHe" " " "Н¸nĘmCkB ŋVÅNŪPmä=Å|9›—i+" " " ]‘€k&›īûļØîûåļ‰5o ¸ŖÖė^Ž­ˆ€ˆ€ˆ€twĨtTk\Ú$Öbc+ÚalCyō ŋÎ^ŪGĨ" " " " D@b­“ĀĢ[¨„€ÄZ%”ä#" " " D@b­“ĀĢ[¨„€ÄZ%”ä#" " " D@b­“ĀĢ[¨„€ÄZ%”ä#" " " D@b­“ĀĢ[¨„Ā˙ŽEaÃÕ3OvIENDŽB`‚document.wflow000066400000000000000000000160711445560650400340710ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Diff (Side by side view).workflow/Contents AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx diff --vcs=svn -s "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{148, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Diff.workflow/000077500000000000000000000000001445560650400242275ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Diff.workflow/Contents/000077500000000000000000000000001445560650400260245ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Diff.workflow/Contents/Info.plist000066400000000000000000000011651445560650400277770ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Diff NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Diff.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400277255ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Diff.workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001110071445560650400323560ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëViCCPICC ProfilexÕYy8U]Û_ûĖį8ĮpĖķ1Ī2™įyž Į<ĪCD"‘Ą”D‘D*C(eLB¤"’(¤¤¨I!ßVĪķŧī{}×ûß÷Ύ¯k¯ũÛ÷ē×ŊîŊ×Ŋ×ēkĀžLˆAĐek¤KqvqĨ`§pČ@„ęĄcmmßũ—cũ€vĢFĨvmũĨ˙&fđņö˛†ŧ|ĸŊCa| „ŽwDT Č Xū$>&ƨ0fŠ‚„ņô.ö˙ƒWvą×oŒFũÖąˇÕÍŽHĨFų@„å”8oØI 9Ė'0 FgkzP}`? ëH†††īâ^‹zũ›˙ÃTĒ×?6ŠT˙đŸg[ÂëFG„P~ßü_Ą!ąđûú}á’bš;6,đščCÕ7ƒ¯\đų+"ä÷˜Á:‡o˜ƒ,ÛŒa^–VaMŋ(C[Ãm!ëˆŨ] ŋ3Č/"ÆÚū/ųĄÄ=Kayo´Áßv.QMwĮŒ–7FÅÚ:ĀXÆ]Ņqv0†# z“`īô—ʏ¯ū_rÂ/ĐĐ䏂c˛Û<æüÁáfģ>Ā}!”€ž DÁeæ@č˙UJ?@…kâāēh ` ˇ‡Û„Øō—žŪ˙’ūnįˇûO‹ā ëÆūĶįŸŪ(pŸÛ >0ū[N…ûØ­Ûõ.Ú#0í_}ū­ąkīˇ72ĩ2īeļūö %Œ’C)ĸtQ(M”*  XP@ Ĩ€RAé ´Pęp*0o`Ëūû¸k?´Ņ/îlx‚šc\ģûė^×Įßځ˙Ü˙/@āĐrËōßã{ūĐ Hˆ ôˆĄčĀ_ޝ$Å$Ė[Z’"'#+ģ[ũ˙æØŗū8ģjû{.‚X†˙% P@},ú_˛Āj?Āįø/™`ūâԌxĮFÅũą‡ÚŊ ĐÁĘx€…ßŗPę@S`ė p‡ã'ŽÁ(’@*Č9ā$8ŠA¸Ē@h- tƒû`<ã` Ė‚ˇ` Ŧ€u° A"AŒ;Ä A¤iB9d š@ž?ÅBIĐ(ʇŠĄr¨ēĩAŨĐChš„æ ÷ĐWč'‰ "˜ÜaÄ„ Ba†°GėGø#"‰ˆtÄ ÄYDâĸŅ@Œ#fKˆoH€¤A˛ ųRH¤Ō éŠôCF!!ŗ‘…Č d=˛ŲEÎ"—‘?P#Š‚’‚ãÔå€ōFEĸĄrQŨ*T3Ē5ŠšC­ ~ĄIh.´Z m‚vFûŖãŅčBôtē=Ž~‹^Į`0,Œ2Æ゠ÂÄäbJ1 ˜.Ėfķ ‹Å˛c%°X+,ƒÍĀžÃ^ÃŪÅ>ÅžÅnāhpŧ89œ!ΆKÃâjp¸§¸w¸M<=^¯†ˇÂûāđyøJ|;~˙ŋI` ˆ4ö„ B*á,ĄžĐG˜&ŦŌĐĐđ͍ԨĐŌĻ9KsæÍÍ"™(NÔ#î#ÆO¯ģˆ“ÄU‰$LŌ&š’bH'HÕ¤{¤W¤ ZFZiZZÚÚÚfÚ§´ŸčđtBt:tît‰t…t7é†é–éņôÂôzôTúCô%ômôôßdŦBrj2,’ąda˛Ų‡œNžDžGžgD2 0ę1z3aŦdėc|˄aa2a bĘaĒcbZa&3+0;2`.ažÃ<˂df1a aÉcidyÆō“•›U‡Õ—5‹ĩžõ)ëw6N6m6_ļlļļqļŸėvö`öSė-ė/9Pâ6ņ8ú8–9™8Õ9Ŋ9ŗ99_p!¸Äšlšr]âäúÆÍÃmÄÁ}Žû÷2 6OOO'Ī{^F^MŪ@ŪŪģŧ(ĖJå,Ĩ—˛ÂĮÅgĖËWÎ7ġÉ/ÂīŸÆßĀ˙R€  "ā'P Đ#°"Č+h!˜$X+øB/¤" T$Ô/ô]XDØI8S¸ExQ„MÄD$Q¤VdZ”$Ē%)Z!:&†S +{"ŽW/–@H(IJ”JŒHĸ%U%Ã$+$'¤ˆR:RqRĩRsŌ,ŌæŌiŌ-ԟöîqŨsjO˙ž_2Š2!2•2S˛dYSŲ4ŲvŲ¯rârŪr%rcō$yCųųVų/  ž ž+2*Z(f*ö(n+)+E)Õ+ŊWTöT>¯<ĄÂ¤b­’Ģō@­Ē̚ĸÚĄúCMI-F­Qíŗē”z°zúâ^‘Ŋž{+÷ÎkđkP5Ę5f5)šžš5gĩø´¨ZZ¯ĩ´}´¯hŋĶĶ ŌšĻķIWF7JˇI÷ģžš^˛^—>RßH?[Ȁlā`PlđʐßĐß°ÖpÅHŅč Q—1ÚØĖø”ņ„ ˇ‰ˇIĩɊОi˛i¯ŅĖÎŦØėĩš¸y”yģÂÂÔâ´Å´Ĩe˜e‹°2ą:mõŌZÄ:Ōúļ ÆÆÚĻÄfÁVÖ6ÉļߎŅÎÃŽÆnŨ^×>Ī~ĘAÔ!ÖĄĮ‘ÎqŸcĩãw'}§|§Yį=ÎÉÎ...­ŽXWG×+ŽßÜ ÜθŊŨ§¸/cßŗũ"ûėčÎáâ~ĮƒÎƒęqĶíéäYãšEĩĸVPŋy™x÷ZņÖķ.ō^ōŅö)đyīĢá›īûÎOÃ/ßoŅ_Ã˙´˙û­€Â€å@ŊĀâĀ/AÆAeA߃­‚¯ī„8…4„âB=CÛÂČaÁaŊá<áÂG"$"2"f#Õ"ĪDŽD™E]‰†ĸ÷GˇÆ0ÁÉá`ŦhėŅØš8͸’¸xĮø›„LOČJx—h˜xų ę ÷Áž$ž¤Ô¤šdäōCĐ!¯C=))é)oŽJ%¤§>N“IËO[;ât¤=;ũpúüQŖŖĩ´Q™ę™eĮPĮ eÉgËú•í“ũ(G&§0g+×;÷ŅqŲãgīœđ;1”§”wá$ædØÉg§´NUå3ä'æĪŸļ8Ũ\@)Č.X;ãqæaĄBaYĄ(ļhöŦųŲÖs‚įNžÛ*(/Ņ-i8Īu>ëü÷RŸŌ§´/ԗq—å”ũŧxņyšQys…pEá%ĖĨ¸K •Ž•ũ—U.W_ḒseûjØÕŲ*ÛĒŪjåęęޚŧZDmlíûkûŽ=ŠĶ¯k­—Ē/o`iČšŽĮ^˙pÃķÆŗFŗÆž›*7ëo Ũ:ßÄØ”Ũ 5'4¯´´Ėļē´Ž´™ļõ´Ģˇ7Ũ–ž}ĩƒ¯ŖäķŧNBgzįÎŨÄģßē"ē–ģũģį{÷yž82ųåE܋ͩÃĶčéė—ô/ _qŊǘ›i˜UšŊ3§?7øÚîõÔŧ÷üŌ›č7[oĶH …īxßU/Ę-vŧ7|˙äƒÛ‡ˇKK›Ë>ž˙$úéÖgí΃+Î+oŋD}ŲųšģĘžzuMa­į›õˇWëĄë›ßŗ7Ø7Ē~¨üč˙éôķŨfüvëėļØvû/ŗ_Ķ;Ą;;Ô(ęī\ —??ž^…9„ Ėž@ ũÃ)~kĀt‚u`Œ„ķ_a` į§×ÁwH J‡&ęˆjxŊ€EuŖŨ1Ķ‚=„ŗÄsã734O‰¤G´éÆč—Č8F)& æT–kŦ/ŲŲ8,9s¸†xx-(š|ã|‚ūB5Â_DÕÅâÄīIĨ ¤“ötÉlËÉĮ+\Sü¨,¤bŖšĸV¯>§Á¤Š e­ŦS­ÛĄ7¤ŋbHcÄjĖg"eĒlĻgncábéo•f}ÎĻž ^Ų¯8'g1W[ˇČ})ûO¸WytzŽPgŊžú |É~‚ū z–AÎÁž!ĄņaIá™Ų‘ųQyŅ'cÎÄæĮÄ8p21ã`JRlrĖĄ ęaįTŖ4# éRGy2č2v2W-gMgä´åÖo>1{’õ”Q~ÂéŌ‚Á3;E2gŨĪĨוŧ.%]/ķŧ˜[ŪT1Y‰¸,zÅâjlÕņꆚĄÚutõ˛ Ļ×Ŋn$4æŨŦēÕ×4ŌŧØōĢŽīļL‡æ‹NĮģ>]áŨzŽÜËī=ßW{ŋĨŋįÁŨ‡CÆß<ē<ûÄ`„<2ũ´aôā˜á8y|æYũÄÁįĻ“ė“o^´NeNÛŋ|šųĒæÂläœūkÖןį{ߔŊM\px'ģȰøķũŗKÕ˧?Ļ~Šûŧđ%đkđjÂZîˇęõŒ?ŧ~Žl…ürßŲŲ€ƒķE!°¸‚C LÁ™t šBČ N!~"C‘Pqh"ēc‡%`pEø‚)Íĸ(‰—–…Ž›^’AlĮɔË|•åë:;…Ø3˜+Ÿģ™į%ΧĖī&%Ø&4/B•ŗ•8-y[ę…ô7&YU9ų…bÅ&Ĩnåį*[jŒę{å5Œ5Ŋ´âáh8Ŗ[ŽWĨĶāŽá Ņ”ņĸÉĒéŗ-ķmK”5› -Ÿ¨Ŋ‚ƒŠŖ’“ĻŗŠ‹™ĢŠ›ũ>§ũÖîļļžöT7/Go'_+?sĶŨ@Í õ`ųņP0Žp–r$}6Ŋŗû)î]üˁɄ§‰ŪOęIn;Ԟrķp}ęÕ´ō#ĶĢŽöe,#eIdæøææŋ~b8īã)BžâiĮ‚č3Ņ]EķįPÅ%–įcKË.ô—}*gĒPŊä^™{šåĘtĸZ篺6÷Z[ŨBũuÍŅnÜúŲŧ§Åŋĩ°­÷6Ô!}'°ŗėî“nLÎŊÔŪŽžĩ~*÷>ŌPTzŦ4¤4ŦôDvDüŠÄ¨ČĪ8Į3Ļ âsü$4šũâķԇé÷/ßŋš›y;;37÷zvūå›ųˇ6ŪíŧĮ}āX’^Öųh÷)âsöJ՗¯_Öxŋ™¯'~¯ÛXø)°šĢl{q‡˙¯ņĮ˜o) ˜æƒ;āÄšÁyû Bq1Š”E ˇQĄ¨7h/ô"&ŗÍÉāâÃŦ„šĸ$q‰TOC§ᑪ •äDFk&fˆyŽĨõ*[&{‡=§—07–{į-ī Ĩ‘¯„?C LĐFHK˜_-˛!:.Ö,^*qXŌCĘPš"ŊĩįšLŊė9WyqŦ„âĨĘ*"*;ĒãjUę‰{-5$4QšSZ×ĩéøę*ë1č­č\6L2r3V5a6ųlúĀŦÜ<ÁÂÎRÖ kõÚēÃĻĐ6ÆÎÄ^Č~Įášãu§,go%Wzסö}yûũŨu<8<>yvS‹ŧÂŊ |¸|V}ø•ø‡hrĀk}o𚐸PÃ0ž°ux]¯<å­Ã bgãzâ+¤&ø$ObHÚH~u¨7ĨîđųÔ#iQGÜĶmŽjfHeōcĖBgũĖūœ3Ÿûüø?ũ';O5å7œn,h8s­°˛čōŲ‹įƊ+JJÎW”^ŧpĩl¨UĄp‰Zyârį•Ĩ*†jÕīÚã×ÚëØŽ›ūŽĄą&RŗnKTk}ÛįÛrîÜŊKî éž}§7ĨīSŋ΃éGÎĶķ<š˙4vĖā™ÄsÆBĶF¯Rf?͟X{Ÿ˙ŅæËđ†ķîø˙Ų[Ú]0JœõĀ…#r÷ Ü+köĒ!Í o=ŌÍûgũ`jđĖ‘Jaž8Ą Q˜F@0ߛA`ŌD2â2â âRiƒLFÖ 'Q8x!fbCh$ZŠž„žÂ0cŦ19˜~,k„=ŠíĮ‘pޏbÜ<^ ƒī%0|7i°44­0ķ %> ‘rHĢ´N´í0›)Ĩ'Ō¤_acøH%¯0Æ0ū`:ÂLd>ÉÂĘRÉ*ÍÚÎfÆ6ÃĮAā¨äÔáœäŠāfänãqáŲâ­¤XQ~ņÕđī ô &Úūwá6‘QC1ąIņJ‰IS)Qi´ôĖž>™*Ųlšxy_…}ŠvJVĘ*†Ē&j–ęž{5â5Ķ´ĘĩÛtĻu?é“ T ũōkL.›ž4K5O´ˆ°ŒŗŠ´Ž´ņĩ ŗ ˇOqČu<îTä\īŌã:âļ°oĮĮCÃ͉šæUáũĐé'ëīP8 BtC…=‰āŒ ŒjŠūë×|€”–ø$I1ųR ÃáCŠ;GBŌ?f„f.gd΍8ž‘—~J4ŋąĀėĖxŅĄsF%öĨ!eGË[. _AUŠÔD^ģ\?ƒũĻ_Ķ…–wí{;ĸ;‡ģI÷¨}- G.ƒeCK#ŖYãˇŸ“_ØL§žęũ:ĪúÖøíû¸ĨC“?Į~q]å][X?ˇ!ųãę&~ËvÛũ×áßķ‡,ŧŋUúĀˆ2b 2č´Ž  Ėa1†D"åTd>˛fäR(OT!ę1‹ÖE'Ŗ;Đ?1ǘĖ,Āęcŗ°Oq\¸\+wÅ×âœ7`îëKĶM"Ļ_“ĖHí´ÚLÚuē@ē—ô6ô} j wȊä&FuÆn&cĻf7æ–XV,ë6ļgė45œœk\ÅܚÜK<xÍx7(×ų‚øyų§ĘŊ„D„–…¯‹ĩãû.>$qEō˜”Ÿ´ŅYŒėšÜŧüS…{Š]Jˇ”á4TĩQ­MŊsī}1˜%}ĐAéŌę‰čkė3L4*2Ž3i4­1Ģ5o°hŗėˇąž°™ąũb9đ8J9Š8;¸Ä¸fšUėģģÎãÉC5ķ ō>îsĶwÚ čt.¸'äk˜x¸wDiäãhŖw#ūk‚JbäÁē¤ī‡´R2¤‘ŽXĻ—ũš)},;k"‡'7ęø@ådôŠžĶt^gzŠøÎk—,•—y”3WŒVæ^ą¨Ŧ~WÛP—ÛāyCų&×­ĩæéÖļö[ĨŠ]>=nŊ{ī+< Ÿ+w|,/ę1ŋŊĀöĖvŅųsä⸒ŠRë Ũ•ĘĢ/ņTV\žZį 7¯)×u4h_īk4š9×ÕŧۚØļ}ûôĄÎĒ.ņîk÷¤{îËô_{Hû(wæqÔĐü›‘ëŖ´c!ã'„žž|6Å6íüōė̉Yæ9ÛיķõoîŊZØYd~/đ‰o™÷#÷'öO۟_­t~)ũ°*ģēēvã[č:e}ü{ėqŖō‡Âģ?Í~>ÚTŨŦÚbŨJÚz°Íŧíĩ]ŋŊųËč×É_“;;!;Íģãí'/ˇģzˆ¨ o?žÚŲY†÷/ķØ>ĩŗŗYąŗŗ} &đ?Ž?˙+v•1đžûųŦ]tīFÕîå?Ž˙Sßy‡x>a IDATxė|UEöĮOzGņ¤¨(Ø;‚ŊëęÚ]ėĢŽmíēû_ëZv]{YëÚËŽŊlØ+" Jī= iī?ߓœĮåō^ō’ŧÎäs3wfΜ™ųŨš3ŋ{fî}9S§NMˆ;GĀpGĀp‰@nƒŦ•WĘpGĀpG@p˛æÁpGĀpŒ€“ĩ|qŧjŽ€#ā8Ž€#ā8Yķ>ā8Ž€#ā8Ž@FĀÉZž8^5GĀpGĀpœŦypGĀpG #ād­_¯š#ā8Ž€#ā8NÖŧ8Ž€#ā8Ž€#Ѐp˛Ö€/ŽWÍpGĀp&#āÔ‰DBĘĘĘä—_~‘ß~ûMæĪŸ/M›6â9p999ę{xÕÄ㑛ķ$/¯zĪŊ9ĄŠē´”]t•#Oī.-Z4]Ž/h ūyôûmeĮ›UŠŋ×Á-”5•9ūsSYÃŪ nÄņ‚¨ :Tš7o.ûėŗ4kÖLIZ^^^#n}ãn×ÖŽ/ūĐQsĨ[—ļ’H7ŧ;üWž(įā1Å\!ŸHiøWRšSÉs “yŋ-’ëīØ>ô‘ōgg›LËsÕÎĢoĻũŅäĶ•Nzŧžņpēŧŋj!Āĩļū€ŋ*ô÷U áĖj[ŊĮÁĖtē”#°Z#ØÆŒŖ–ĩũöÛ/iQcÂ,ŸØË'u&9/ÃbUÁƒëĖĩœY$RP&’_ŽDŽä˛VŽÂĀÖ8įㇴ%Á/(Ë éšŌjívräš;ĘÂv-äŲ˙ŒYnBŦͨ&ũ1/7WrŖG…õ—k3äŊwäŅGM’5âĮˇÃûķ2,¤1āąĒô÷Úŧw’._mHWÃëŌh``+))ČÚV[m%ĨĨĨz0š—––čDˆ šûĢ\Cģž\ךK2/ŋDr”Ü”…kZN\°ĨagûđíWd÷ŊŌP¸äā%‚u-X؂_Pœ#}÷î!¯=ø™sriŌ¤‰ö‰ÚžŦžUõGĘ-..‘ßĻÎVāæRF…ĩæYž,Y˛XŪ~û]9ō¨cdæĖŲĄc> í)-“ڇåār‹ą÷ëÆs_¯Šũ~ÜØœ“ĩZ¸ĸ ,üü|éÚĩk-hsÕE€‰hƌō /șgžŠŲ™,ęŌQæôéĶåÅ_LY&éÅÅÅjyéŌĨK nĨ:ÁCԊŠ‹‚•­™NĘ „‹-’§Ÿ~ZFŒ!§všląÅÉ6Üpà Ēŋ}ûöI‚gí˛ ą.ÕÕË íÄáSŸh}Ŗõ›6mšü÷ŋ˙•sĪ=WåI‹ĻšĒ„i+¸@ƚƋŠ’_Lka"7ĩDX÷´î÷ã7CåĒ Īëīë(}ˇŲEq ’J‚Šƒ%niČÛžs;™83WõAvĀĄļ]UũąI“ĻIü.\$_--úŦ/ų…Ō¤iK).*­ZÉûCŪ‘ãN8Iú÷ÛB.)–Ĩ…%Ōēu+5j”ĩV­Z&ĢíDŽėõEĮgŸ}&ŗf͒ƒ>xœVVŋį/'˜āŒ3ڎŠōŖõÖ˛öāƒ&ëÕoúĸō´ˇĄ†i/ײVP’Âp=—–”I~ _…Á'ná’BšįÆ+ĩ[Ũ{Ķ2qä‡xdō‹%Č%$đYüŧv-eņâÅÉží‹ÖŸ†.;ė°CR†øLœå¯Ŧ?Ū`Î1qNŽü23GÆL-–×_}Y~›ŨT>ũvĸ˟.Ŋ7ßB†~öŖ|ũÕ0iŪĸe°†Zä´ų–õOģžčZc5dķÍ6W sŋ~ũ䡇’īžûN6ß|s-KûQĀ/ŨõŽĻũõ×ōæ›oJŧžŽĢûauÖ_ßũ=“>Ŋ:ʸe­šW=:@~õÕW2zôč°,đļj)((XN˛<ÔÄŨ}÷ŨēĮÉōތ.Ķą˛~´íčbālÛļmRmCŠcϘ[{&Nœ(‡~¸N ֘LtXūTífâ)**Ōe-lB8˞:Á_&6y?úøc9îØcĨOŸ>7fėØ0ųąUŦé%!oq {É:a•RÉōLŲĩféËôQŋCũŽ­¨u($…=8æŦ|d9âõEF›BC’úŅgųãúj¸4ä˛pMhí),i&Ea]3',k–å†%ŌŌ°āyëŲGdæÔIŌŦy‹āO–מ}Hö?öl ´†ĨÃpä—IqYØĶÔ˛Š,]ēT Kō:ĀĖũãŨwßĩ ú¤Gå—KŒ*돴ūˆ.ČÎŌĐ?‡š,Ā ¤hÉ<ųrȧŌt=å›ߐßíš™ĖĪ=f’,˜?W6ÚtۀCŠĖšģTÖė˜[ž/3”Ģ{´BģŦūO?ķ´tīŪŊŧFᚃß|PŪ/BŦöĻp‹Äûų­pŽ„.øŅûôTũąŧ°€Ąé¯ˆđpŪâQŸũŨŽ™û+"ā–ĩ1É(†3?–ĨŸ~úIš-ZčāDÚmˇŨ&ģíļ›üņ2lذdü AƒtÉkįwVKé: …<ųĀdšÍ6ÛČŽģî*ŸūšæyīŊ÷kK,Į™ž¨˙ÔSO ēūøĮ?ĘQGUiž_ũU­„ņrnŊõV-÷„N~ø!Y‡åĮŗĪ>[>úč#ō˛!šO<ņ„ĘYŪ8÷ŨwŸļ•ö|øá‡IŅē§“1Ô'Š-°ü`ŗĮ{Ŧ€ ÄcĪ=÷T ׇåëK/ŊTfĪž-ûîģ¯ŧôŌKÚ+#^o&ËwÜQq7̚•Š#u`baäléŌ@Đ°Ļ…8âíĀõ՗_Ę5×\#ôĘ pP/ČŽ,øœ7Në¸{ĀėÆoLNîCB[é7ôŠ›nē))oeŸŧ‡z¨ôīß_vŪi'Kß-č{üņĮĩŸˆÕīˊúaEĻ~ųEumŊõÖZæû!>úĸõ}ã7´ŧ]BŊ~øaŊ6Zf}ë­ˇ4/˜?–GŅKÚyį'÷Ũsėĩ×^ō÷ŋ˙]õžú.¸Đ/į͛—lĂÃꛭpQāŸ,g„ĨĐÂĸ`Y Œc§Ë]o•;+Ž=Ž<3XŌJeIYäᆗËä…ˇ@Ö´-áūIᏆøÃ’}œ~˃âŪ{ī­XrÆû"ē,|Ģęv}–,(ųķ )j";ė}Ž.ɗ˛üIŌŖį–2kF‘lŊŨî˛Į^‡ĘÜĀÜ´í…áŌŽ#ũMõTô#ę`iϟ‡\Æ4ÂČs/žūúëz_mŽķ!CĘĶÂõŊ9ôé-ˇÜRû}1âŦŋüã˙ƒĩņ÷ŋ˙Ŋ|ûíˇšį§‘#åĀ”ũë_Ōģwo)n“§ŧÉa<=ōČ#ĩ,°ûî›o’éŒGΆ- Üãô9ú)õYĄķŽģî’-‚Eą‡Ĩ_Ģŋú ¤?ÖõũP_ũ~ãnnY[†E•g z8ü0éŸxâ‰rĐA ŲYgĨû6&L˜ 7ų;īŧŖû˜tžyæÍ;iŌ$%[Ld­[ˇ–{īŊW~ūųg]R„(°4€ƛ-[0čtîÜY—ËZ…}#: †áĘ+¯T’†uk@ mûīŋŋ~B ĒøˇpáByîšį4īNa’fBˆįãME>)‘Ēžƀm ûĢp´…ē0°A pÁyL•°@ūķŸ˙”/žøB—H ׊*Ģ—ą‰lüøņËՇ=R”M:]œ˙å/YkãE]¤Ä•ë†{„ŽŋūzųŨī~'\\ēz“vŲe—)–Ŋzõ’ûīŋŸ(-SOÂ?ĩ „:XĐWöūāԋ‚eą~k­LŽ;îxp!…{íĩg+ ËE[ę>ļĨK UĪâÅK”Č_wŨua˛,û„ æÔĶNÕO‚lŊõ6„uĘ)§„I{¯ ?ō.ŽxtĻåV,ČŨļÛn „{˜’ĸ?†`įęÃũ /<,Ĩí5?ö Ú`õcrĸ~ėgē!čÚnģí{(åTW9Y/ĪcõŊøâ‹•¸÷ęŲK~äaÅ{Á‚…jEĮgŸ}&Ümeŋ@ØvÛ}÷Đ›ĘÔŠĶä›0y‚í:ët ũî]ų1ėå{õÕWC]Ņ/ËĩúĢUF˙‘^aĩĢÃ0•(K@Š/‘)‹›HûšÁZ”ĶDJ°Ž…}ká}_.wŌQo=Â?,k„ą8. ¯‘Î( —Ģe“WŽ~܇å-|jIåHįūãĄčÉ'ŸÔĨAn¸qțÅ-Ē7U,‹Ã˜ÃũĀ‹‹š) ~ah[č­Ō¤mk™1sēlĐĩĩlĐmY´x™…K—;ķĘÃ6^ņԁíWˆ{ä‘GÂŊŪ1|ž¤….÷ķŊAtéXÅx …Đ?đƒō^x â!Ļ˙~2a¯:v˛ßŊûÛUJüØį9qâyíĩ×åå—^–‘ŖFĘUW]ŪR}LæÎ§V˙AƒĢđĐpÂu D˛ŧ˙Đ1rT–ūu˙ũ†eŲ‡åī7ü=`VĻõøöÛīt Ę_|.ú͟äË/žÔ‡ļ*|đ!Ą~īÉíwÜ.×^{ÜsĪ}ÉūštÔ}˙ĶŽ]‡ũ;Ž?4ĒŪû;}ÆŨō8Y[ŒC € n\plŋũöjáŠī?˙ųO@^ĶÁ’É9– ą”`yÃũųĪVĸÆ9Ö)ĸ+ޏBIÄŊĻŌY‚Ÿ4B͉ gå@Ȍ0hBøĮĶ#{]ČËDH],ŸÅaqIU“$ēŖmĄNė­Â‘Ģ„‡˜Ŋ(={ö”ĩÖZKî¸ãŽ”yiV™ãŽ;N-JʈN.qŦ*Č¤Ã–4Čuˆˇŧ¨3/ƒ°ĮGyԟ<8|âŌĩ‡^ ,žÂ!Ÿč°IP…V>€ !$Gė°Ã4ĢaI€ŧXĖØëͤIžZģhD‹ëŽŖˇk×^ëĨ|!Z?*R^Ž0]šáí@ō—ëĻ{’4o¨6ÖfâûöíĢQģ랋>40Ą1éQ×˙û~-âÃ5Ŗ’~ōÉ'ËēëŽĢųzõę)sæĖQBÁ#>Úļčšf¨‡z­Xö ¤ Ņ,\ßâ0I‡fjÃ5Ë o{â—;#¸úáŌķ?¤2„ƒ )Íɓæyá ŌđQ\ë3HEÅããčo掞újéØąŖôčŅC 2Š01Šú# [˙4Ũŧ Ë DŦ$Ĩ…‹dú¸Qōx Ũ9yÍd×Ũ>ĶGx1"ģâpĐnޟŨ åu)¯i§Nô“‡ÂhũĘß&-—a`Í5;IM{Čc?ärƒÅūCí<Ŧĸ7Ģą0âŪz‹í' šéæ›4Œeū™Ž ãĪI'ŦņVúĐŅŽ};•ųėŗĪeėØ1Úŋ$7ø¤Á:>´gh˕2bä}€ĻGy„ĘqÄz¯•••.ˇ]%Úl˙´īÔcoÕIœŦÕVíŧáĻ7ŸIæ•WÂëųaŌdo 2Š`éÂa’ĮŲ@H>#LސŦsXŠ6ÛlŗäÅÚfųŅÅōc˖-“e@˜6Ųd­é8ä)‹ÁĘōRˇxž6ÚHËĻs“EGŧ-”ƒN“ÁĮBČũË/ŋŦ֞Ŗ>ZÛĪ ÖvH-DįŒ3ÎŦ]F (‡^žå„īôĶOWô˛Q}ŊõÖĶvŖË0ŽÖ']![´qéęÍ21mĨ,;įčˆ;Ž“—}Ō Û$BÎ툆MËŀ„Mū`šæškj,ē",l8,¤”aŽúą ļ2!R8 #ĪaaōFÛcu7úiT0ēĸųąš´iĶFõĄĮōãķ2búaŽáÆoœ,;LJ6ōĨ{„ūĀŪ-dpä7ũūÕu,{sߗ>>,†Ī–Ė™%­‚u´$,ûæËĸ=˜P.‡écɖkl×Í|d¨'ÎîM „¤EûņęO?b, á¸'L/>‡É[šsįĒįz9¨‹åŗē‘úc‹— ‹ļ…rĸÄŅę édЃ7ÖČC<–§h^Ę#oaaĄļ‚Ƨ,ŠŖ9ΙüigTčÆJļÖîh}Ā'ŪFžÆ;t萴™å ԁN–‘Ų/"ēzcA办%ōąĮÆ\´ūÄæWŽ=õ´ÉŒs #Ī oL4L<‡žQ–ČĮŽĢ˙XmōŖŪārûíˇ+–Ļ×Ę }ėßcŠ]SĻLQkBš%kŲägu´|VoĢa[rGõeYŽū6ČYŨY+Č5Ƙ‘ĄîäAVUHúŦ,|ÂÜ_\;öbŖYû¸7ė ÎÎņë2løX9­šæ˛ÖDZ‡_ hSq´ –˛­÷8HæM+ŋũ0TfŽûQļt¸´ ņíš7 ˛MĨUmŨ,/šŌ$ėYŗ>Ŗ€EūYß2Ÿ>J˙ÃŲ9>Ît˜ŦFFâĢꏴ ܋Âūģ‚ÂĨ2ü“˙Č×īŨ)c†ŋ̟œiŅĸy §MäŖđ˛ÁÃ÷ß ˙{úžđærA kÁĸŽYĒ>DĐiũ Ÿ°ÅÛš]{ ãs/˛]K,ũÜú0˛<3žđVēõ#Æāh~Î)k.}‡sČãäœgŦŋQ'ęŗ¯BÆ}†Ŗ|ú;iŸ|ō‰ 80Ų^ôÖW˙ŗ~W_åÕwW°ũß ¸emHĒŽāfåāĻg/V öP° âÅÉ`ÅRÆō ûJ°ˆāl@ĩs6~ŗ1œ'Ãø Kë›øœ°Š1qąũ–[nŅop­ŋūújí`Đ€PĢÎʉú,GDķaqšđ ĩŽŧ„ĀwĘŦœK.šDËa#pemaâ`s;ídylˆŖ.q ƒ`E|ˇnŨt2žöÚkWĀëäuƒ 6P–{Āņú°oĮ2´‘=q´lŦ ü,˛œÆFa!ûųį§ Øt ´?^oޤáüķĪW9,C‡rHg+ŧÍ1y0s€ iœ3‚aâ™Tė /2ŅI^z`oäķĪ?¯u€AvŲO†,m§DķZ]ČG?âE‚‰'*ÔÁœ•mõ$}”Ëa:9g}ÜŅÅH&+ ]ôu–ûŲ Č„GĮ‘ŸīÎŅtØõĄ¯ģÉXÛ? /Ÿ°/‘žB}˜dŠK´žčŦOgXŅ^Î!i­Â~ģDn°J‡Ĩá°>Ž\iÛĒŗüūÜåáŋ –Ãūtmx[7,\C>6ɇ@^^‰´)j"mÛđÛ Kĩ†#;Įˇsp°0ž…Mž¸(&–ôx$,š~ôGt.* ûÖÂRč}“ÂeŪ‚É2gÖ$É_2GÚ%~•Ųŗf įļa[` oÄ.ÍX´Õŧô+ĘG—9ģfv]ņ‘ąÃäâaÆ–ī!Fܧ<@ܐ#ŽU‰čØôėŗĪĒ*ĶCš”…eĸĘaîsú0mŒŖėæaÂ,tŧDÄįE wlī0](f/dŽņ Ë?ē9('*gíi žĩ‘~Äy]ö÷ƀW]ĩÁ´ČÚ ‡Ī@Ä⯓?O[,{Ō‘q¤s`šÁbà ƒãfNåLo<-O^Ū„Ã F9¤QâąL0HÚ MįÜtŲ9ų°nP7Ģ7åSņ”ÚÉķômK´ŽĻÛō[Ø|ȒåE§éĨŪXŒ(ßęmi6q°_ ’dņVĶIū¸3|Ę V.˛ÄC,íē˜đbКA—FŦÄ“Ÿ˛i#}„ƒëŖ.æŦL‹3Ÿ6aá˛ĨHâŲ‹G\Ôrb˜YČņâ xŌFĶOyÔßÚdåS'Ģ#į&oõāÚX?ą<ø–Žŧa…~œÕÉdčkfU3ÜMÎdŠ? Ŗ8ĮÛ¯_]… Ž%„˙‰_:Hˇ5Â=IsˁŦY[¸š/˙ûf9čÔKāoá:CÖ ca1ŧAZ"ã§Ė—é#†Ëųƒšë^+Ž!ä î`e÷aœahí¤LÇ8Ã'“ūČ~,Ę =3g͖ã˙ö‹t]ˇ[ؑ&aÉē}¨O3iô/\4GšĖ|J.ēđJÉũ8?Iøhnŗ@ÚĮɀí:é5ĸQ6õ´žG}­>œã¨?‡ĩ‡8ęoéŒܛ–†Ŧ9ÚG˙ ø†…•KœÕ ÂG{!¯čÆsŪeO&}-z?üøãúđ‡E yî5ä­­VVĒú[­nĢZ¸>ûģ]S÷WD`ŲŖõŠiSÜ|L˜<õsF˛r3™°•xÎ9Lž¸TÎd, ]Ļ'zÃ19ķŖåÄufp3gz [9V~ēļÕmyĐcņ–—p´&zyLFDū!cé‘h­åę´ō­,Ã&*ÃāmņV.>$ÆōãGëMŲč žknÎʉęˇ8Ŧ  ōLL”ËÁFš ‚„97ũV+ƒ°Äaš5]äab˛%Î& |¤Yį,ĶããŦžøČĐ^&sČQ/&Ãh,?ēŦ^čĀÅÃč´øT2ö"ĩŲhŊĐGĀ ęG]Í7–ĪĘĒ˰]7ęCũ:ļm-mۅ_…øBt`ŋÔ Ü žü’L9Iã%„Đœp $ôƒ`é*h"ÍÂI‹9_…6îlģå5?ŪNʍĮY8]Zeũ‘>Mģp­ZŒß~¯öË`•ás#¸NMšÉד†ÉĢĪ˙+–öÚ7x‹âÚr÷ß%I×}†yíS?ú‘GëlqÖäĸcéQšĩ‡,ËCYÖOˆŗxęÃ9ōčåĀ •ĄoąOÍåY?Æˇą9ÂV>zŦ~VæĒļkXŸũŨ°wËFæeq~–v#"=‡I‹Ņtâ,đã74rgyLņœ[ŧų–na“ŗ›ĖĘą2M.ęsnÎĘ ŋšhęNKˇ8|+ßŌâyŖņvnž•mžÅãGãĸ:­<|ލl<&FtÅ1Šįæˇŧ&“*8r,KŧÉO‘1Š0đQ–•Į3Œš6Qm‹ĨĄÛtXŪh{-Íä(ÃŌņ­žø&Cäđ-ŨČ3)ÅķGÃČÅķX^|\´\ ã[yVâĸįÖW-ŋĨEķEËļüøæj;ŨĘ6ũkŽÉ^žPoFĶp`Aã š=–sí‘áV5.3d­,œŧ™#dŨ–ķĩŋÄëjeā“féø†I4ÍdLÎōŽĒ?Ö,ņŸuÖaēG K}–4>둗ęŌIáÛvaŸä.{hŸčŲf{°1|Ŧo[,ž°•E8ĖYģ,.ÚFdĸa“ąļš~ÂŅzpnyņIˇƒ´¨NöÄq¯ZÍūņR /‘™Ū¨ŊoL¯åÃ'.ęVĩ0mÖšžú{3?ץÅaČë°æĮŖLõ¸Üęũƒ}Xėíâšŧõh{¯ĸMtb°žB&c>r6ą g‡Ĩ[8礑ß&IdŦ\|;'Ūôqnų,.ęsN:ÎōG͉ˇ0į8“ˇxÂv˜ #OuÆEãÉom!ž>åRž-[‡åÂĀŧˆ U 5 ÕŠ ‘ŠåT|Î#/7H•ʤŋČ÷ož&ķ'ū ĪN5ž&ŠŌ"Ē3:­Ē?F¯IhJ œô ˆ~P_ŅĐÁG¸ų–^ÔĒD=šσ qNœĨg×ĘÚ•ˇtâ,ŪŽŊ…‘ÁÅË"œî°ŧĻ×䨃ŕk}ģÔô[>Z8ōâđŖm@õGhD˙ęŗŋ7"ØjŊ)žg­Ö!u…Ģ;ļO‡Ĩ!öư!™}0ėuay…%Kžˆn“˜ųāf‰–69āÛcžå!lKf ! ˘&k0>ōv 9ęÅälõŗŧ„ŖqĻ‹|Ņz“—<æHGÖâđ‰ŗø¨Ķeu0YęȲl´ŽĻŋž|°ÄšÄĩdI Ë)[ xËKõŖT凞Ā[ØŧŨŒE R`×ĒĒü™ĻgÚ!_,•˛‹ĨAÚGØH×ĀĘæĐ^ŦĮė™dĪ'á&L™ČFû××\ŧo}|¤ãĸrūY?‰ÖÅōZžä3č_ĢWT?įČáhųÍ!O:åDņä'-Ëō4Uëī÷x;œŦÅņ°#°’0Đ3€3s0‰3ą!ŸÉ ™IžÁ?:)TV´M$•Éؤ… į–ßÎ-?éæėÜ|‹ˇ<æĮã-œIž¸Œåŏ§Ž–ÉšÉāÛyTG}3i3yŗŌ įšI‹OôņzŅöHōņVzĐad ũĩåÛĄy1 IDAT2폆9uŖ|&i#0ÄáĖįÜŽƒé§ĪsÎaēKįĸēĒ’1ŲĒŽ{4=znų)‡ķx8OŪx~ōX<žŨŋQštíX•ãWĩūž*c]YŨ}ĪZečxš#Pl2`ÂãĀ2c…Ás{Ī”ŦÕ *>KtŌ­¯ÆÚ5Œ’›ŧŦTU/Ō­o˜åаõÚl‹éL׉§ŪUõĮT¤$U;M.UZmļĢĄéjŦí]Õú{CëĩU'kĩ…¤ëq"ØĶ(ēM^LŠæˆŗ's'k†JõülNŽ”ÍÁuæ°kÉ5ļ띎5ŅŧČCÖč'œŖĢ.\Uũ‘˛­ ÖĶĩƒø8öņp*™ēhWCŅoCŠWmÕ#ÚgW…ū^[ínHz|´!] ¯‹#ā8Ž€#ā81ęæ1.VˆGĀpGĀpj†€“ĩšáæšGĀpGœŦÕ Ė^ˆ#ā8Ž€#ā85CĀ_0¨nš‹M´|’aėØąúÛt•ŠâįM6ŨtS}MŋąoF­ OsGĀpę!ā/T/•Žž%Åo?ōAĖ 7Ü0í›\ŧ]5aÂũÎÖ[l‘,ą.H›ÕíģīžĶįģMuQN˛5<Ąž|0vܸqŌˇo_ÕR×õ¤Ė%K–čGjëĢĖÂãŲGĀp$nYKBQũžM„emŊõÖKKÔL+2“'OÖīņš<Έį=ôūžQåC™;밃~Eœ´LHLTy†Ž–<ȚĨeĸ‡ŧuéŦ.”Yãg˜Œ8YZĻõD>YĶK™\¯ĘĘĖT'ēŌšÚБNˇĮ;Ž€#āŦ~øžĩ^s&džXnߜáÜž`n?GR\RgœDōÚAņœãöŨw_9öØcõ{K-s–náĒ|“7ŋ*ųlĨ[ũĖΤČrđķ6O>ųdĮLu˜œųV&á>ø@‰įņt“Kį[ž•Ņ‘NˇĮ;Ž€#āŦŪ¸em%Ž?˛Xv gáכÃ/ûIԒf“8„°}pԊĩt–ÖēukĩaøūûīušßęÛzë­õ÷‘ūųįÕ*5lØ0ũ¨f˙ūũeƒ 6H ĶũŅGéīöQOŦXėÃņ“GŸ~úŠĖ›7OķīēëŽúe}–PYžŒ—?~ŧū„ŌN;í”üŅcUVņ/• učĐĄē ŒÕ6đ;ˆÖ>ķûí7ųúë¯õ#Ą›ožšū^"j§L™"_|ņE’vØaĒ+Ų‹/ž(,-wīŪ]žũö۔õūõ×_åķĪ?WÜĨK­Š•I€ë‚ åO:UÛxāj;ŖõŪf›m´Ūԅ<ÛoŋŊę2dˆôéĶGåã:ŦäŨ9Ž€#ā85AĀÉZ Pcæ€\ņåq–.KķJ+ÕYC–<6[#iĶĻMS˛qØmˇŨTBEøđÃ—ŲŗgËW_}%ûīŋŋf]´h‘ÆrČ!J2 eXæĖĄ—âĶącG%KX~zôčĄ"2~“đˆ#ŽP‚„,?ƜĒ<ˆdččŖÖâ˙ū÷?éÖ­›Ŧ?ūXIfīŪŊĩ=X(!‹¯ŊöšĐv\ēz“öÉ'ŸČ Aƒƒ#F$Ë% E šëŽģŽŦŊöÚB9ÄÅë=zôhéׯŸD~„›ßúDųČ×á$ ”Ũ9Ž€#āŦ NÖjˆž‘ ûŨĮĘÔ ‹CÖōŲ$Nĸ‚›4i’Ė;WÉB§N4K2_~ųĨú3fĖPrņÃaŅa{âĐ9sæL}á4Ķ…lÖŦYdƒ=ņĮ‰'ęŌĢũÔ yR•‡eŒō°JŊųæ›˛ãŽ;&ÉI´č‰Ę`EŖ,t’Ŗ|~Øk˜ĩŸzCö~øáĒĄųĻOŸŽų DXŅ…CžúãĖb™ŽŪ8ĘOōķ›œcƌQ>âhžč'.^oęąÕV[éu8p ŧũöÛJ,!˜äąüækÃ?ÃČÂî;Ž€#ā8ÕAĀÉZuЊÉ2)C˜ô9˜”ã328ˆ˛&Î&u&zK”,dXh Y–Eą2á6 o’ĪōāCXL¯Yī% ËÜ[oŊĨäh5Ö ZåŠy¨ˇé"-UyVƞ{)aŲ%×^Ŋz‘%éÛk¯Ŋ” !ƒ ’Å‹Ôĸ„ŗ2­ÎԟrŠģĩŋ}ûöē7 yd qnu6ņâÅ+āDí‡$snu°|Ņē˜^#€ņzsũŦāĮĩ&?>ņä7čˇ4Ęsį8Ž€#āÔÁ †Č1)ãXۃdp@ ˜ĐŖ‡Å‘Ž,ÎōÚš…ņąmŧņÆē— BÁÁęÔļm[Mã3!8# Xâ8Ÿ3gŽÖ9ˆē8°NAú Mԋ4,e‰õ×__XÚŖâĶ•!射Ę&{ģŦŪÖō› ÄKzi–=–bižÕ‘ŧœÅÍÎ ƒ>õ6Ëú‘!:An §Â‰zcŨÃēÆ äe‰×ękžaÅõ ĄŲhŊÁŨęM=YZ…ŧĮ6ōpđö­é0ŊZ ˙sGĀpjˆ@Ū…^xU ķŽļŲl†,° ‚dD ‚=‰0›á!]X‹ æĐÅ$Ī÷Ú6ŲdMc/Kuė…#9€ ũôĶOēŋ Ãū+tC¸FŽŠÖ.ôãCŦ:tč yĐĮ7äą6ąĮ ‡élúĮĸ—Ē<Ęë¯ŋŽKĩC,kČŖG;Đ˙ęĢ¯Ē ¸@ęØáâŗ%ėyÃgšË¤† ų={öTBFŨY*…PņĄa,Š|L˜BaŖũäE/ŒēSˆUŧېQČĔüėAÃēyc_ņæ¨?ׅeXęN^ZĒzķRu LpäĨ Č8č~`:6 ÖDŗŽNVžûŽ€#ā8Ž@ĻøGq3E*"g–Č$ŠÍéLܕ9ŦL“]vŲE „MŪč‚dppnŽt&zHÎä –÷šįžĶ— ˆC6J>Čcrč€XB(ĐcÄÄd°NŲ$Ëu‚Ą‡ƒxd‰Ŗ,c4ÍŦ^SH’9ĶI§!g2øā-×ôX|TžúĐ.ôâhåX~ ˙ˆ3ŒĨîVĘ$ŸaLģŠŖÕ)Zo+ĮŌLŋÅ㛞–-[.WĻÉēī8Ž€#āTßŗV´b˛LūX¯°ö`Ũb’Nå˜Ā™üŖÖ›Ô‘į܈:ĮéF¨ĸiČCVĖÅķZL&^éFMßĘC_T§ÕŽhšÕK'Žs–+“7ŸxK'ŽÃˆVT&oåâ[Yχz[~âȇœĩßâĸē-gÆYŊãyĘS—‘bK'´<“sßpG nYĢjq+ ›ãY$ۈ‡ŠegōfŠ”e=&qâ‘å0‹ųã.ĒĪȀåeSŊYoĸiĻÃōZ9ÄGåĸįŅ<–8ęnrņxŌ,4ęO[Ŧŧ¨<įĻßÎ)#.oiæ#cįæGķEĪ-ßÎM?r8ęl¤ KˇëŠŒÅqŽ‹ę#M§6lĖ'Ν#ā8Ž€#P–™dj’{5Īc“2{ϰđ¤"[@'›Mā¤ã,Ė9dĀįŅ4‹g/ÎŌđíÜdĸ¤ÂâLÆ|ĶaåXŲq}„MÆŌĖ7´%^Ļé3ōDĨ›orQ™h\´–Į|Ë­iŅtęhéŅēØu@G<É›ū¨>âĸzLÖ|Ëãž#ā8Ž€#PœŦÕĩ‡‰8NL,Ui6ivgÎôāĮ €…ņŖyہŌĸ‡éƏĘY|TW<ų¨K%K:ņ´ĮŌņ-.U™Št"-/zneX>ŌŦŦxáĒōšËkuˇz“ßĘ0]æ[Ūhų—Ę7™Ę§ŌáqŽ€#ā8Ž€!ād͐¨†ĪDc)-úfg5T4JQÃĨQ6Îå8Ž€#ād eß.ČRŧXGĀpGĀpô8YK§8Ž€#ā8Ž€#uœŦeũxGĀpGĀH€“ĩôØxŠ#ā8Ž€#ā8YGĀÉZÖ/WĀpGĀpô8YK§8Ž€#ā8Ž€#ušÜ˙ũY¯„WĀptđ‹ 6ÚHEjãûuö Ŋ &ȇ~¨ŋƒ›Ž|wG Ûäüøã ~x›ÉæŦmËvÅŧ|GĀp@ ¸¸X† Ļŋ­Ûŋ˙$(5!mŅņíģīž“QŖFIŋ~ũü{‰ITũÄpŒo<¨ōģâüŦd"8ø ) é~2Š!TŪëā8ĢŒM[mĩ•Œ=ZæÍ›'ģīžģŽU¯ę6#j<”~üņĮĒ ĸÆOÅUGĪęwŧŎ€#Pß0îqGË O–‰ĨK—ĒUávį8Ž@C@r=°°7N¯öŲgá7yq™-#jųųųōöÛo+AëŪŊģZԒƒaŃkChģ×Áp~% #š>PŽ3&Á(D ̚ j“#ā8ŲFĀÆ$Æ'Ŗ&Ož,“&M’Ŋ÷Ū[:wîŦUŦŒ°Ų˜6kÖ,yįwdũõחõÖ[OŸZ 9ČĪSŦ;GĀp6&1>ąš3qâă íWŗ­!TÖëā8Ģ/ŒE5Æ'§Š‹KeæŦŲ2vĖO˛Ë.ģČÆoŦ Ĩ"l6žņ"ÁĐĄCĨĮĻŊĨKį5ƒE­ü‰Õž\ŖKĢ/âŪrGĀh(0žq`YĶĘiĶĻ)YcPŗŖĄTÖëá8Ģ'6áCÔ8XŋxŠL›ŗTšæ•INÉb;z„ôéĶGâ/ĪœŊHĐŖ×æ’hŌFŠKsĨk§æŌĄMs]e0ä°Á1é3]î;Ž€#PDĮ#%ksæĖIØRCt€ĢĘxŽ€#ā¤C€ņˆą ‹[5ĻÎ)”/~^(mš–I›æeŌĄUŠ4“"ųųįŅŌĄC‡ä‹Ļ‚Į‹sįΕ^ŊzÉæ2??O/͕ÅÅš˛CĪv˛N§ēÄĀ`h›y-ŋûŽ€#ād#l:6͟?_ÉZ6+äe;Ž€# [ģ°HxwŽ4Í)‘-KĨ÷ÚŞFĢō=ļšņãĮë‹ėckŨēĩ,Y˛D÷§ą1—eR}2 K sķseôôĻ2¯ OŠMä´Ŋ:É횩eÍ÷ŦĨēį8ŲF@ÉÚ… —­dģF^ž#ā8˜Å˙ĻgË/Ķ Ĩ]‹R´i‘lØŠ$ųB8ްĨCxųÂÆ‹ŧDĐĩk×å–7ô&Îi"CÆ4“……y˛I×réak&­jNØŧû9Ž@CDĀ_jˆWÅëä8J˛€aøoEōŸY–/×[#!›tI(šŌ§ÍЎ8Y.€˜õčŅCŪxã õ¨Eå8'?zЇ^ôã|¯šÂā˙G "ād­^¯’#ā”#šzúĶÅR>Y–Č‘=J—ŗ‚ʼnXĮŽeĮw|Ōâé2âЃ>ôĸŸ8wŽ€#ā4T|„j¨WÆëåŦÆØËNķ—”Ęˆß’gĀbûJ¤u‹r X*fDŒ4KÆŲ9>zЇ^ôSÎĘՀ˙sG  ād­\¯†#āŦˆĀc ‚Œøđ“SëA­Ę/#eq‚VYēé(חĢú)Į#ā8 & ĩb^/GĀXŊĀĘ5qVą‚Đ,/^*(“Üœ@ŽÂ 8™ö2BÔ2fiFč4SÅ?âЇŪĸŌ-‡ŧäqį8Ž@CC Æd­ ¨,,ɈIE2ivą,*_÷÷JÚõõú8Ģ0 ™4§DëߥexŠ ‚GA´Œ°‘Á"˛•ŠŦÅ ˛8ôĩzg-ΑFʸéŗŅĻiūĪp•E / 2kļ˕.íšH—öy˛]÷!œW#ĩÕ&k3æ—Č3aCîû#ōĨ ČŲYP÷LŽ€#P-Ú´X~ŦIEØ eq˛/ĈšÅˇ zg-–°g-Žr+žĨšī8Ž@m"ĀâN=[ĘáÛˇ‘-ē5OĒŽŽ[ÉČØI•dОL_˙vąÜ÷ÎüåHĢkĩiג'ܘv:Ž€#P l°Fž~ė6Ž*ja‹§ÅÃqĸFú&]DšV9 Æ5yØpĒ`ĩq~žČŧp”ŋŅ.ōÉč=NÚŖŊˇ[줒Ē[NUÅ5˛và sdȏĄÄ ˇÕ"ģo*ŌĢĢHËfÎŌ ÷GĀpGĀˆ"đ뜄|ôŗČgãD +Œøƒļh%—Ūi…-Ņ|v^%YCđéOË#,Đ<ƒí”]!iNĐ D÷GĀpG é rûģ"ĶĘ)•\p`GŲ¯_ĢǞIĨd ŗÜá%‚‹cã­H×ö"˙wHŽ´rKZ•Āē€#ā8Ž€#ā8qōÃ~˙ŋžŲaŋ,+“÷ŸŅE_@°-gqyÂiwkØúé‹_mÁĩh*rÁ>šŌēyŨYÔøAæÂÂÂMœũ+-Z´ĐmÖJû?GĀpGĀpđ¨Ķ$ä†×Ęô^ÚŅgéˇA™|˙›č×5NÔFZ6Ī[AÎîɔdÍŋW˜üvÚŊsS’˛øÅŗŧøņ´x8• „íŲŗg –ļŧŧ•lĒ8Ī_Ž@›xŠTqŽŸã—Ēo¤ę+Šâŧ˙x˙YUúĪôéĶ姟~R˛fũŅĸEzLœ8Q&Ož,Ŋ{÷Öų/*Ãų€^šŦ•[רrļ]đY4.-YƒņM5\Ķđ ˇ ×ŦŸ_Ļ‚ A2öÜsO%kC‡•Yŗf)i# GŨ87Ÿs~¸ŲŌ+N8áųüķĪU˙6ÜpCŲ˙ũåčŖ–uÖY'_W'°īn¸A>ūøceā”ĶŦY3ųä“O”pŽ7Nž|ōI)((Ã;ŦÆÕxīŊ÷´”M7ŨT2Õû¯ũK^{í5ųíˇ@÷ƒËëŽģNŽ:ę¨ׅkø—ŋüE?üpšųæ›kŦĮ3:Ž€#ā8 æōīžûN K•ÕĢķųÖ[oŊaëŗ.F°˛ĀeøâĨ˛møhn:ūR)Y›š°œu ̊éTVɚ¤a%cīŲŧyķäĖ3Ī”ĩÖZKÉMĢV­ÔÂCšYÔđŖ.˛fí0`€,Y˛Dž˙ū{šįž{pHT];ČĘoŧ!}ûö•ã?^-NīžûŽļÉęF8†Ģ[¯hŪøy4ÕûöÛo+íÛˇ—Ë/ŋ\÷žķÎ;J‚Ķ剿OwŪŗgO9餓dË-ˇŦV›x*yüņĮĨ]ģvrŪyįĨSīņŽ€#ā8Ž@Ŋ!ųÂĸÆ nķÍ7—#FŦPžÅ#‡ųä”z­,ķŖ:ãįAČXyÂæ™gėëjŨf›mĻaˆōė_cĨËú ~ûυĪyđ“6gá“u)×6ä(­øąO~"ŒŅ%„!L,áŊ˙ūûJ|đãįŦh^Î-ŋųĻË,gĪ>ûŦŧōĘ+ÂŪŽĩ×^[:wîœ|KBi›?žŦķrŊ¨ūTįZxøGÖ\~~ž–Eeīˇß~ōđÃĢ é—\r‰.—ūđÃG™,Ÿ˛T9cÆ %7Ûnģ­@°ØáĐ/Ÿ‡¸ožųf…4âMžsˆäÁ,,eR'͇Ī:8$ŗ_ŋ~˛ëŽģĘM7Ũ”´€EuØšųŅ2,ŸÃ^Ė cąwĐâ-ažĀ‚2éœûîģ¯|đÁ*‹5L¸Ū—]v™š}ÁK"ņˇŪzkRgT˛ v{íĩ—|øá‡*3eĘšúęĢ)Zą"˙§Ÿ~šĖou2ŸēeroS&yĸ2žų>Å&“sĮĪņ‹ŪĢ™ô™¨Œ÷ī? Ą˙°Ûķåȑ#bÆv*>aâŖ7ō­P˙ EeŧË[EtŌ[Á˛f)儭"TAÖ,-ęc‰bĶøđáÃŖŅ˝÷éĶ'YÁåbĘ4ëo„b-ƒ”Üwß}IÆ )ã@ֈŠ‰“5‹Oį#˙ÄOhōÎ;ī,,ĩâxŖƒ ņė•3`aÅÄA截|Âė7ûÃū /6`áCŠũYŠÜA¤C–\ĮŒŖËŧ5wā‰ĩo“M6–!x ´mÛV¯N¨~ˆ„ĨÜûīŋ_ 튧žēœ*ęjm°„xØâ8ā]ÅÂÆË Ô‘ļ˜ŖíS:\ˇnŨë$û !ÔčäiLŽšæ=_wŨu5~Á‚šŗ˛MBÆuĮ_~ųEÎ:ë,CjąÆQDRØĩk×d~Ģ“ûŽ€#ā8Ž@}"`˟V&5#hæCÔĸ–6dÉgs å•r;Cāåûņ“ņą“”d­œ¨-ÛVVŪVˆ,?ÆtH‡ôĀŌwL´ Ęō[Ŧ9FÖ,ÎęB¤ ƒ¸‘Ž\ee!‡ƒü`Ŋđ`]ģöÚk“ųŦębē,Ÿéˇxˆã!‡ĸ˅<ōˆüã˙PK–šTrE™=ô<˙üķj=cųëÎĘĻnO=õ”šLšø7^J@‹Ba‚ĐđBÆ˙ū÷?}û=ņúš^ˆ‘Õš¨Ûpà åß˙ūˇ\tŅEJŽX=ņÄ5 )§Î”ĩÁčKļdŒtZ™ė1ÃÚjkķŠĘ6Yˆ>¤!ˆŧ…JŪvÚI /;`:ĻVŽžø?GĀpG đyޏ‹ļTD yōÅįß2ŨmVÎØŒīŦ@čBŪ”d Ĩd ˙9 ËĄeÁĸTūŊ5HņoŊõÖĶ%ÉhûÔ°†`‘ÉÄŅČĸdÍ&vP^¯r2šĨ‘‡stا&ˆ‹;ĶåŽOf@œxŲ+žÕĶČžÅY>ęDœN>ČqV:-_ŧ|Âŧ8ĩņÆoTëŨšįžĢ–1>×iÁAĘĀ=fyÃBE˜Ž€5j”×Ö*+7^_Ķ Ž&cųĸ>Ö,6õ_ũõ‚…íŅGÕkqÁ$˅HCÜY™ŧqËĩąrR•m˛ƒ JbšÅ[(Yƒ”‚…•Ŧ銗éaGĀpG >ĀÅ<uQ‹š-‰Æ-kä‹ĪeĨe-‚öĘ/û,YT¯§Üŗf‰\-ŦėŌ˙ôË`,oeę [4j¤‰üÄQŗ‰ŪôĪAŧÉXZ:˙Oú“ÜvÛmú-ą{īŊW—ĶÉÖEüîģī.O?ũ´~ļŊõÖ[ƒ<Ë„ŽcđāÁōûß˙~9ōšąÂ˜ ×íîģīNZéØsF™Fž¸ÖuáøžÎĘŠ‹2\§#ā8Ž€#°2˜aÆtD‰ ƒŠ6“Áį‹ĻßJĮaR’ĩtÂË)Nā3FÎ`|PĩēÂ_ ę°ēái!Ũ–͓îœ}WĮsŒZŗŽēęǤUĪ–÷x‰ĮŌo&ÖļãÂąWĮ˛gĻnã7VQ,VÎčë6Sq9Ŧ˜ļ”ËgT°$n´ŅF*†åĢ.œmÄdŲgŌøL]”í:GĀpL`{—9öbÛËfI‹6ŌÍEķY\Ļ~ÚeĐLDå 9ėg‚Ø@„R­ģFåãį/d ̚-{ƉroŧQן*ˆ|,G–˙°Pą‡ã­VŦHŧíh.•ŽęÄąž=r|ÎbæĖ™ē÷‹ü,-fęŽ<ōHŨ¸{įMJ–!–´750gĒĪäx‘ƒ}‡Ûlŗnđˇ—/ø&oŠō ŦŧTpūųįk˜ŊsXâx›ŗ&Ģ&5>œKŋo^&ĀqŗÜ‹åÜXVwį8Ž€#ād æ!žÁ‡qÍČ`žÕ ÂQŗxōŦĖüUĢdJb-ęŪŊ{ō3VņL|ˆD f… )ƒ˜E­f^Îí 8¯Žƒ„œsÎ9‚eÍõ|’rÂ>6,Hš‹/žX_6lXuT§”…x°ŒŸÔÂąÁ„5SĮ6Hķyc”ÂQŽb”ŠåmHŸ IDAT>“ƒxŊôŌKúĸqXFyy‚ŸņÂa9ŊëŽģt?/p@ ˙üį?טŦņļëĨ—^ĒËŪô^ļ0S1ÖYČ4ž_@ā:ņæ­;GĀpG [°į.žÁʓ˛x},~‚ŧũîy\.“pNø IJ×>C&{ŗT]öä<5ĩLēw.•ķVū‚A&…U%Yā­GŦ)Ž¸eΈˆYÜ,x–˙ØëÄ&õ5×\ŗĒĸ2JĮĘěĩĩ´h…Ν;WøM1X6qe˓tˆTmX˙Ø/ČĶmļeĪTõÒĮō$„Ž&øđ’Å×_-ˇß~ģlŋũöúv+m°k-“ë‹’˛RĨGeũÜpGøŧ+MĖ™éķĨqĩĖ[ã8Ž€#°ē Ā<ļaøF)G]ēEÖ겥Žģa!Ā2¨;GĀpG”Ÿî¨:›K8Ž€#ā8Ž€#āÔNÖęe/ÃpGĀp"ād­†Āy6GĀpGĀpęŒöŦ͙3'|ŧõƒú¨—á8Ž€#ā8ŽĀjĀœ‚=B;Ģūĩ§ŒČ?˙sņI¯Āy#GĀpG.xd†Ėûui•Eų2h•š€#ā8Ž€#ā8ŲCĀÉZö°÷’GĀpG'kUB䎀#ā8Ž€#ād'kŲÃŪKvGĀpG JœŦU ‘ 8Ž€#ā8Ž€#=œŦe{/ŲpGĀp*p˛V%D.ā8Ž€#ā8Ž@öp˛–=ėŊdGĀpGĀpĒDĀÉZ•š€#ā8Ž€#ā8ŲC Ŗ_0Č^õVŽä˛˛2=z´Œ3FøÉŦĻM›J"‘ĐÍ999Zqnx<|SŽäåUī$'\ūÎkˇ–A{w“ÎŨ\Z´hĒũÁ˙9Ž€#PÛøŧÔđįŨ†84Z˛Æ ņÖ[oInnŽzčĄŌŧyķÚžį\_D`ĶgɆkĩ“Ü@ÄáâáŋÖ2Qî Ä ({ í"Ĩá_IiBfLY$Ī=6LÎ?å}šũáAĄŋ4Ú[Ŗ˙ī8õŽ€ĪKõy lˆķHõL5jvv29R–.]*ûīŋŋ4kÖL+%­|g"/?<ŧ ‹Æ€ĪĖ"‘‚DŽä—åH>~ ká( lƒp>~H[ü‚˛Üž+­Ön'GžģŖĖmÕDû÷Ųé´^Ē#ā4j|^Z5æŨ†84JķAiiŠ >\ļØb áܖ9ssé(š†˜ī~ãÂaĖ+(Õë.ˇúåŖ?&ĩųđíWd÷Ŋ vĩ`] ˙ĘĘÁē,lÁ/(Αž{÷įūBN>ģoXNÍkÔ‡7ÎpęŸ—Vųļ!Î#ĩNֿΟ/ųųų˛Î:ëč]0mÚ4yöŲgåüķĪθވįųûß˙.gŸ}ļ´oß>#ÜÅÅÅŌĨK))aâ. GČĘäÍ_Q3eŅđôéĶåšįž“sĪ=ג+•G(šŋ˛đĶO?-}úô‘­ļÚ*I +“' —J?˜œuÖYŠIĒt#¨éō7ÖôEÅ YŦkŦwæ†k~Å ¨üøÍPšęÂ3äúû:JßmvŅkPDËk+.YōļīÜNÆO‡Ä•9YŖķ¸sZA`eæ%*āã|šaÁ.F]âŅį‘Z]=õÔSåāƒ–c=VļŲfÅtƌōĀžųņtīMWČüÅšžZ~ąų@ō‚ŋ8øyíZʒ%K2îo.č8U#ĐĄC}XåA~‡vīŋ˙žęL56l˜lļŲf5șyÆ×ęēęÎKŅy¤ąĶéÚSRÂ|]>/gŗũ qŠ5ËÚįŸ.ŖF’Ī>ûLû03’ÆoŌ¤‰úœį…— ĸ–$ĢWų˜Čoŧ!{íĩWØhČ]Yų˛)ų,ŨäŸtR |eĒ—¸xz<)īŋ˙ž<øĐCÉÕ0ČFûâø ŲĘŌōŌ´ˇ1§ëXAKĄeęÆ1āˆĶåŽˇÆĘĮGž,iĨA.!‹ƒum^a™Ė\T,“ĻȚ;Gø„RīŪŊeėØąZĀ駟.ģīžģŽcO<ņD˛PV2ˆg~`Ä1vvÚi˛Ë.ģHßž}eÁ‚Iy;áSMGq„eûíˇ—×^{MĮPō@pŒáû„1—rzôč!G}´Æ‘öå—_.§ã˙ø‡ĘąEįú믗!C†hƍ'üąüņdĢŌe2/ļˇ`<`Ėꊧ’ã:sņ;„ö€GĒqœ­1{GōÚ<°ëŽģ Ø2Wŧō‚ÛÉ'ŸŦ[r _K8捪"üŊa.ēå–[’ú +eĖš¤ąé‘@Ϙ¯™Ī~øayî™gt%mīŊ÷Öųyuá…z° žwÎ92uęT͟nŪd^ŧ)ĖoĖcƒöØCûF V˛…9”•:]I u°y;Uû­Ŋ6¯Ö4Üį‘ZŗŦmˇŨvrÆgČnģí&—^zŠ\xá…úŲ z/äė—_~‘¯š`īŲ3áâ^tŅEzA¸‰x Âtũ˙÷zSUÖã¯ŊöÚä~¸ĘäødV‘‚@ږęšÚHÔRÂgØŊ&2aâYk­ĩ”Ôb‡EeØæÁķū÷åļÛo“kŽšFîŊ÷>™5k–Ļ-Z´PæÎ'_…öôŨrË`™{].ŋü y2ÜXt.žĐ˙úë¯+&ČĻķ1PÜrË?Ĩ  PŽ9æí„Ŋ{÷R’väG† ĸƒË‰'ūAēŽŊļüķŸ˙”SO=EöÜsoĩę-^ŧXõĶöĮQäfyįˇåöÛo—ūũúk~+ŋŧŊH.koų#Kã OY,c3‹Cß ­dŠ cįęĶ˙°ŦfßÚĸ‚2™Qō´ŦĩÛđŨ9Ž@L⌋÷ŨwŸNæDŸwŪyē<ĘÃúIaõâSPP ×]w>ü¯šæš:Ņ# 11b„’‡TĢ%Ȱš5üúë¯:NžôŌKJH+yˆFîÛoŋ•ãŽ;N~üņG%aW_}ĩÎO………137oŪŧđũÅŌĩkWßØ:c–5öF3weâ2™—˙a°lÚsS}Iî‚ .ö?@ —*™ųčŖĨĶk„ņĒ,l *ŸWĸãüBŪž›†ŧ?ōîō’Ž!åŖ>’^xQÚĩmĢÄmņâEōæ›oÉôĐÎ3ūxFøéė@˛ÉĖ™3u4ũ-ÚO˜sæqļ6M™2Y˜§ ÛožųĻn%zîš˙ĘÉá>ũĖĶŌĻM›đųŦˇÃÜy<ōČ#ō§?]éŧyÖYg†•šĪåÎ;îÔyėŨwßŅëōúk¯3J‡V„í,Ą~ŅöÚ<^ÛķZCœGjͲFGũë_˙*Ī?˙ŧŪ0oØ-2áÁÚÖĢW/ŊāÄŗ‡‹îĘ+¯ÔMũ°wn’Ę\Īž=ĨmčlU9žŪ°öqsāëyE87—pŽä†&ŋįž{&ÃŧΝ;‡§ŦŖ¤eĢ–rä‘GʧŸ~ęÉK å/'2€Üe—]&­[ˇŅ'3Hå‘NĮâɑ§+üč[wŨõ¤{÷îJʆĒ鄧Lĸƒ u93č õãÉōĘ+˙"¯ŧō˛4iÚ$ĸ_SęĐŗg/%‘Č[ųÖžÕ-Ü,`WˆqqiŽú%œ‡ĨM;–†sâJԗŸ+Á'KÃQš“'ÍCū˙(nUˇ—§;5B̤•{élĶ@. j #Y-[ļÔņ‘odō0Ī8†c<…Lœxâ‰jÅaLÍÄa)bŦÄĸá0Į܄.ˆ$‘ųĀļŠ˜LU~ģví„6dâ2™—ē÷讄”vCי;YÁ9é¤Áōũ°īu›Í+ŅqŋyGŽPĖČkķuc_v‡íUßÛoŋ-tp T­…ō6ÜpÃ0ŋ•P<:ĪŲÆm!k¸ūúë‡åėnZ /āGÜÜšsT?ä œ¯Ŋöm shUķ&åŖßÚĶģwũ˜ũšįĢķ[^^“d{Ŧ>ÖžÚ7Äy¤ÖM ö­qS@ž`×tPsŅ›‹ÎÄū…ßũîwšŒéÚnJ“¯Šš]FÔŦ\ķŅ Qäædŗ>ō„ņ‘ą0ųi}–F:íÂĮ) éūæ›odë­ˇN†‘!/:L†86ŨĮ „šŸ4(Īę̀ÆMzà 7Ëĩ<šãCŋčâ@7yđÍŅžÕ-ܲYŽ´i^ŽH(áßī>+#‡ž\ņŨˇ$ũ÷ŽoÍ;W"*<ņläg_Ą2ĮSƒu*|œ]`Î( BցˆãĸɓU1åō4HŧuFÎ҇ŽT=˜}YŪĩtâČŠå&ûá‡ÔĸĄÅŅöûņ4ÁĻLÚˆŠšŸäƒŧ]~ųåI}V6ú­mҞTéjø¯uķ˛`YkϘ…ËŽQ8m[u–ߟ{Ŗ<üˇÁr؟Ø÷¸nØ÷QžW7|!lyy%Ōύ‰´mŗĖŧBčMvę hožųf7 ]Œ›ĖŠ7ŪX÷Oņæ(Ž1‘y†xÆD^8[YĮĒ„ Bđ /¨:ꑁHōōs•9Œ |į’— ›íŲCĮ ŧtP•Ģj^ÚĘ Õæá7ęĀŪ=ö…ņĸŲFm¤ûųĀ,:oQnĒŧėņ&?ķō–}œŗ4Ę o”I#‹Øƒ>¨ËĐ´•4æŌĐÃ9s…mŪąų‘0ۃĖÂĮÖ%–Šy¯˛y“˛ØŖ idO#äķĒĢŽŌ6s­ŲBD™õáâ<’6|–›_*€ĩÂâaå—=9OFM-“žŨšË­'­U%Fļą“ŅËÔņ[,zeõ‡ ÂęŲ‡N:ĖęÄ9Ž's›*EœĩŨž’¨ûã,_ό~„ ē ŗ-ÎĘ3Ģ ú°ŪŲ“˜Ĩķļ ÖIÂvNūx=L>ĶúŦNōˇU*ëti'aE3,k‚Ū2ŸŽūōŋo–ƒNŊDĶÃũ_NØÂÖJ>Š[PT"ã§Ė—ŲŖGÉMĮo¨ƒ—a§ŠüŸ#āÔ ŧxĀ„Î\Ā]ëÖ­ĩÆrHDÔ1q#…meÖ$^.Ār„>ÆúøũnõJUV LįŦęĖKČR.sx0¯‚uŦ~8Ģk|`žKæp°´/3¤“Į‚…Ņä}Ä3GÅõW'˜ĮõŠb[U~VšĀ•ú’—öp­ĶÕŋ*}5I¯Īyä‚GfČđ_—JŸuråÆã:*!5RíwĩJSyjˆîGˆTŲ9d*ĶN_™Ō¸ tl6÷ķDDĖôlÛ|,zXą,lÕ^``šÕtâ[z\>féķ/ēhū¨>ę×M'¯ĨÛÍfáxy.geāĶąmø‚ŽaŸG kĄ+”ļ ŌÆĩ|ų%áB–“´đÎHx0 įÁãš4/h"ÍÂIûÅ?„>´Y˛_čEôŽ€#Pg@.pĖæâDxvW–¨™~ķ­| ›Ÿ.žôęĖYŒŅ™ÎKŒcŒ˙ä‰Î„×[oŊäŧn܏Î#Ô3Õŧņß˙ūW?΁åŽ7ayI€%ƨ<õ†Ķ•—J?ųRÕ?}ŦČY~|›˙jR>ų+Ģ_ēô†8Ô*YŖá ÁqŗsCŗ?Œ}gfŽĩ‹muŒŋnO¯i˜oĨĨr5Õgē<„uPRáqļC kfØĩXÕĸįjN†´EČZOĄ ÆĘzK–›0 ÷G ņ QąīˇÕGĢ2—RkŅúÕF:Ûk†­7,ũ˛ä‹%Į\mč7]øĢĸž†84J˛FĮco/.đ}7öĨae‹>ąE;“Ÿ7ZļosԜ`-ƒ))Ģh^ô<'|ž——~Á ¨TfŒ™$Ŗ?"Kό’cÃ~™čāU‘Ũ=GĀhD0đŨ´úr m^Âji–K–Ũ-C !Î#’ŦÁä1Ĩōōß}ã ÕŪ—uD?[,ą ÜĮ„>C߉? ޘÃcGĀČŸ—2ĮjU•ŦËy¤Q’5.4 ąޝ8ķ 6_`ļĩëUĩ#xŊëQ6íŽ~1‚§m'juƒŗkuVw|^jŧ= Žį‘FKÖč€ĮË|ŖĖ6-6ŪŽâ-[č+NŌVAĪë8™ āķR&(­š2u94j˛f—ģ.´2ÜwGĀp2EĀįĨL‘r9ČüchŽ—#ā8Ž€#ā8Ž@Ŋ#ād­Ū!÷GĀpGĀČ'k™c咎€#ā8Ž€#āÔ;NÖęr/ĐpGĀpĖ¨ĩ ūũīg^ĒK:Ž€#ā8Ž€#Ј8ãŒ3j­uĩFÖø1ô=öØŖÖ*æŠGĀpGĀh(Lœ8QŋÅÉ'Áø&'>?gÉ÷ķ8p|Īĩ4üčô§Ÿ~ZĢÕöeĐZ…Ķ•9Ž€#ā8Ž€#Pģd…Ŧ}öŲgĩۊ*´ÕwyŠĒĶ^WŨ6Ôwy+ĶļtyWļ éô6æxĮ,ûWˇ¤¤D+a~mÔČt™_:]‡#āŦ:Ô;YûíˇßäėŗĪބЋ‹ĢÔSå=ûėŗrÔQGɒ%KV(¯˛´¨đĻ›n*ß}÷]4JĪĢۆ•-o… ¤ˆh ˜ĨhVŖŠēøâ‹ĩO.^ŧxšvĨëgŊųæ›BžSN9E&Ožŧ\žĘŌ–ô@•đĶesįΕ=zȘ1cV?ųä“å×_]!ž˛ˆĒtV–×ĶG`ÕG ŪÉÚ­ˇŪ*įŸūJ#‡aë­ˇŽROm”ˇß~ûɈ#R’ĩĘŌĸ•ģęĒĢdŖ6ŠFéēvuÛ°2å-Wx%Æ€Y%ÍkIüæí¨QŖ$NÖRõ3üÁČß˙ūwŲgŸ}äČ#”6mÚ$q¨,-)ä'#°ŪzëIĮŽĨK—.˛ÖZk%ķ >\=ôP%ʃ–?ūņÉ4ŗ˜õīß_¯Š…M NKwßp7õJÖxÚ|ë­ˇäØcMĸúÕW_ÉN;í$;w–Í6ÛLū÷ŋ˙iÚwÜ!={ö”'Ÿ|RvŨuWŲyįå駟Ö4ˆĶĩ×^+X€Žžúj=^zéĨ¤N;‰—WTT$[lą…ôîŨ[Ÿl!> Ēwß}ˇfaŠ‘%`÷Ũw_ Ih׎´lŲRŪxã }‰‚ú<ķĖ3š§˛4†ĒOØÔˇ  @ķđ¯Ļm¨iyVË.ģLIã6Ûl#Š–VWUĖ /X2;ė0Åøˆ#ŽĐđūûī¯aŦš;î¸Ŗ´jÕJļÜrKŲ{īŊeôčҚ6dČ%1L”ôC9DãĢú—Žī’/NŽũēoßž’ŸŸ/XY¨÷5×\SUqÚ>ø`éׯŸ<øāƒŌŧyķäī™Úõ÷3”‚Í™gž)ķæÍî+îŖ:hy•ĨUYĄj ÔÅ5‚°^qÅ+īŊ÷žÖ.Ũu¨Ŧ.†eU÷Jēæßyįz] ĮíÛˇOŠ=đžÛnģÉ;īŧ#īŋ˙ž\~ųåÉ´ĶO?] $ķįĪ—SO=UvØa‡d'ét.'äGĀhŧ,\¸0=,XvbæĖ™‰“oũ9ąÃÅ?%Nŋk|",Vz„Á'ŧQš Râ_˙úWRhƌ‰`ŪO<öØc‰ĨK—&›OŖ‰@"T&LJ Ž×_=ņčŖ&Ö]wŨÄO?ũ”K ‰@°h%îģī>=>üđä^;‰—G| l‰îŨģ'vŲe—Dȁ4%¯f6lXâûīŋO”••%îēëŽÄ9įœcĒÁ–ØvÛm5Ī˙ûßDˇnŨaĸĐôĘŌX´hQ"ŧÄØąc“úVĻ 5)‚Ãkĉ@za L1¤$Y;YU1ãēŽŋūú Ž!Ė7ÜpCõéĪôĢ›ožYûu ö‰đOâã?VYŽkX–ŌsúÚ į•ũĢĒīVĻ“ōéׁ<%ĀûĘ+¯LKqeÅiZ uچ@<'žxb"ŒJ‰éͧ'ķĨęg$rΜwŪy‰°ü™øä“O?üđC2OeiIĄZ:Š‹kŪÎŌą€ņ z|ũõ×Zëtץ˛ē1“{Ĩē°|ûíˇÚ9æ˜äÕņōË/'ÚļmĢ}‚1ȝ#ā4,&L˜ ķ'üˆņ^w ۙt gVqƒUśH‡_Áŗā[čež‚‡EyįĩöéŽĒč,V%Ŧdß|ķMR+VŽN8Aãx˛<účŖÕj…„Wa¯ģî:ĩr!0mÚ4yâ‰'4Ž%śnēIŌ}Į$Uyčāu[ô>ôĐCÂūž¨ã‡uŠãYgĨ¯ãF-aȅ‰U¨YØsōøãëŌRUi,9åååi>û‡5ĨĻm¨IyäácÚH¯â}˛'}UƌëJ_xꊧÔrö /ČᇎË}\k›Ų¯…ÃrF.–ĒĶN;M°ŦŅīčUšĒúne:)?ܤj=Ų~ûí%<ˆTUœ|ūųį˛Î:ëčž3„īšįyūųįõ5qËœĒŸ‘ÖĢW/Ųxã% jĄ6ųĒŌĸrŅsú VŖ0ŒFŖÕJØĩk×´iÔĄļ¯}kiÜņJ=.Ũu¨Ŧŋ¯Ē{™ę:ú׏?ū(<ōˆZ€/ŧđÂäõ,,,”‹.ēH­nĮwœp€—;GĀp@ Ū–A â{eô×\sÍåŽá(IbyÔ{@øÎ‰šĘ6į§*ĪōáĮ÷1ņüņ˛ŨvÛérį-ˇÜĸ{Ęĸyâuaā5WYšÉ¤ōkچš–žÜĩLVĶ¨[Õ1cųŦÂGšYúÃĨęg,'ԟp\ësĪ=W õÃ?,{îš§ÆWö/•Îhß­Jg§NôÁeįøū¤TåĢŦNKcYŪŽĨÅ՗OŸ –ĢŽđô'•ĨQŋÚžFsæĖŅwX掓&MR8*ģéęb8žŠî“ŠŽVtųųŌK/–iīŋ˙ūdö-ZčÃ˟ôá 6Ø ™æ'Ž€#āHÜÔVË ˜Ã~´KGQö %Zˇn­Ë4ÄcdŠ'ŧņ¨b,÷…ˇ0a@N`~da9āHIDATIãĩ×^KĒ–š"‰9rdry']y–1XÔt9ÔÂøS§NM„'Y5e† 'Ŧ0ēTe2Ô%ėĩSķd°đérâmˇŨĻɕĨYū,ˇ jņ5iCMË oá&^yå+:6-'Īf4&XfuŠ0l¤OļĨ2ú™-Ņį9KüōË/*, Ž)“6KϘ§+sUõŨĘt˛,xڗ‚åXûUUË ˜ÜŲ2t™>Lôē jõļēĻëgˇß~ģ.¯™\Ô¯,-*W[įõu¨oeׁôTu!ž˛{…ôš8Æ@ļ„}š‰°W1Ŧš5QãyG Kds´^ČZØĐœËo)á K9‰đË:y…MīËíiƒ”„Mž‰M6Ų$–r7ŪxŖŽ ›"öû°O)XɔXŲžĩtå1Y÷éĶG÷+Ą/,Áę4Ķž´uŸĶÚk¯K‰`ũP?læN„'ßDXšĐ 3,ģčūH]eič ŠĩōĐƌĻęļĄĻå}ņÅÚĘVĄÄ%—\’K=‰ŋūõ¯Úüƀ _Övą÷,ę !zíÂˉÍ7ß\É8Įuf[xSO÷†%žhÖ´į•õŨt:Ãōl"ŧ$ĸũ}S×_}",Ë'‚0m9–Ŧ…Ú×éŸtöũđ"…&WÖĪxā –Xm'*s•Ĩ™LmûõyŌ]kSĒēTu¯XŪęúīžûn"lŋH l"lį¨ō ēú]Ūpęl’ĩŦ QchĒ.˙…‰L.{ržŒšZ&}ģ5—[OZö zTŪÎŋüōË´?7Å Ũwß]xũ<c?MôÍ)äxc‘ī?E—üâųÄ'ŅOdR^\…y+Xat‰Ęâĸ~°ŧh7ņ⎲´¸l4\Ķ6Ô´ŧhŲvŪ0ŗļŒ?>å~–Gg͚ĩÜįČÃį/¸æaŗž.Æ÷šŪt~Ēžģ˛:Ķ•EXn´ˇ9ĶÉ5ôøúēF™\‡tuŠ ŠĪ^{íĨ{ëBŋëtēC€mXl‹ČôįĻØ“\•ģā‘2ü×ĨŌg\šņ¸Žē_–9(žMŠ^ČZU•M•Îëķ|ˆ–ļÁęQkŌMU–Į9Ž€#P@ļŲ¯Æ§cÜ9ŽĀĒ…@6ÉZŊŊ ZŨK‚5-ė Ķl| ͝#PŸ°ņ˙¤“NJ[døÜ†žŒ’Vđ&ēĩĀx”#āTŠ@ƒ%k|n€Ã# øyŸđŨĢlíe:Ž€#ā8Ë!PoŸîXŽT8Ž€#ā8Ž€#ād„€“ĩŒ`r!GĀpGĀp˛ƒ€“ĩėāîĨ:Ž€#ā8Ž€#NÖ2‚É…GĀpGĀČNÖ˛ƒģ—ę8Ž€#ā8Ž@F8YË&rGĀpG ;8YËî^Ē#ā8Ž€#ā8!ād-#˜\ČpGĀpė ād-;¸{ŠŽ€#ā8Ž€#ād„€“ĩŒ`r!GĀpGĀp˛ƒ€“ĩėāîĨ:Ž€#ā8Ž€#NÖ2‚É…GĀpGĀČNÖ˛ƒģ—ę8Ž€#ā8Ž@F8YË&rGĀpG ;8YËî^Ē#ā8Ž€#ā8!ād-#˜\ČpGĀpė ād-;¸{ŠŽ€#ā8Ž€#ād„€“ĩŒ`r!GĀpGĀp˛ƒ€“ĩėāîĨ:Ž€#ā8Ž€#NÖ2‚É…GĀpGĀČNÖ˛ƒģ—ę8Ž€#ā8Ž@F8YË&rGĀpG ;8YËî^Ē#ā8Ž€#ā8!ād-#˜\ČpGĀpė ād-;¸{ŠŽ€#ā8Ž€#ād„€“ĩŒ`r!GĀpGĀp˛ƒ€“ĩėāîĨ:Ž€#ā8Ž€#NÖ2‚É…GĀpGĀČNÖ˛ƒģ—ę8Ž€#ā8Ž@F8YË&rGĀpG ;8YËî^Ē#ā8Ž€#ā8!ād-#˜\ČpGĀpė ād-;¸{ŠŽ€#ā8Ž€#ād„€“ĩŒ`r!GĀpGĀp˛ƒ€“ĩėāîĨ:Ž€#ā8Ž€#NÖ2‚É…GĀpGĀČNÖ˛ƒģ—ę8Ž€#ā8Ž@F8YË&rGĀpG ;8YËî^Ē#ā8Ž€#ā8!ād-#˜\ČpGĀpė ād-;¸{ŠŽ€#ā8Ž€#ād„€“ĩŒ`r!GĀpGĀp˛ƒ€“ĩėāîĨ:Ž€#ā8Ž€#NÖ2‚É…GĀpGĀČNÖ˛ƒģ—ę8Ž€#ā8Ž@F8YË&rGĀpG ;8YËî^Ē#ā8Ž€#ā8!ād-#˜\ČpGĀpė ād-;¸{ŠŽ€#ā8Ž€#ād„€“ĩŒ`r!GĀpGĀp˛ƒ€“ĩėāîĨ:Ž€#ā8Ž€#NÖ2‚É…GĀp˙oī<`ŦĒÖ=ū13 õĸ^P4⍞å9[,'ī>žå9[,W}ņķkġņúČŲbšŽ]?~ø6^9[,×õŖëĮ¯߯ë#g‹åē~ēĮõķŲ+lƯÅgžå~Eb­ļļÖúõëײv°Trá÷YÕo]øļ€ â'~Å˙™ —GĢY]?ē~tũ,ŒhõKôũŅ÷gEŋ?čĢJR…b­Æ Ú‹Ĩį}‹ƒį}mĨō9ߜMõ—ņ,rŦrļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜¯­mdˇÕT‘XĢŠŠĩ>}ú¤)Ī⃠W”^ÆÖežīųč¯úâ¯ŋFtũDžŧôũŅ÷'^~čûŖī˙Û ûoAøw#~_œÛÎŌ/55‹›z_Ä!”M‰5Zđú6Úŧ/ķmąŊ¸N)ŋRvÕ_vŠYÄ}ņ[~:#ō(•ŋe×Vdš”ËĮ2Õ×õĮõā)^Ĩōøz™oUŋ@ ō(•ŋU˙úņëŊÔV¯î(EFvX HŦ„÷Ū{Īnģí6khh(*ŠŪîüųķ×ĨĖ›7īOuúûīŋã™1cƟj§+Wūá‡Ŗ… ļy˜âÛfdĒ " "°*ž]ļÛĨ ķČģīž{s[Æ ŗvØÁŽ8âˆf[{fĻNj>ø íģīžim#šz÷îŨžŨdۚ5k–]ũõöōË/[]]566ÚÖ[omĮŧ­ąÆŲ:ÅFD&ë I_~ųĨyæ™éŗãŽ;ģŽû§žzĒ}üņĮÍĮ˛ÖZkŲØącíČ#´6Û;*ķ /Ø=÷Üc÷ŨwŸ­žúę­vŗĒņmu@rXé Ŧ‘ĩššÛk¯ŊėÆo´õ×_ßîŋ˙~ûę̝:.}Åut]qÅŌWqŖ]t‘ŊņÆvéĨ—ÚķĪ?oW_}ĩM™2ÅÎ?˙|[ŧ˜EˆåĶ%—\’DŽ{mļŲföØcŲvÛmįĻ•n īÁƒÛ<`7Ũt“íēëŽöĖ3ĪØ9įœĶü`JG4įFĢ­ļZĢŨŦŠ|[”D@D@Vz+}dÍ ŲÚ`ƒ R¤éÍ7ß´Ųŗg§"ļ×^{­ŊķÎ;Öŋ;účŖÍŖHnÄL)™ēõÖ[“;ûėŗSôéŦŗÎ˛_ũÕN9åÛoŋũ’ ôūØŪqĮ6sæL{ë­ˇė¸ãŽKũ0õ…ˆúđÃS[‡rH‹ząJķD—>úč#Û~ûímķÍ7OŅŧM6Ų$ņōöÛoÛ¸qã’#˛8}úô$ä&L˜`ę#ôˆÆuŧđ cEøMš4)ÕũöÛoíēëŽŗĪ>û,ąÚmˇŨėĀ4ĶÅ_œüéá´ŪzëŲgœaŧšŖÆėlčąDdkäȑöõ×_Û+¯ŧ’ÂH#įâˇß~KlˆÆņŪŋO>ųÄnŋũvûôĶOĶūšįžkoŧąÍ™3Įnšå–ă¨čV[m•ĸ‹<ōˆ=ūøãvđÁÛ]wŨe'Ÿ|˛}ņÅÉÆ9åõ4DôĒÍ×9h+" "Đõ Ė;×úöíÛρŽ‘5Fôũ÷ßÛŊ÷Ūkwß}ˇ=ڈ‘¸ų"rnžųfÛvÛmíĘ+¯Lë͸Ißpà 6|øđäƒ@ķˆ7}_ĮÅ4ëO?ũ”]Ŗļ˙ūû'Ā´Q/ŌOŲ˙ė Įˇå–[6GŅˆĻąŨ#‰ëĶO?ė'N4bf˘1‰ ‚ëŦŗNnø/X° åĪ;īŧ$N‰PîŗĪ>vįwÚSO=•Dņ/p@bJģ¤Žsj|éÎãEl›1ûēŊË/ŋ<‰VÎ1kđ}ôŅT ÷ķĪ?ÛÃ?lø0fSÉ\D+ëâ$ž Îī°Ãŗu×]ˇŲæ‘K/‡{ĩøĻƒĶ.O€ûK­ÚšVąFôa¨ "F4†ôŌK/ĨˆČ“O>™ĘXSD‰H7ī_|ŅŽēęĒåĻš|H1Ÿ ᏯũęÕĢWsũáMâ:ÃģīžkC‡ļū›^ĄÉ’YÄ ÉĮUʑž‰ĻíąĮvÔQGĨĩmG}}}úPŸh˜ŋŲĮ‰$GÔhíĩ×ļŊ÷ŪÛzöėiD)=­šæš)šÆT$õ~ųå—TÔQcö~‹ˇ6įđõ×_Ob“õ|œū7Âĩ@"Ōúã?ύåūâf"Œn¸abÄë¨QŖ’?câCn—]vą!C†´8˙”W›o:8ũčŌ˜õA¨qīnkZeÄQ"Fˆ_C†Āa“¨0…wúé§ĸƒÄ”Ņ"DLo}ķÍ7Í|\-ZÔúËč¨äūˆĻ]iL^vŲeÍmū™Ėˆ#RuĻ;cbz—äåä9ž^tQÃôoL~ŦŅ#„.x9,ãø|´éQ&¯ßQcöö‹ˇ. cDA9nÆČ9>æ˜cRT:Į{lj\'œp‚=ûėŗil?ã„c-í1nįPÜ?öjō-î_û" " ]‹BíĄ‡JB-Ūw+eYąÖtO[iƒ#Jr衇ĻĩHLrĶe=ŅÖ<íŧķÎiÍ"„PãįŸžÖd1ŠųîģīŌxˆ<1­Ęš'„Wš„(c:΅mbcڍ5eˆ5Ļ#ID^{íĩ%ŠĶ­L‰"P&OžœD…—q\D˜(+Nˆ=քŠb[^”ckŠŖÆėũrn™~|˙ũ÷“øũāƒŌÚŊ6ÚČļØb‹äÆšcĒw›mļI‘CŒŦĶcŸénÎ9\¸&đƒĶÕ´ÍTiLĨDšûT›¯÷Ģ­ˆ€ˆ@×#Āēī(ÔĐ'ž/ũÁ§Ĩ“…nną-û€A˙Ūĩ6sîŌÖZT¯Ž›,¯ÔxîšįŌ“ĄŦ]ãĩˆ_“F†' ™âbĒ‘ō|§vJ€6öÜsĪ$ļx­áH^åFÃē5Ö@ோĩQŦ…b:Ž)RD‹÷Û#q\<õIôđ´ĶN3Ļ^b䤓NZŽ ÆtÁ$AB4‘õU$Ļ/y‚õX”3Í鉨íŗöއ"ˆņJ_Īå~šmGŲûâ!ŽÃ?<'ĸg<ôĀCDÄ™DK9JtW Øø›üiMŪŗŠķeĸzJ" " " " - ôĒ]lc×o´]G5Ú:ƒëĶ먈¨!Ô<ĒVjŨZÉgEŠ€ÂCéeダûÛēf ]`ŋüŪ`˙ûcũ6§‡Íh¨ąŲķj–SŽ-Sčgõ­_bCû/˛ †,˛‘C[ŋŪŧ\ŋ> 4Ö¨šH+QsR%ÅQ°!Ôĸm­ÚÆĻGM5‰¸Âb{yrŌčæ AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx diff --vcs=svn "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{148, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Export....workflow/000077500000000000000000000000001445560650400250525ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Export....workflow/Contents/000077500000000000000000000000001445560650400266475ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Export....workflow/Contents/Info.plist000066400000000000000000000011721445560650400306200ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Export... NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Export....workflow/Contents/QuickLook/000077500000000000000000000000001445560650400305505ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Export....workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001107271445560650400332110ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëViCCPICC ProfilexÕYy8U]Û_ûĖį8ĮpĖķ1Ī2™įyž Į<ĪCD"‘Ą”D‘D*C(eLB¤"’(¤¤¨I!ßVĪķŧī{}×ûß÷Ύ¯k¯ũÛ÷ē×ŊîŊ×Ŋ×ēkĀžLˆAĐek¤KqvqĨ`§pČ@„ęĄcmmßũ—cũ€vĢFĨvmũĨ˙&fđņö˛†ŧ|ĸŊCa| „ŽwDT Č Xū$>&ƨ0fŠ‚„ņô.ö˙ƒWvą×oŒFũÖąˇÕÍŽHĨFų@„å”8oØI 9Ė'0 FgkzP}`? ëH†††īâ^‹zũ›˙ÃTĒ×?6ŠT˙đŸg[ÂëFG„P~ßü_Ą!ąđûú}á’bš;6,đščCÕ7ƒ¯\đų+"ä÷˜Á:‡o˜ƒ,ÛŒa^–VaMŋ(C[Ãm!ëˆŨ] ŋ3Č/"ÆÚū/ųĄÄ=Kayo´Áßv.QMwĮŒ–7FÅÚ:ĀXÆ]Ņqv0†# z“`īô—ʏ¯ū_rÂ/ĐĐ䏂c˛Û<æüÁáfģ>Ā}!”€ž DÁeæ@č˙UJ?@…kâāēh ` ˇ‡Û„Øō—žŪ˙’ūnįˇûO‹ā ëÆūĶįŸŪ(pŸÛ >0ū[N…ûØ­Ûõ.Ú#0í_}ū­ąkīˇ72ĩ2īeļūö %Œ’C)ĸtQ(M”*  XP@ Ĩ€RAé ´Pęp*0o`Ëūû¸k?´Ņ/îlx‚šc\ģûė^×Įßځ˙Ü˙/@āĐrËōßã{ūĐ Hˆ ôˆĄčĀ_ޝ$Å$Ė[Z’"'#+ģ[ũ˙æØŗū8ģjû{.‚X†˙% P@},ú_˛Āj?Āįø/™`ūâԌxĮFÅũą‡ÚŊ ĐÁĘx€…ßŗPę@S`ė p‡ã'ŽÁ(’@*Č9ā$8ŠA¸Ē@h- tƒû`<ã` Ė‚ˇ` Ŧ€u° A"AŒ;Ä A¤iB9d š@ž?ÅBIĐ(ʇŠĄr¨ēĩAŨĐChš„æ ÷ĐWč'‰ "˜ÜaÄ„ Ba†°GėGø#"‰ˆtÄ ÄYDâĸŅ@Œ#fKˆoH€¤A˛ ųRH¤Ō éŠôCF!!ŗ‘…Č d=˛ŲEÎ"—‘?P#Š‚’‚ãÔå€ōFEĸĄrQŨ*T3Ē5ŠšC­ ~ĄIh.´Z m‚vFûŖãŅčBôtē=Ž~‹^Į`0,Œ2Æ゠ÂÄäbJ1 ˜.Ėfķ ‹Å˛c%°X+,ƒÍĀžÃ^ÃŪÅ>ÅžÅnāhpŧ89œ!ΆKÃâjp¸§¸w¸M<=^¯†ˇÂûāđyøJ|;~˙ŋI` ˆ4ö„ B*á,ĄžĐG˜&ŦŌĐĐđ͍ԨĐŌĻ9KsæÍÍ"™(NÔ#î#ÆO¯ģˆ“ÄU‰$LŌ&š’bH'HÕ¤{¤W¤ ZFZiZZÚÚÚfÚ§´ŸčđtBt:tît‰t…t7é†é–éņôÂôzôTúCô%ômôôßdŦBrj2,’ąda˛Ų‡œNžDžGžgD2 0ę1z3aŦdėc|˄aa2a bĘaĒcbZa&3+0;2`.ažÃ<˂df1a aÉcidyÆō“•›U‡Õ—5‹ĩžõ)ëw6N6m6_ļlļļqļŸėvö`öSė-ė/9Pâ6ņ8ú8–9™8Õ9Ŋ9ŗ99_p!¸Äšlšr]âäúÆÍÃmÄÁ}Žû÷2 6OOO'Ī{^F^MŪ@ŪŪģŧ(ĖJå,Ĩ—˛ÂĮÅgĖËWÎ7ġÉ/ÂīŸÆßĀ˙R€  "ā'P Đ#°"Č+h!˜$X+øB/¤" T$Ô/ô]XDØI8S¸ExQ„MÄD$Q¤VdZ”$Ē%)Z!:&†S +{"ŽW/–@H(IJ”JŒHĸ%U%Ã$+$'¤ˆR:RqRĩRsŌ,ŌæŌiŌ-ԟöîqŨsjO˙ž_2Š2!2•2S˛dYSŲ4ŲvŲ¯rârŪr%rcō$yCųųVų/  ž ž+2*Z(f*ö(n+)+E)Õ+ŊWTöT>¯<ĄÂ¤b­’Ģō@­Ē̚ĸÚĄúCMI-F­Qíŗē”z°zúâ^‘Ŋž{+÷ÎkđkP5Ę5f5)šžš5gĩø´¨ZZ¯ĩ´}´¯hŋĶĶ ŌšĻķIWF7JˇI÷ģžš^˛^—>RßH?[Ȁlā`PlđʐßĐß°ÖpÅHŅč Q—1ÚØĖø”ņ„ ˇ‰ˇIĩɊОi˛i¯ŅĖÎŦØėĩš¸y”yģÂÂÔâ´Å´Ĩe˜e‹°2ą:mõŌZÄ:Ōúļ ÆÆÚĻÄfÁVÖ6ÉļߎŅÎÃŽÆnŨ^×>Ī~ĘAÔ!ÖĄĮ‘ÎqŸcĩãw'}§|§Yį=ÎÉÎ...­ŽXWG×+ŽßÜ ÜθŊŨ§¸/cßŗũ"ûėčÎáâ~ĮƒÎƒęqĶíéäYãšEĩĸVPŋy™x÷ZņÖķ.ō^ōŅö)đyīĢá›īûÎOÃ/ßoŅ_Ã˙´˙û­€Â€å@ŊĀâĀ/AÆAeA߃­‚¯ī„8…4„âB=CÛÂČaÁaŊá<áÂG"$"2"f#Õ"ĪDŽD™E]‰†ĸ÷GˇÆ0ÁÉá`ŦhėŅØš8͸’¸xĮø›„LOČJx—h˜xų ę ÷Áž$ž¤Ô¤šdäōCĐ!¯C=))é)oŽJ%¤§>N“IËO[;ât¤=;ũpúüQŖŖĩ´Q™ę™eĮPĮ eÉgËú•í“ũ(G&§0g+×;÷ŅqŲãgīœđ;1”§”wá$ædØÉg§´NUå3ä'æĪŸļ8Ũ\@)Č.X;ãqæaĄBaYĄ(ļhöŦųŲÖs‚įNžÛ*(/Ņ-i8Īu>ëü÷RŸŌ§´/ԗq—å”ũŧxņyšQys…pEá%ĖĨ¸K •Ž•ũ—U.W_ḒseûjØÕŲ*ÛĒŪjåęęޚŧZDmlíûkûŽ=ŠĶ¯k­—Ē/o`iČšŽĮ^˙pÃķÆŗFŗÆž›*7ëo Ũ:ßÄØ”Ũ 5'4¯´´Ėļē´Ž´™ļõ´Ģˇ7Ũ–ž}ĩƒ¯ŖäķŧNBgzįÎŨÄģßē"ē–ģũģį{÷yž82ųåE܋ͩÃĶčéė—ô/ _qŊǘ›i˜UšŊ3§?7øÚîõÔŧ÷üŌ›č7[oĶH …īxßU/Ę-vŧ7|˙äƒÛ‡ˇKK›Ë>ž˙$úéÖgí΃+Î+oŋD}ŲųšģĘžzuMa­į›õˇWëĄë›ßŗ7Ø7Ē~¨üč˙éôķŨfüvëėļØvû/ŗ_Ķ;Ą;;Ô(ęī\ —??ž^…9„ Ėž@ ũÃ)~kĀt‚u`Œ„ķ_a` į§×ÁwH J‡&ęˆjxŊ€EuŖŨ1Ķ‚=„ŗÄsã734O‰¤G´éÆč—Č8F)& æT–kŦ/ŲŲ8,9s¸†xx-(š|ã|‚ūB5Â_DÕÅâÄīIĨ ¤“ötÉlËÉĮ+\Sü¨,¤bŖšĸV¯>§Á¤Š e­ŦS­ÛĄ7¤ŋbHcÄjĖg"eĒlĻgncábéo•f}ÎĻž ^Ų¯8'g1W[ˇČ})ûO¸WytzŽPgŊžú |É~‚ū z–AÎÁž!ĄņaIá™Ų‘ųQyŅ'cÎÄæĮÄ8p21ã`JRlrĖĄ ęaįTŖ4# éRGy2č2v2W-gMgä´åÖo>1{’õ”Q~ÂéŌ‚Á3;E2gŨĪĨוŧ.%]/ķŧ˜[ŪT1Y‰¸,zÅâjlÕņꆚĄÚutõ˛ Ļ×Ŋn$4æŨŦēÕ×4ŌŧØōĢŽīļL‡æ‹NĮģ>]áŨzŽÜËī=ßW{ŋĨŋįÁŨ‡CÆß<ē<ûÄ`„<2ũ´aôā˜á8y|æYũÄÁįĻ“ė“o^´NeNÛŋ|šųĒæÂläœūkÖןį{ߔŊM\px'ģȰøķũŗKÕ˧?Ļ~Šûŧđ%đkđjÂZîˇęõŒ?ŧ~Žl…ürßŲŲ€ƒķE!°¸‚C LÁ™t šBČ N!~"C‘Pqh"ēc‡%`pEø‚)Íĸ(‰—–…Ž›^’AlĮɔË|•åë:;…Ø3˜+Ÿģ™į%ΧĖī&%Ø&4/B•ŗ•8-y[ę…ô7&YU9ų…bÅ&Ĩnåį*[jŒę{å5Œ5Ŋ´âáh8Ŗ[ŽWĨĶāŽá Ņ”ņĸÉĒéŗ-ķmK”5› -Ÿ¨Ŋ‚ƒŠŖ’“ĻŗŠ‹™ĢŠ›ũ>§ũÖîļļžöT7/Go'_+?sĶŨ@Í õ`ųņP0Žp–r$}6Ŋŗû)î]üˁɄ§‰ŪOęIn;Ԟrķp}ęÕ´ō#ĶĢŽöe,#eIdæøææŋ~b8īã)BžâiĮ‚č3Ņ]EķįPÅ%–įcKË.ô—}*gĒPŊä^™{šåĘtĸZ篺6÷Z[ŨBũuÍŅnÜúŲŧ§Åŋĩ°­÷6Ô!}'°ŗėî“nLÎŊÔŪŽžĩ~*÷>ŌPTzŦ4¤4ŦôDvDüŠÄ¨ČĪ8Į3Ļ âsü$4šũâķԇé÷/ßŋš›y;;37÷zvūå›ųˇ6ŪíŧĮ}āX’^Öųh÷)âsöJ՗¯_Öxŋ™¯'~¯ÛXø)°šĢl{q‡˙¯ņĮ˜o) ˜æƒ;āÄšÁyû Bq1Š”E ˇQĄ¨7h/ô"&ŗÍÉāâÃŦ„šĸ$q‰TOC§ᑪ •äDFk&fˆyŽĨõ*[&{‡=§—07–{į-ī Ĩ‘¯„?C LĐFHK˜_-˛!:.Ö,^*qXŌCĘPš"ŊĩįšLŊė9WyqŦ„âĨĘ*"*;ĒãjUę‰{-5$4QšSZ×ĩéøę*ë1č­č\6L2r3V5a6ųlúĀŦÜ<ÁÂÎRÖ kõÚēÃĻĐ6ÆÎÄ^Č~Įášãu§,go%Wzסö}yûũŨu<8<>yvS‹ŧÂŊ |¸|V}ø•ø‡hrĀk}o𚐸PÃ0ž°ux]¯<å­Ã bgãzâ+¤&ø$ObHÚH~u¨7ĨîđųÔ#iQGÜĶmŽjfHeōcĖBgũĖūœ3Ÿûüø?ũ';O5å7œn,h8s­°˛čōŲ‹įƊ+JJÎW”^ŧpĩl¨UĄp‰Zyârį•Ĩ*†jÕīÚã×ÚëØŽ›ūŽĄą&RŗnKTk}ÛįÛrîÜŊKî éž}§7ĨīSŋ΃éGÎĶķ<š˙4vĖā™ÄsÆBĶF¯Rf?͟X{Ÿ˙ŅæËđ†ķîø˙Ų[Ú]0JœõĀ…#r÷ Ü+köĒ!Í o=ŌÍûgũ`jđĖ‘Jaž8Ą Q˜F@0ߛA`ŌD2â2â âRiƒLFÖ 'Q8x!fbCh$ZŠž„žÂ0cŦ19˜~,k„=ŠíĮ‘pޏbÜ<^ ƒī%0|7i°44­0ķ %> ‘rHĢ´N´í0›)Ĩ'Ō¤_acøH%¯0Æ0ū`:ÂLd>ÉÂĘRÉ*ÍÚÎfÆ6ÃĮAā¨äÔáœäŠāfänãqáŲâ­¤XQ~ņÕđī ô &Úūwá6‘QC1ąIņJ‰IS)Qi´ôĖž>™*Ųlšxy_…}ŠvJVĘ*†Ē&j–ęž{5â5Ķ´ĘĩÛtĻu?é“ T ũōkL.›ž4K5O´ˆ°ŒŗŠ´Ž´ņĩ ŗ ˇOqČu<îTä\īŌã:âļ°oĮĮCÃ͉šæUáũĐé'ëīP8 BtC…=‰āŒ ŒjŠūë×|€”–ø$I1ųR ÃáCŠ;GBŌ?f„f.gd΍8ž‘—~J4ŋąĀėĖxŅĄsF%öĨ!eGË[. _AUŠÔD^ģ\?ƒũĻ_Ķ…–wí{;ĸ;‡ģI÷¨}- G.ƒeCK#ŖYãˇŸ“_ØL§žęũ:ĪúÖøíû¸ĨC“?Į~q]å][X?ˇ!ųãę&~ËvÛũ×áßķ‡,ŧŋUúĀˆ2b 2č´Ž  Ėa1†D"åTd>˛fäR(OT!ę1‹ÖE'Ŗ;Đ?1ǘĖ,Āęcŗ°Oq\¸\+wÅ×âœ7`îëKĶM"Ļ_“ĖHí´ÚLÚuē@ē—ô6ô} j wȊä&FuÆn&cĻf7æ–XV,ë6ļgė45œœk\ÅܚÜK<xÍx7(×ų‚øyų§ĘŊ„D„–…¯‹ĩãû.>$qEō˜”Ÿ´ŅYŒėšÜŧüS…{Š]Jˇ”á4TĩQ­MŊsī}1˜%}ĐAéŌę‰čkė3L4*2Ž3i4­1Ģ5o°hŗėˇąž°™ąũb9đ8J9Š8;¸Ä¸fšUėģģÎãÉC5ķ ō>îsĶwÚ čt.¸'äk˜x¸wDiäãhŖw#ūk‚JbäÁē¤ī‡´R2¤‘ŽXĻ—ũš)},;k"‡'7ęø@ådôŠžĶt^gzŠøÎk—,•—y”3WŒVæ^ą¨Ŧ~WÛP—ÛāyCų&×­ĩæéÖļö[ĨŠ]>=nŊ{ī+< Ÿ+w|,/ę1ŋŊĀöĖvŅųsä⸒ŠRë Ũ•ĘĢ/ņTV\žZį 7¯)×u4h_īk4š9×ÕŧۚØļ}ûôĄÎĒ.ņîk÷¤{îËô_{Hû(wæqÔĐü›‘ëŖ´c!ã'„žž|6Å6íüōė̉Yæ9ÛיķõoîŊZØYd~/đ‰o™÷#÷'öO۟_­t~)ũ°*ģēēvã[č:e}ü{ėqŖō‡Âģ?Í~>ÚTŨŦÚbŨJÚz°Íŧíĩ]ŋŊųËč×É_“;;!;Íģãí'/ˇģzˆ¨ o?žÚŲY†÷/ķØ>ĩŗŗYąŗŗ} &đ?Ž?˙+v•1đžûųŦ]tīFÕîå?Ž˙Sßy‡x>a IDATxėœEōĮkwɐ ĸ`Îæœŗw˜O===ŗŪũÍg¸`<õĖ9Ũ™sĀ„9""  äœŲeĶû÷ˇvë1 īíž]6>Ē÷3Û3ĒĢŨĶũ›ęžy9S§NMˆ;GĀpGĀp‰@nƒÔʕrGĀpGĀPœŦyGpGĀpG #ād­7ŽĢæ8Ž€#ā8Ž€“5īŽ€#ā8Ž€#ā4`œŦ5āÆqÕGĀpGĀp˛æ}ĀpGĀpŒ€“ĩÜ8ޚ#ā8Ž€#ā8NÖŧ8Ž€#ā8Ž€#Ѐp˛Ö€ĮUsGĀpG ‰Cā8ĩ‡@"‘ŌŌRųå—_äˇß~“ųķįKĶĻM…p\NNŽú~Ũ8ņxø–<ÉËĢÚsoN¨j§.-e×]å¨3ēK‹MWč zQ ˙ŧ?úũļĒãMcęīĩp ՛Č˙šŠzÃŪ ÎbŒxAԆ*͛7—}öŲGš5kĻ$-///‹kŸŨUŖm­}ņ‡Žš+Ũē´•Ü@ēáŨáŋđDˆ.ä ųDJÂŋâ’„Ė˜˛Hž{l˜Ėûm‘ÜpĮöĄ”=;ÛdZ–Ģfū›ž™öGKŸŽtâãzƯĶåõđƅmmũŋ1ô÷ƅpfÚVíq03™žĘX­ˆlcƌQËÚ~û헴¨1a–Mėe“:“œ_/ĮĸąāA;Ķ–3 EōKE––„#‘+KYËGA`k\/ÅqK‚Ÿ_šâsĨÕÚíä¨ķv”…íZČŗŒYaBŦɨ:ũ1/7WrŖGšõ—ļōŪ;ōčŖ&Éa¤ĮˇÃûķr,Ā$đh,ũŊ&ī†$˗ARk¸.Yƒ[qqą@ÖļÚj+)))҃ÉŊ¤¤X'BŌ0ģ߸p  ­}iךK2oiąä(š) mZF\°ĨagûđíWd÷ŊŌĢĐäā%‚u-X؂Ÿ_”#}÷î!¯=đ™wJiŌ¤‰ö‰šžLßĘú#åËoSg+ps)EaÕ\!˓%KËÛoŋ+GsœĖœ9;ôcˇĄ>%ĨŌĄCû°\f1ö~=÷ucėīôãlsNÖj E,X K—.•Ž]ģր4QU˜ˆf˘!/ŧđ‚œuÖYšÉĸ6eNŸ>]^|ņŔe_TT¤–—.]ēâVĸúDõę7mÚ4ųī˙+įwžĻ'.O`cšĻŽā§%dia0­…uŠÜ@ÔaŨĶēßß •Ģ/øā•pZUųžŋŒ`‚3ÎđhŒũŊŦŲõߗAĢŅžt^;Î=÷\9î¸ãt’0`@2œøĒ:“‰?xđ`Ü,ŦǞj+ŊéƒŋéĻ›Ęäɓ“uŽ­2ĶÉ5]ˆŸ9sĻ<öØcɤҏd`'Lž™¸¨\&x™Č°4K–,ŅsŦ/ÅÅEåGąËEI oLö”{˙ũ÷Ë÷߯mÎŪļvíÚIA~ZâîŧķN})Ą4X.HŸ´Đ…kÎɯ~ _§ĶŌhå™>ZōōŖúFõƒŦ=đĀI}ŖōM^4=õm¨×ԗ6ćŦå'¤ ´į˛âRYČWAđ [¸¤@îžéJíV÷Ü|…Ė_œ/KC8i–IH—ĀwdqđķÚĩ”Å‹'ûN´/Z>|¸ė°ÃÉ4„gâ,EũŅđsމsr嗙92fj‘ŧūęËōÛėĻōéˇ%ūtéŊų2ôŗå믆Iķ-ƒ…0h‘Ķ"ä[Ū?­}‘ĩÆkČæ›mŽæ~ũúɃ>(ß}÷lžųæZ–öŖ€_ēöŽÆũõ×ōæ›oJ\_ģŽ­ûau–_×ũ=“>Ŋ:ĻqËZ[=:@~õÕW2zôč°,đļJÉĪĪ_Aiy:ŠŽû÷ŋ˙­{œ,īĒČ2ĢęGëŽ,ÎļmÛ&Å63ÅÜę3qâD9üđÃuąĘd"Ãō§Ē7OaaĄ.kédŽÃ,Ģ<áÅabÑ÷Ŗ?–Ž?^úôéŖacƎ “ËQE_ō˛—Ô Ģ”Ļ,ûĮ”]“×,}™<ôû8čw|š~čPH {pĖYų¤åˆë‹<0 Ž:…Š$å#ĪōĮå5Ôë’@KC›P'ęSPÜL ÃēfNXÖ,Í K¤%a)0ĀķÖŗËĖŠ“¤YķÁŸ,¯=û ėü9RŌ–Ãą´¨TŠJÃžĻ–MeŲ˛eJX’í3sôwß}×.Õ'>š~…ČČEEũ‘:Đ‘ŲYúįđQķƒx.™'_ųTšŽą§|ķárĞ›ÉüĨ"ŖĮL’ķįĘF›np(‘Ys—ÉšsËöe†ruV¨—é˙ô3OK÷îŨË4 m~|đAYŋĄÚ›Â-īäˇūÁšēāGīâSõĮ˛Â†&ŋ<ËņΏēėīÖf€[ÖVÆ$ŖĖüX–~úé'äZ´hĄƒqˇŨv›ėļÛnrâ‰'ʰaÒრŌ%¯wŪY- Äë€ōđd}Āč$ÕUWéĀLŸ|`˛Üf›md×]w•Ī?˙\ķŧ÷Ū{‚5%–ãLNÔꊧYøÃä˜cŽŠ0߯ŋūĒVÂx9ˇŪzĢ–{ŌI'É?ü,‚Ãōã9įœ#}ô‘âFŲÍ'žxBĶYŪ8÷Ū{¯Ö•ú|øá‡I™QŨĶĨ1™čÅ,?ØėąĮ+aņØsĪ=ÕBAû°|}éĨ—ĘėŲŗeß}÷•—^zIëaeÄõf˛ÜqĮwŗĒY™š1ĸ { g˖‚†5-„n–¨¯žüRŽŊöZĄo 8P…Ŋ ¸Ōās>nÜ8Õq÷€ŲM7Ũ”œÜ‡„ēŌočS7ß|s2Ŋ•A~ōzčĄŌŋŲy§|,~ˇ īņĮ×ūEx"ĻߗåúaEF ŋüĸ˛ļŪzk-ķũ‡ yQ}ßxã -o— ×C=¤mŖe†´oŊõ–æķįÃō(r‰û͟ū$÷Ū}ˇėĩ×^ōˇŋũMåžú.¸Đ/į͛—ŦĂÃô­¯ëÂĀ?YÎĖKĄ…Á˛Į€#ΐģŪ+w–{uV°¤•Č’fqH?¯ ŧœ°¨H&/ ¸˛Ļu ÷O:Gūū÷ŋOöqú1Š{īŊˇbÉ=ī‹Č˛0đ­Ŧ?Zû,Y/ķįåRÔDvØû<)X˛TJ—N’=ˇ”Y3 eëív—=ö:TææĻu/žĐŽô7•SŪĐÁâL>šŒi\“ž{ņõ×_×ûjÛĐÎC† )‹ í{KčĶ[nšĨöúb"„Yųûß˙.;kãŅG-ß~û­æųiäH9đĀå_˙ú—ôîŨ[ōƒ…ÛŌSŪä0žuÔQZØ}÷Í7ÉxÆŖgÖîqúũũF–ËŧëŽģd‹`dėaé×ôWŋôĮÚžęĒŋĶoÜ-GĀ-kËą¨ôŒAgƒ&ũßũîwrĐA ŲŲgŸ­û6&L˜ 7ų;īŧŖû˜tžyæÍ;iŌ$%[Ld­[ˇ–{îšG~ūųg]R„(°4€ƛ-[0čtîÜY—ËZ…}#: †áĘ+¯T’†uk@ mûīŋŋ~B *˙ˇpáByîšį4īNa’fBˆįãME>)‘Ēžƀ­ ûĢpÔ]Ø … ¸`‰<ĻĘ X ˙ņČ_|ĄK$†kšĘęÅĶØD6~üøôaeCįųË_VĀÆęxŅE)qĨŨHĮĄn¸AŽ8âĄMpéô&î˛Ë.S,{õę%÷ŨwAZĻž„j:XĐVöūāÔ ƒeą~k­TN8áDp!…{íĩgHW–‹ļÔ}l˖¨œÅ‹—(‘ŋūúëÃd=Xö Ėi§ŸĻŸŲzëm„ ëÔSO “ö^A~"ä]\ūčŒeV,ČŨļÛn „{˜’ĸ?†`įęÃũ /<,Ĩí5?ö ę`ú19Ąû™n ˛ļÛnģ@Ā dų•UFÖËō˜ž_|ą÷^={ÉC?¤x/X°P­(āøėŗĪ„{ ­ėÛnģīú`S™:uš|&O°]gŽĄßŊ+?†Ŋ|¯žújĐų˛BũĐ_­2úørĢ]-^ŖDiÂPˆxąLYÜDÚĪ Öĸœ&RŒu-ė[ īûŌÜI‡Ū:z„XÖ¸Æâ¸(ŧF:Ŗ 4WË&!Ŧ ?ü¸# Ë[øÔ’Ļ#žû‡ĸ'Ÿ|R—y¸áđŪ,nQšŠúcQx˜XÆî^XČMađ BŨBo•&m[ˌ™ĶeƒŽ­eƒnëČĸÅË-\ēܙWvmã/Ø~5,ˆ¸‡~8ÜëÃįIZčr?ßäA—ū€UŒRũũ÷? ī…"bú÷ī'&üĒc'û‘{ÕUW+ņcŸįĉäĩ×^——_zYFŽ)W_}uxKõ1™;wžZũ ŦÂCC…v D˛Ŧ˙Đ1r4-ũëžû˲Éßnü[ĀŦTõøöÛīt Ę_|.üãåË/žÔ‡ļ*|đ!Aŋ÷äö;n—ëŽģVîžûŪd˙ Õ2jŋ˙i׎Åū—*Uįũ>ãnEœŦ­ˆGÆW € n\plŋũöjáŠī‘G Čk:X2š’ŽåB,%XŪpūķŸ•¨qŽuЁčŠ+ŽPŌąCŽÉ‡´@– $ä'ށĐdbÅÂY92# ūņôČ^ō2ĸ‹åŗ0,.ŠĘa’Dv´.čÄŪ*ųąę@x€Ų‹ŌŗgOYk­ĩäŽ;îH™—z`•9á„Ôĸ‰ ŒčäOƒU…4é°%Ž2„ņ:‚:ķ2{ q”‡ūäÁᖎΐ8dđeņųD†M‚*(ü3}ø.„xáŧ5XÖFa`/˙WYzMĄéĘū鰩ċ‰še#öŗ}ũõWŠõ§Ÿ~ĒÖĻŨҁœRįÃ;Lŗ–\‹{}š4ÉSkõ€hŅî8úqģvíU/ (į QũP¤(ŧa˛rÃہä/“5L÷$iŪ 6ÖfÂûöíĢAģ랋>40Ą1éĄëūsŸ–ņĄÍčŖÄŸrĘ)˛îēëjž^ŊzƜ9s”BđÖ-zŽęāŸļ˞”A š…ö- “t¨F 6´YNxÛŋĖņAë‡Ļįˆ d.$"¤$'Ošį…7HÃGq­Ī*ę,G3wÍ5×HĮŽĨGJˆH“ “‘Ē?ēõO“ÍĄąŧ@ĊŲYV°HĻ%Ō“×LvŨũ€ā3}„#ą+ õĻũė^(ĶĨLĶN:é'…QũĘŪ&-KÃ Āškv’›öĮ,¤Ë ûĩ_đ°Š<ŪŦÆÂˆ{ë-ļŸ$äæ[nÖk,kôΜĐ&Œ?'Ÿ|І[yČCFģöí4ÍgŸ}.cĮŽŅūEBâqƒOŦãķ A{†ē\)#FŽĐht8ę¨#5͑GŠ÷ZiiÉ ÛUĸõŅ„YđOûNö÷,€ŦVĒād­°jį 7ŊųL2¯ŧ^Ī“&ûØxKIK“<ÎBō1`r…´`ÃJĩŲf›­”Ž´XÛ,?˛X~lŲ˛e˛ Ķ&›lĸ:#=e1XY^t‹įÛhŖ´lĘa0ˇ´Čˆ×…riiđąōD˙ōË/ĢĩįØcÕúÅķ‚ƒÕR Ņ9ķĖ3k—(ĘÄ!—o9aÅ;ãŒ34 rŲ¨žŪzëiŊ‘eGõIWGČõ抺ē˜OX:ŊY&ĻŽ”eé9G&2âŽvcō˛OÆŽm!įvD¯MËŀ„Mū`šæškj,ē",l8,¤”aũX†‚[™)Hœ]“žÃŽÉ­énô͍,&`dEķc5iĶĻĘCŽåĮįe,Äô%ŽiÍ7Ū8YvTuä!K÷ũŊ[¤Á‘ßäk@øWÛ×≪đhŲ,|3-ÚH æjUK„‰˙‡wŸ•‘C_VúFúîÛ ’ūžĸļŌ°Ÿ +(o.YrļjF’´Ž˛ė°ōILũŅ!gøF|ÔÅû#q¤ˇˇP“˛C^,nÅá‹p-Z´‘Î]6’f}Ī‘OÆËŪÜ÷倃O ˟áŗ%sfIĢ`-Ëž9Á˛h&”ËaōX˛Ĩ­ŨĖ' zâėŪԋđ¸h?"œ0ķéGŒô#÷„ÉÅį°ôN:V x(æ 9÷ŒĨ#g×ø< q˙EÃ9g,ā>™|ŌĮqoė×Ö†ÔŖŽúģ‚ę˙V@`ųˆžB°_d‚ƒ71˜ ‹wuÖQ‹ ,ČKĨ bÖéņ9čøĸ´öÚkĢĩ=e„‡L|0öī`YcīaøX4æÎĢé8įā ›|–×Îņ‘ˁ.–Īt#úc‹— ‹Ö…rĸÄŅô…t˛ÔÁkä!ËS4/呎  @ëAãS –čhŽs&ęMƒLdc%[ĢwTđ‰×‘§ņ:$­@f9ƒt “edö B†ČŸNo,¨<ÕŗdC>öؘ‹ęO×āJÛs §MfœÛ5éäm‚‰^ÎĄoԅ%ōącĮęr&–F›üĐ\nŋũvÅŌäZԏũ{,U"kʔ)jM(ŗd-ŸüLGËgz›\ے;˛Đ—e9úؐÎtgiŦ ×8[b& ē“yXU9 eČŗ˛đšæūĸíØWˆuŽūeõãŪ°ƒ0;Į¯ÍkÃĮĘiÕ4/ĩ&Ō:üA›ōŖm°”mŊĮA2oōXų퇡2s܏˛õ ÃĨ]o×ŧiHÛTZ…´­›å…#Wš„=kÖg°Č?ë[æĶGé8;ĮĮ™ Ḱ‘đĘú#u÷°˙.ŋ`™ ˙äųúŊ;eĖđwõ“3-Z4䴉|^6xčžåOßŪ\Îd-X´B›ĨęCč€LëOø\[¸[ÛÛ5>÷"Û%°ÄŌĪ­“–‡cÆŪJˇ~ÄÍĪ9åaÍĨīpYcŧ‚üƒãŒõ7t⡎köÕAȸĪp”O'î“O>‘&ë‹ÜēęÖīęĒŧēîī ļ˙[ ˇŦ­IåÜŦÜôėÂĒÁ öAAŧ8 L XĘXd_ œ ¨vÎÆo6†ķdtšÆúÄ&~'ŦbL\lF˙į?˙ŠßāZũõÕÚÁĄ V•õYŽˆæÃârá…ĒŽŧ„ĀwĘŦœK.šDËa#pEuaâ`s;õdylC—8A°"ŧ[ˇn:_wŨu+a‚u ōēÁh–{Ā™q}ØˇcŽ4ԑ=qÔlŦŽ ü,˛œÆFa!ûųHĪOAąé,¨\oÚŌpūųįk:,C‡rHg+ŧÍ1y0s€ qœ3‚ׄ3ŠØA^ŌD'ŌđŌ{#ŸūyÕŲe?iŠ;} š×t!ũˆ &Nœ¨8 ƒ9+Ûô$y”Ëa29g}ܑÅH&+ Yôu–ûŲ Č„GĮ‘ŸīÎQdXûĐ×ĀŨŌXŨ? /Ÿ°/‘ž‚>L˛čÕ™ué +ęË9$­UØo—Č Vé°4ÖÑ+m[u–ŖĪģIēj°öĮëƒÜēaų3āōąIž(\äåK›Â&Ōļ ŋ ēLĢa8raįøvvoזž°(&–øx$ ,i?ú#˛¸., ûÖÂRč}O‚eŪ‚É2gÖ$YēdŽ´Kü*ŗgÍÎmÃļÁۈ]ļ4`ŅVķŌ¯(YæŦÍŦ]ņIc‡Ĩ‹_3ް|1â>åĄâF:ÂX•ˆŽMĪ>ûŦŠ29”KYXf!Ēėæ>§ķĐÆ8ʞa&ĖBĮKD|^rĮö“…`öŌA柰ü#›ƒrĸéŦ>Ųā[éGœ×fĪŧjĢūÛ U@Ö=|"7žüyÚbŲ“ŽŒ#žË 7s*grãqŅpōō&V0Ę!8Į2Á iƒF4žs“eįäÃēnĻ7åSá”ÚĨįé3Z—¨Ž&ÛōÛĩų%ˋL“‹ŪXŒ(ßôļ8›8دI˛pĶĮd’?î, >ePG+—´„C,­],=a,ŨŅ2ČoŽ6k›”Đ=zŧXĒfPįĨĢ'áä§lęHá =pčbÎĘ´0ķŠ.[Š$œŊx„E-'†™•A:^\Oęhō)ũ­NV>:™Žœ[z̓ļą~byđ-žô†ōqĻ“ĨĄ¯™UÍpˇt–ũ!ø`Å9^‡¸~ĩum˜Đ–ū'~é ŨÖ÷$uĖ / ˛fuĄ5_ūĪ-rĐi—ĀßB;CÖ ca1ŧAZ,ã§Ė—é#†Ëųƒšë^+Úō„w°˛ûkœahõ¤LÇ0Ã'“ūČ~,Ę >3g͖¯úEēŽÛ-ėH“°dŨ>čĶLšų ͑&3Ÿ’‹.ŧR–†~ŧté’đŅÜf´“ÛuŌ6ĸQ6zZßC_͇súsX}CīxŊˆgüāŪ´8ԚŖ~ôú‘aoXXš„™N>ę yE6>˜ķö({2ékŅûáĮԇ?,j¤į^#ŊÕÕĘJĨŋélē5ļëēėīÖĻĀōGë•ã<¤¸ų˜0yęįŒdåf62a7*áœsXzÂR9KcqČ29ŅŪȈĨ3?ZN\× næL.×VŽ•ŸŽ.ÄEe[äX¸åå:Z=Ž<&G"˙Hcņ‘`ÕĮōGeZųV–aMÃāmáV.>$ÆōãGõĻldN››ŗrĸō- +(ƒ<“år0gƒ ל›|ĶÁĘāÚ°ܚ,ō01Ųf“>×ÄYį,ĶããLO|ŌP_&s¤C/&èN–YĻ2pņkdZxĒ4ö"Õ‡´QŊ‡āEôCWķMĻåŗ˛jķÚÚ }Đ¯cÛÖŌļ]ø5Pøh€/ö‹enđå—`ĘH/!„ę„6Đ‚Ĩ+ŋ‰4 '-æ|ę¸w˛î–×üx=)7f×éâ*ęôię…kÕ˛… Ü`tøöÛxŨ°_ Ģ ŸÁujŌLžž4L^}ū_°´×žÁ[ŧזģ‘$=´ō +ōZŖũČÎŖ:[˜Õ‡tŅ1‰ø¨ƒÜÚC–åĄ,ë'„Y8úpNzär`ŽĻĄoąOÍåY?Æˇąƒt\[9øČ1ũŦĖÆ~mmX—ũŨ°w9ËGæåa~–v#’4zŋ&.zDã g°ĀßФŗ0ËcrįÜÂ͡xģļtv“Y9VĻĨ‹úœ›ŗ2Čo.Za&Ķâ- ßʡ¸xŪh¸›oe›oáøŅ°¨L+Ÿ#š6žG##˛âÅķFķ[^K“*Ž0r,KŧÉO‘1Š0đQ–•Į3Œi›¨‹ÖÅâm2,o´žgé(ÃâņM_|KCŌá[<˛IΤĪŊ&]<åÅĮEËĩk|+Īô ,zn}Õō[\4_´lˏoŽĻã­l“ŋæšėå z3š† =Đėąœk ˙°ĒŅːĩŌ@rōfސu[Î×ū×ÕĘĀ'Îâņ “hœĨąt–ŸëĘúŖaÍ˙ŲgĻ{´°´Ņg‰ãŗyy .›žmöIöˆžmļÃĮúļé`á\[YԁÜÕËÂĸu$MôÚŌX]M>×Q=8ˇŧøÄÛA\T&{â¸W-f ˙xŠ…—ČLnԏŪ7&×ōáuíšēFuŽĢūÅĖĪuhq2EĀ:ŦųņÁ(S9žnõ@€ūÁ>,övņMŪz´ŊW҉&:1Xß!Kc>élb!o׊Đ%Žü6I’ÆĘŎsÂMį–ĪÂĸ>įÄã,4žpģægé-œk;L†]“ž0tÆEÃÉou!ŧ.åRž-[…åÂĀŧ Ē͂:å!ĸXNųį<ōrCŠÂ™4âųūÍ×dūÄôãŲŠÆÃ$U\DtF§•õĮh›„ĒÂIŋ€čņåũ|„›oéE­JčI;˜ âœ0‹#ĖÚĘęMoņ„Y¸ĩŊ]“/‹ët‡å5š–,ŦLĒčÛĨ&ßÂđyЂđ‡­rŦ?j‚,úW—ũ=‹`ĢņĒøžĩ‡ÔŽîØ>–†ØÆdöÁ°×…å–,ų"ēMb惛M$vnXÚä€oŒų–‡k[˛0kqXÆė°´6ãsŪäŊ˜œM?ËËu4Ėd‘/Ē7yÉcŽxŌZ>a•c˛LK‹Ž,ËFu5ųuåƒ%Ö$ڒ%1,§l)ā-g,QčG¨Ė}ˇ°y실ĀÚǞü™ÆgÚ!_,•˛‹ĨAęĮĩ‘2ÚĀĘĻ ¨/ÖcöL˛į“psM™¤öÚ×\ŧn}|Äãĸé4 üŗ~ÕÅōZžä3™Č_Ķ+*ŸsŌá¨ų͑žxʉâÉ=Îu´,˓-~cëīŲ‚{ŧNÖâˆøĩ#°Š0Đ3€3s0‰3ą!ŸÉ ™IžÁ?:)TT´M$ĨąI‹4œ[|;ˇüěŗsķ-Üō˜ˇëLōÅĶX^üx×Ņ29ˇ4øv•QWįLÚLŪėC„´AÂiS#iņ‰>Žuá`$o…!F֐_S.Ķūh˜Ŗå3IË$Œž IDAT! g>įÖ&Ÿ>Ī9‡É"]:•UYK[YģGãŖį–Ÿr8_ĮÃÉĪO Įˇû7š.]=sxcëīëŠt÷=kĄãqŽ@5°É€ ËŽev?ÎíiKtŌ­ĢĘZFɌMŪFV*Ķ‹xëfšâÚúNMÖÅdĻ도Ŗweũ1)IUOK—*Ž&ëÕĐdek}[ohũĸĻôq˛VSHēG ‚€=2ĄÛäŤhŽ0{2w˛f¨TͯĪɑ˛9hgkKÚØÚ;]mĸyIYŖŸpŽŦÚp•õGĘļ:XLWÂãØĮ¯SĨŠz5™ņú7ŊjJhŸm ũŊĻęŨäø2hCj ×ÅpGĀpĩķ+Ä/GĀpGĀpLJ€“ĩęáæšGĀpGœŦÕ Ė^ˆ#ā8Ž€#ā8ÕCĀ_0¨nš‹M´|’aėØąúÛt‰âįM6ŨtS}M?Û7ŖV„ƒĮ9Ž€#ā8Ž@Õđ dž—ĻŽž%Åo?ōAĖ 7Ü0í›\ŧ]5aÂũÎÖ[l‘,ą6H›éöŨwßéˆķŨĻÚ('Y‰jž 'Œ7nœôíÛWĨÔļž”šdÉũHm]•YMx<›#ā8Ž€#DĀ-kI(Ē~¡‰°Ŧ­ˇŪzi‰šI%Íäɓõ{Fŧ&3bÅųƒ>¨ŋ¯ĮGTųPæ;ė _'.•EžáÇĢ%˛fq™Č!om:Ķ…2 kü “'‹ËTOŌg’ÖäR&íUQ™™ĘDV:W2ŌÉöpGĀpÕßŗVÍ6gBæ‹åöÍÎí æös$EÅeaöÁIŌ’†ŧvP<į¸}÷ŨWŽ?ūxũŪd˜ÅÛuežĨ7ŋ˛ôõoú™Ÿ‰¤åāįmž|ōÉ$ޙưtæ[™\đÁJä8Į[ētžåYéd{¸#ā8ŽĀꍀ[ÖVĄũYŪIJ9 ŋŪ~øxųO⠖8›Ä!l\Û'­X‹įÚâZˇn­ # ß˙Ŋ.ō[}[oŊĩūž éŸūyĩJ 6L?ĒŲŋŲ`ƒ ’DÃdôŅGúģ}艋Ŋs8~ōčĶO?•yķæiū]wŨUŋŦĪ*˓ņō ãĮ×ŸPÚi§’?zŦÂĘ˙ĨJA:t¨.c5¤üĸÕĪüß~ûMžūúkũHčæ›oŽŋ—ˆØ)SĻČ_|‘$Į‡v˜ĘÃJöâ‹/ KËŨģw—oŋũ6ĨŪŋūúĢ|ūųįJ‚ģtéĸšZ™\Đ.¤ĄüŠS§j<đ@­gTīmļŲFõFōlŋũö*kȐ!Ō§OM—aåŪ#ā8Ž€#PœŦU5&`Č_gé˛$¯¤BI5Ō’Į&pË`$mÚ´iJ6 ģíļ›Ļ…Pq}øá‡ËėŲŗå̝ž’ũ÷ß_ŗ.Z´HÃ9ä%2,sæËņéØąŖ’%,?=zôĐ$2~“đČ#T‚DZ~Œ9Uy=ČĐąĮĢyŦŒ¨Oc8AüøEʁXūüķΞå–[*–†˛?ûė39蠃ô÷˙÷ŋ˙IˇnŨ”`}üņĮJ2{÷î­õÁB Y|íĩׄēãŌéMÜ'Ÿ|"ƒ R FŒ‘,—8H:@r×]w]Y{íĩ…r‹ë=zôhéׯŸD~„›ßúDųČ—á$ ”Ũ9Ž€#āŦ NÖljž‘ ûŨĮŠÄGZËg“8×ܤI“dîÜšJ:uę¤áX˛Hķå—_Ē?cÆ %‡?öĀą'™3gÎÔˆ3ŲXČf͚%A6Øyœ8qĸ.ŊÚO͐'UyXÆ(Ģԛož);î¸c’œD끜hŦh”…Lâ c”Ī›c ŗzãŖ7dī‡~@ Í7}útÍ!ˆ,éŅgËtzCâ(<ÉĪorŽ3Fe@úŖøv Ÿ°¸ŪčąÕV[i;8PŪ~ûm%–LōX~ķUÁđĪ0˛k÷GĀpĒ ād­*hÅŌ2)C˜ô9˜”ã3ipŌÚ5a6Š3ŅãXĸ„`!ÃBɂܰ,Š• ˇaxë”|–ÂbrÍzGZâ°ĖŊõÖ[JŽÖXc ‚5=úŊMqŠĘŗ2öÜsOũL Ë~,šöęՋ,IGēŊöÚKÉi°BA˛x‘Ŋ!J8+ĶtFĘEwĢ'~ûöíuoéIksĶŲüŋ¯„qÔ’Ėšč`ųĸē˜\#€qŊi?ĶühkōãN~“|‹ŖHz‡Ĩ "ąūúë K{”Cxēō #䥖PYÂdo—émõ ŋĨxbÉC.užĮR,õÃ7ÉË9áXÜėœk°ÃGoŗœ!Ÿ4ÄĄä–ëT8Ą7Ö=Ŧkŧ@^–xM_ķ +Ú‚†<ŌFõwĶ=YZ…ŧÆ6ōpđö­É0šZ ˙sGĀplj@Ū…^xu5ķŽļŲl†,° ‚dD ‚=‰k6ÃCē°A4Ė!‹Ižīĩm˛É&Į^(–ęØ G$rAú駟t†ũWȆp9R­]ČĮq ąęĐĄƒæA{ÜHĩ‰=V8ŌqĪĻ,zŠĘƒ ŧūúëēT 1IJFzäá¨ō_}õUM.:öÄA¸øl {ŪđYîÅrŠaC~Īž=•Ą;KĨ*>4ŒE‘ s@ˆ lԟŧȅ€Ą;z@ŦâzCF!OSōŗ ë"ä}i„›CڅeXt'/-•Ūŧ”” ŽŧT‡¸ŅLƆÁšhÖ5ÃÉĘsßpGĀČ˙(nĻHEŌ™å2‰bs:wE+Äd—]vQa“7˛ œ›#ž‰ŗtËûÜsĪéË„‘6J>Čc鐹„P Įˆ‰ĨÁ:ed“8,Kč)Bá¤%Œ˛ ŒŅ8ŗzAL!IæL&:>G:KƒŽŅrMŽ…GĶŖõB.ŽúQŽå×Āđ0È´čnúS&ų cꍎĻSTo+ĮâLž…ã›ŧ–-[ŽPĻĨußpG žg­*hÅŌ2ųcŊÂڃu‹I:•cgōZslR'=įF´ÁuÜo„*GzȊšx^ĶÉŌÄË!Ū ĨŎō•i:†#g:Æâ ã‡åĘŌ›O¸ÅÆaD+š&nåâ[Y&Ŋ-?aä#ÕßÂĸ˛- gq3ŊãyĘb—“b‹'´iėÜühžčšÅãÛšÉ'”‘Æâ­]Icaœãĸō¸ŽÆĮã¸6lĖ'Ė#ā8Ž€#P–›dĒ“{5Īc“2{ϰđ¤"[@'›MāÄãėšsȀ9ÎŖqÎ^.œÅáÛšĨ‰’ ŗ4æ› +ĮʎËãÚŌXœų&ƒēÄË4y–†Ē‹ĩ2ây,ŊɏĘ#,*ĮԚoyÜwGĀpǃ€“ĩę ō0Į‰‰]GEڄMœ„™39øq`×øŅ<\ہâĸ‡ÉÆĻŗđ¨ŦxéŖ.UZâ §>oaŠĘL%“ôŅōĸįV†å#ÎƊĮq]Y^“cyMwĶ›üV†É2ßōFˡ°TžÉĖ4}*æ8Ž€#āNÖ ‰*øLô8–ŌĸovVADV&5\˛˛r^)GĀpG žXūí‚zRĀ‹uGĀpGĀH€“ĩôØxŒ#ā8Ž€#ā8õŽ€“ĩzoWĀpGĀpô8YKĮ8Ž€#ā8Ž€#Pī8YĢ÷&pGĀpGĀH€“ĩôØxŒ#ā8Ž€#ā8õŽ@“ûîģ¯Ū•pGĀH‡ŋø1`ĀŲhŖ4IM|ŋΞĄ7aÂųđÃõwpĶ•īᎀ#āÔ79?ūøc‚ŪæG˛ųkÄę[1/ßp(**’aÆéoëöīß? JuH[t|ûîģīdÔ¨QŌ¯_?˙^bU?q†€ãĒüŽ8?+Ų„>hJDēŸLjĘģŽ€#°ú!ĀØ´ÕV[ÉčŅŖeŪŧy˛ûîģëXņĒ a3ĸÆCéĮŦ˛ jüT\UäŦ~-ā5vēF€qÃ8ZNx˛L,[ļL­jüˇ;GĀpĢ聅mܸqÂxĩĪ>ûŋɋ˄hQ[ētŠŧũöÛJĐēwīŽĩä`XūāÚęî:8Ž€#$aDĶĘ1cÆ$X…¨aUŗAÍarG ž°1‰ņÉÆ¨É“'ˤI“dīŊ÷–Ν;̊6Ķf͚%īŧķŽŦŋūú˛ŪzëéS+ƒ!ųyŠuį8Ž@C@ĀÆ$Æ'–Bs&Nœ˜`´ũj6°5e]GĀX}`,‚Ŧq0>Ų8UTT"3g͖ąc~’]vŲE6Ūxc)aŗņŒ †*=6í-]:¯,jeOŦöä]rX}÷š;Ž@CA€ņŒ˚>PN›6MɃš EY×ÃpVOl,‡¨q° :ņ2™6g™4Í+•œâÅ2vôéͧÄ_< Ÿ9{‘ G¯Í%Ҥ•äJ×NÍĨC›æē Ę`Čaƒc*Ōg˛ÜwG .ˆŽGJֿ˙“°Ĩ†čWĘxŽ€#ā¤C€ņˆą ‹[5ĻÎ)/~^(mš–J›æĨŌĄU‰4“BųųįŅŌĄC‡ä‹&‚Į‹sįΕ^Ŋz…”ÍeūŌaîGĀh¨øÕP[ÆõrVcėe§ųKJdÄoaÉ3`ąũFÅŌēE™, 3"FœÅGÃė9ČC.ō)gåę…˙sG  ād­4„Ģá8+#đŘü`#<üäÔzPĢ2gÄËHYœ Uo2ĘäåĒ|Ęqį8Ž@CE ICUĖõrÕŦ\g)ÍōáĨ‚RÉÍ ä*ŧp€ƒŲa/#D-cg„N3•˙# yČ-,ÉŅrČKwŽ€#ā44ĒMÖō KÃōAĄŒ˜T(“fÉĸüđĨq¯´Ąĩ¯ëã4b2iNąęߥexŠ œGA´Œ° Á" ˛•ŠŦÅ iqČkäÎZœ#Œ,qĶg#MãüŸ#ā8̊@^dÖl—+]Ú5‘.íķdģî-Âu^ĩÄV™Ŧ͘_,Ī„ šīX*ų…ÎÎĒ…ēgr*!ĐĻŊcM*Â)‹“ĩx!FÔ,ŧm;ką„=k‰p”Yņ,Î}GĀpjwęŲRßžlŅ­yRttÜJÆN*%k €ödúúˇ‹åŪwæ¯@ŌX5XĢ­Hģ–<áÆ¤ûĨ#ā85€ĀkäéĮnãĸĸļx\ü:NԈߤ‹HĶJGÁ¸$ŋvG rXmœŋTd^8ĘŪhųdtž'īŅ^NØ­]RHe„-§˛âYģņ…92äĮPbšÛj‘Ũ7éÕU¤e3gi†‹ûŽ€#ā8Ž€#āDøuNB>úYäŗq"åFüA[´’Ëī´ŌŽh>;¯”Ŧ‘đéOËÃ,Đ<ƒíÔ]!iNĐ D÷GĀpG é rûģ"ĶĘ(•\p`GŲ¯_ĢʲI…d ŗÜá%‚‹cã­H×ö"˙wHŽ´rKZĨĀzGĀpGĀpâ, ûũ˙úBBf‡ũ˛ŦLŪwf}ÁļœÅĶsvˇ†­Ÿžøe\‹Ļ"ė“+­›×žEd.((¨ö×ÄŲŋŌĸE ũŅfUÚ˙9Ž€#ā8Ž€#Ѐ€G> !7žVĒīđŌæyûˇ×åĐt„-%Y3ĸ6kAą|>Ļ@̏sYģũō— ŦŪ¤M'<ŋFF4lŲ˛eRXX(͛—Ŋ%aqæGË´sķҁŧø­[ˇÖāTųâēÆĶ˜<üx\ü:UĪŋ8^ņkĮoå>ļŊ•ãŋ•ĮšT˜†ņ¸øĩ÷ŋ•û˜a— ĮĪûŸĪŸ+̏'00Mš4IĻM›&sæĖ‘Å‹K›6m¤S§Nú{Åë¯ŋž´lŲr%>ŅgéˇAŠ|˙›č×5NÔFZ6Ī[)Ũ“)ɚE~5Ž ųí´=zįĻ$eņÆŗŧøņ¸øuĒ4ļûīŋ_fĪž-XÚōōō¤I“&Éī*Î΋‹‹e5֐ĶO?=IôRÉΤ|\ū/ž>~ĒŒLķɄ ´AŅŨdûíˇōę̝ĘV[m%‡zhT\2M4ĐōEÃ8ėąĮdüøņr 'čZ§“›.˙¯ŋūǏwéŌEš6 fÕāRĨMω#é§N*?˙üŗvÜ^ŊzY´ú™äˇ ŠŌĻ K—>UÚTažŋ 86ņkRĨ süŋT}#U_IæũĮûOcé?ͧO—Ÿ~úIɚõ[üE‹é1qâD™QÂ9nÜ8yōÉ'%??_;ė°jĢņŪ{īi=(›nēŠd*÷_˙ú—ŧöÚkōÛoî–×_ŊsĖ1Õօ6üË_ū"‡~¸ÜrË-ՖãGĀp†€sųwß}§†ĨŠôÁęÆ|žõÖ[¯DØúŦ‹Ŧ4p~Ŗx™l>š›ŽŋTHÖf.,#GÃĒb:)Y8Ŧdė=›7ožœuÖY˛ÖZk)šiÕĒ•Zxˆ3‹~ÔeBÖŦ %K–Č÷ß/wß}ˇ‰ĒmYyã7¤oßžrâ‰'ĒÅéŨwßÕ:™nčĀyôēĒzEķÆĪŖ×QšoŋũļbŅž}{šüōËuīā;īŧŖ$8]žhūtį={ö”“O>YļÜrË*Չ§’Į\Úĩk'úĶŸŌ‰÷pGĀpG Î€|aQcˇųæ›Ëˆ#V*ßÂIGzŒJ,‰šköŽ­>ĩƛĄüZ œ&Ũ\ģY3„?gQ9Ykĩâ:-!ĐC°ĸaŠÎ㤌æˇ2 3‹/ ÜqĮje;ōČ#u]‹ ™ƒ¸Q6kƤ7=R•oeXŪ3ĪįÁOvڜ…O\ÔĨ\Û$!GIų}ō dŒáÂÄŪûīŋ¯Ä?~ɊæåÜō›o˛ĖröėŗĪĘ+¯ŧ"ėíZ{íĩĨsįÎɡD!tļųķįëÁú0/Ņ‹ĘOuŽ…‡ÄaíÁ-]ēTË"Œ˛÷Ûo?y衇4 ņ—\r‰.—ūđÃF™,Ÿ˛T9cÆ %7Ûnģ­@°Øá/Ÿ‡¸ožųfĨ8Â-=įɃ>XXĘD'“‡Ī:8$ŗ_ŋ~˛ëŽģĘÍ7ߜ´€EeØšųŅ2, ŸÃ^Ė cąwĐÂ-ז(6><ŧÂyŸ>}’ Žģ LŗŽņF(Ö2HÉŊ÷Ū›dœ2Ōą31q˛fáé|Ō?ņÄŊķÎ; K­8Ūč`C<{å XX1a:Â(Ÿkö›ũū÷ŋ×°đ!ÅūŦTR‹!KŽcƌŅåFŪ‰;đÄÚˇÉ&›ˁĀDÂÆRî}÷Ũ§„ö´ĶN[AēZ,"~máp€.ƒbaãåt¤.æ¨;ä”×­[7Á:ÉūB52yړk¯ŊVĪ×]w] _°`†CîŦlK !ŖĀņ—_~‘ŗĪ>[ ĐZŦq”Q‡víÚ5™ßtrßpGKlųĶĘÄĸfÍ|ˆZÔŌFZōŲhyĨĖÎ8EŲ~üdxė$%Y+#jË÷ƒ•–„ˇ"ˏ1ŌĄC=°tÅ-$¨ĸü–kŽ‘5 3]ˆƒ¤s7âIWQY¤ÃA~°Ū@x°Ž]wŨuÉ|Vē˜,Ëgō-âxČ!‡čráÃ?,˙ûßÕŌ„e.•ƒ\Qæƒ>(Ī?˙ŧZĪX~Åz†ŗ˛Ņ튧žR“)yãĨŌaņŖŅ!„& /düī˙͎?‘××äBŒLwŌEŨ†n(˙ųĪäĸ‹.RrÅrčī~÷;Ŋ†”Ŗ3em°Áú‚-#™V&{˰ļÚÚ|Ǟ--DRŽDŪB%īN;í¤—0SO+GOüŸ#ā8Ž€#Pđyޏ‹ļTDôä‹ĪŋĨēÛŦŒąßY‰Đ…ŧ)ÉBÉūs–CKƒEŠė{kâßzë­§K’Ņ(öŠa Á"“‰Ŗ DÉšMėT L¯22šő‡sdا&‹;“åŽOf@œxŲ+žéiäßÂ,:f€“2E¤‡LË/Ÿk^œĀÚxĶM7ŠõîŧķÎS˟뀴ā e`ŠŗŧaĄâšŽ€5j”×Ö*+7ޝÉWKcųĸ>Ö,6õßpà ‚…íŅGÕļ¸ā‚ ’åB¤Ā!îŦLŪ¸ĨmŦœTe[ÚAƒ%ąÜb‹-”ŦAJÁÂĘ ­ÉŠ—é׎€#ā8Ž@]"€Šy>ęĸ5[[ÖČŸËJJ[1ė•_ūY˛¨\;OšgÍ"ËšZō˛ĸHKüĶ,ƒąŧ•ŠƒlqP¨‘&ōnDÍ&z“K8á–ÆâŌųüãåļÛnĶo‰ŨsĪ=ēԘ.mm„īžûîōôĶOë7ШÛ[oŊ•q1¤Įaš‚Đq účČkÆc iˇ˙ûßI+{Î(ĶČm]ŽīéáŦœÚ(Ãe:Ž€#ā8Ģ‚€fLF”¨AĐ0¨aŗ4øņ|Ņ8ã[é8LJ˛–.ņ ‚S\đ™ #g0H>¨ZUáŠ/…Fe˜nøFZˆˇk‹æIwΞĢãŽ;N­YW_}uŌĒgË{ŧD€ciŽ7kÚŅpė•Ãąė™ŠÛxã5)+Hgôˆŋu›ŠĖx:Ŧ˜ļ”ËgT°$n´ŅFš ËWm8ÛˆÉ˛'Î,¤ņ'˜Ú(Ûe:Ž€#ā8™ Āö.sėÅļ— Ė’%lě‹æŗ°Lũ´Ë ™ ˆĻƒä°Ÿ bJĩîM?‡|A@ kXÕlŲ3NÄHĮaáFđČ%pqųŠŽŲåĸĀō*–āpŧՊ‰ˇĀĨ’Q•06ĐŗGŽĪY˜9S÷~‘ŸĨÅLŨQGĨaīŧIÉR"Ē:đĻĻæLåY:^ä`ßá6ÛlŖüíå ž Į›ĸ|Bk /œūųzÍŪ9,qŧÍY‡U‹ÎĨ߀7/āhŽYîÅōn,ĢģsGĀpę æ!žÁ‡qÍČ`žéaƒ¨Y8yVeūĒQ˛†’X‹ēwīžü „)ž‰Ņ‚¨aÁáÃŦ$#eŗ¨ÕĖ‘˹ũ‚įUqsĪ=W°ŦąšžOR@NØĮ† "wņÅëËÆ ̊č”i!ėã'ĩpl°‡aFÍÔą‡ ’ÃÆ|Ūå€đ@”Ŗe*ĪŌAŧAƒ~ IDAT^zé%}Q0,Ŗŧ<ÁĪxᰜŪu×]ēŸ—8 †ūķŸĢMÖxÛõŌK/Õeoú/[˜Šë,dšNĪ/ ĐNŧyëÎpG/ØķÎ _€`åÉY\ ‡ŸŪ~÷<ž.“ëœđˆå¯}†LöfŠēėÉy2jjŠtī\"įŦøƒL Ģ, dˇąĻ@ēâ–9#"fqŗxÂYūc¯›Ô×\sÍƊĘ(+o6ÖÔŌĸ:wî\á7Å`Ų4âĒ8–'é,К°ūą_§ęl˞ŠôÒĮō$„Ž:øđ’Å×_-ˇß~ģlŋũöúv+u°6–Iûb…¤ŦTņŅ´~î8Ž€#āÔ|Ū‹•&æĖtŽyĸ–n ôļ÷[ȸYyŌg\šé„Žjxa.Īu5nYK§p&á,MX×âŠÆķĮã™Đą.­*ų‰–cžhXMœķ*GM8^2°OdԄ<ŦYXģ*s|īŖ&íÆ‡Ķ9Ú"įÎpGĀh(@Ā0č0?AÜ0đ`đ`…?Y[‹šÕĩA‘5ØdüRSÔũėB€Ĩfû|JvÕĖkã8Ž€#°ē Ā<ļaøF)GmēEÖjŗĸ.ģa!Ā2¨;GĀpG”Ÿî¨<›§pGĀpG œŦÕĘ^†#ā8Ž€#ā8ÕDĀÉZ5ķlŽ€#ā8Ž€#āÔíY›3gNøxëuĄ—á8Ž€#ā8ŽĀjĀœü=B=+˙ĩ§ŒČ?˙sņɯĀy%GĀpG .xx†ĖûuYĨEų2hĨyGĀpGĀpę'kõ‡Ŋ—ė8Ž€#ā8Ž@Ĩ8YĢ"Oā8Ž€#ā8Ž@ũ!ād­ū°÷’GĀpG'k•Bä GĀpG?œŦÕö^˛#ā8Ž€#ā8•"ād­Rˆ<#ā8Ž€#ā8õ‡€“ĩúÃŪKvGĀpG RœŦU ‘'pGĀpG ūČč ęOŊU+š´´TF-cƌ~2ĢiĶĻ’H$ô@rNNŽ@˜_gŨœ+yyU{É ÍßyíÖ2hīnrŌy›K‹Mĩ?ø?GĀpjŸ—ūŧÛį‘Ŧ%kÜoŊõ–äææĘĄ‡*͛7¯é{Îå5@6Ũq–l¸V;É D.ūĢ–‰2O f¸@Ųi) ˙ŠK2cĘ"yîąarūŠīËí ũ%ko2üŋ#āÔ9>/Õ9äÕ*°!Î#U3ATĢÚõ“iäȑ˛lŲ2Ų˙ũĨYŗfĒ–´˛Iœ‰ŧėđëåXd>3 Eōš˛´4G–â˛–Ž‚ĀÖ8¸^Šâ–?ŋ47ÄįJĢĩÛÉQįí(s[5‘ĮūķcũtZ/Õp˛Ÿ—ĮŧÛį‘Ŧ4”””ČđáÃe‹-ļÎm™37—Ž’Ģ×ÂŨĪ.æ.IČŧüm×ĐÜꗍū˜ÔräÃˇ_‘Ũ÷>(ØÕ‚u-ü+-MëZ°°?ŋ(GúîŨCžč 9圞a95/Ģ'¯œ#āÔ>/5žųļ!Î#5NֿΟ/K—.•uÖYGī‚iĶĻÉŗĪ>+įŸ~ÆwE<Īßūö79įœs¤}ûöÉāĻ(**’.]ēHq1wi8BV&oūʉš ‹^OŸ>]ž{î99īŧķ,ēÂô$Šæ¯čú駟–>}úČV[m•$Ĩ'—J>˜œ}ö؊IĒx#¨éōgküĸĸ„, Ö5Ö;sC['‚_ž*?~3TŽžđLšáŪŽŌw›]´ JCŌŌĀڊJD–…ŧí;ˇ“ņĶ!qĨNÖč<îG FX•y |œ/3,XcÔ& qŠŅeĐĶN;M>ø`9ūøãe›mļQLg˘!÷ßŋᛑĪsĮwČĸE‹2ĘK"Č"d„›Ŗ¤¤X&ßD°ž”–”j8×Äsũá‡Ɵ˙ügŊž6ušę×t!=zœuÖY+åˇx“Ŋfˆŧ_|QFŽYĨüŠôEūwŪ)ãtņŠôOĨ_ļåĪ/NČŌp‡~ ~°˜á’šûĻ+ĩŨsķ2qžÆ/ mi‘„ôäqđķÚĩ”%K–dÜß<Ą#āTŽ@‡ôa•ųvØAž˙ūûĘ3U#ŰaÃdŗÍ6ĢFÎĖŗ0žVÕUu^ŠÎ#Ų6N§ĢOq1ķuŲŧ\ŸõoˆķHYÖ>˙üs5j”|öŲgڇé˜õá i4x“&MÔį˛ãŽ;ĘW\‘ԏAáĀPÎÎ;ī,ˇÜ|s2=7˙ˇ_- mˇŨV>øāƒd}(KËKSßlŽ/ ÖąüB–BKÕ/ŒcĀ‘gČ]o•;ˏ=Ž:+XŌJBē„,ÖĩyĨ2sQ‘L^˜^ kîG vāJŊ{÷–ącĮjgœq†ėžûî:Ž=ņÄÉBYÉ œųqĮØuúé§Ë.ģė"}ûö• $ĶÛ Ÿj:ōČ#íRļß~{yíĩ×t %„ĮžOs)§GrėąĮjq_~ųå 2ūū÷ŋk:ļčÜpà 2dČÕaܸqōņĮˉ'žHļJ]&ķŌ9a{ ÆÆü§žz*9Ž3'žC¨x¤ĮŲŗw$¯ÍģîēĢ€-sÅû!/¸rĘ)ē%į°đĩ„cŽ9F Ō¤ŋ'ĖE˙üį?“ōO+eĖšÄąéá@Ϙ¯™Īzč!yî™gt%mīŊ÷Öųyuá…ÚNXP˙tîš2uęT͟nŪd^ŧ9ĖoĖcƒöØCûF V˛…9”•:]I :ØŧĒūV_›WĢ{ŨᑺŦmˇŨvræ™gĘnģí&—^zŠ\xá…úŲ z/äė—_~‘¯š`īŲ3Ąq/ēč"mn"ž‚0]˙ß˙ũŸŪTõøëŽģ.šŽĸt|˛ĢHAA~ mËô\m$j)áŗ ė^™0q‚ŦĩÖZJę ąÃ"Č2lķ`yČûrÛíˇÉĩ×^+÷Üs¯Ėš5Kã-Z(sįΓ¯B}únše°ĖŊ.—_~…<n,:ĪČũõ×ŌsMįc øį?˙!ųųrÜqĮi'ėŨģ—’´ŖŽ<*lL\~÷ģßK×ĩזüãrÚi§Ęž{î­VŊŋĢ|ęūX ŠÜ,īŧķļÜ~ûíŌŋ_Íoå—Õ—”Ëë[öȒŊ×SËØĖĸĐ÷BíÃ#Y*ÃXāšú´Æ?,k\ŗomQ~ŠĖ(yZÖØmøîG &qÆÅ{īŊW's‚˙ô§?éō(ë'‡Õ ˆO~~ž\ũõúđŋæškęDOZˆŅˆ#”<¤Z-! ĢQƒĀ¯ŋūĒãäK/Ŋ¤„„ą’‡hŌ}ûíˇr 'ȏ?ū¨$ėškŽŅųŠ  @ fææÍ›žŋØBēvíĒķ˞ÆŪhæŽL\&ķŌāß–M{nĒ/É]pÁrĀūHÁ˛%3}ôątZc0^•†­AeķJtœ˙}ČÛs͐÷ĮáBŪũC^â1¤|ôŅGō /Jģļm•¸-^ŧHŪ|ķ-™ęyæÎ ß"HÖ"™9sĻ΃&ĸEũšæœyœ­MSĻLæ)Čö›ožŠ[‰ž{îŋrJhçŸyZÚ´i>Ÿõv˜;ī–‡~XūøĮs*œ7Ī>ûŦ°2÷šÜyĮ:Ŋûî;Ú.¯ŋö:Ŗt¨EØÎô‹Ö׿ņšž×âōLæĮpŒ§‰ßũîwjÅaLÍÄa)bŦÄĸá0Į܄,ˆ$‘ųĀļŠXšĘüvíÚ uČÄe2/uīŅ] )õ†02Ž3w˛‚sōɃåûaßë6›Wĸã~ōŽĄ˜‘׿tc_v‡íUŪÛoŋ-tp T­…ō6ÜpÃ0ŋ•}P<:ĪŲÆm!Ž6\ũõÃrv7Õà ø6wî•yįëŽģVëÂZŲŧIųȡúôîŨG?f۟ÎĶų-/¯I˛>ĻÕ¯Ļ¯âr!ŠÜœlÖ'=×ø¤ąkōS:#ō,ŽxꅏS2âíú›ož‘­ˇŪ:yMō"ÃŌÆĻ[”0÷ķ‚å™Ū hܤ7ŪxŖ°\ËSĄ9>ô‹,d“ßõYŨŽ[6ˑ6ÍËp E#üûáŨgeäЗˮCx÷mI˙OŅįĩŌ@ÜJJÂÛŖa°X˛ŦDōZ53ŨwD€/l˛É&I‰X|ØsÉ%—č8—Œ'XÂyäĩ|aĮĶŦę5˛+š— ĢĖ|€ųgã:{ēXeõæâ‹/֕âmœ'īa‡,XLæĨ<âq|oÔŽŲ"dķ‡åˇš œ ÎҁëčyôšpōYŨ ԇrHŲöĸP>ķ'é9Ō͛VŽÕ"ÍJĞõøJ_S0}ĩRá_m\7Äy¤ÆČo<ōi žˆhünŨē)36Pã>ëī,‹ŪsĪ=JZâņŠŽY´†OoatL=ÚɈŖSqāXˇĮžîēëę5NzŪÄJF8 ËŒ8:T´ŗE;,qvM'Ûwß}“×@šãĮW9˜ųyšÄâČō*kų Nԏ';ÖÚ)‡ˇ`Ė ĩY“<Îí@6éqV?ęŗē]ˇjÜeƒŠ™Ácë=’Ožū‡,ž3]Z´î Į\úoi,h@T^.(oįæ–JëfĄ }Κö˙įÔ6Ŧ,`•ÂZÒ$c+2ļįčÔSOÕÉkÜā@ÖyĀeܜ8qĸ.ÉeBÖŌÕy“&MR̐Ų¤]#,5bLĀũüķĪÂg—XĸÅņÂķƒ9tfEĸW™Ģl^b‰‘Uö“ą5ŲĖ+ļJE8×D°âlœˇŧ`Æ›ļ–—ô8æ æŌŗŋŒíHX*؟GYŦ†ߊS'Ŗķ—_~Yø/s×Ȳ9y8ÂqÄqpÍ23:°Ämé‡íŸk›Sšfš{öėŲIylI"Œ%fö´ >\ļ ێŦžĩ9Ī5Äy¤ÆČ›˙ō—ŋč,Hėŗ(ŋəÎÁ–ųÜV8ž=6wî\ũ‰¨té g#?û č 9žŦSásāŦ9g €Y"Œsˆ&OnlTŔËĶ áÖ9G˛RuTä`öey×â #?¤–›ė‡~P‹"„G}ØīĮĶ›2Š#Ļj6~’ōvųå—'åYŲȡēEËRĄĢáŋÖÍKƒe­™bš'´Q8m[u–ŖĪģIēj°öGö=Žö}”íUã _[^^ą´)l"mÛ,ˇ¯†z•:C€Ú[nšEį Hã&ķ„bã7ÖũSŧ9ŠcLdž!œ1‘ÎVÕąj!ƒŧđ *= 2I^>`Ž2‡‘ī\ōrƒaŗ={čx—*s•ÍKāA]YĄÚ<ŧā†ėŨc_/šm´ŅFēŸĖĸķåĻĘËoō3_Ūō s–Fy፲ i„a{ātšēĮCr8gŽąk›wl~äšíAfácëKÅŧŒWŅŧIYė҆4˛§ōyõÕWkikļQf]¸†8ä„ Ÿeæ—r`­°xXųeOΓQSKĨoˇærëÉkUŠ‘mė¤CŅp™:>` ÁƒE¯ĒC"ŦžũqȤķĐÉL'Îq<œŪT(âŦîö”„Nėŗ|™2ú &č&TĖļ8+ĪŦ‚ČÃzgObĪÛ.X'šļsōĮõ°ô™ęŗ:ĨŋũĢY§K; +šaYô–ûtô—˙s‹tÚ%î˙2ÂļVōQÜüÂb?ežĖ=Jn>qCŧ ;ä˙G VāÅ&tæ–čZˇn­å0–C"ĸމ›ôXØVÅaMâå,GČcŦßīĻWĒr°e:gUe^"-å2€ķ*x x`õÙŽņy€ų,™ÃÁŌžĖ.=,Œ §Č㠜9*.ŋ*×Ėy´WÛĘōŗŌŽčK^ęC[§Ķŋ2yՉ¯Ëy䂇gČđ_—IŸuråĻ:*!5Ríw5JSyjˆîGˆTŅ9d*ĶN_‘âhP:6›ûy"B'3=[c›E+–][ŖÚ ,ˇšL|‹§_ŗt‰ų ]4T:ÆåEãÉkņvŗŲuŧ<ŋ.ceāĶąmø‚ŽaŸG kĄ+”ļrŌF[ žü’Аe$-ŧ3LÂyđø&Íķ›HŗpŌ~ņĄm–ėڈūĪpj ČŽš€Ã\œ¨ÎÃîĒ5“ož•o׿§ 'ž*sctĻķãã?yĸķ×ë­ˇ^r^H7îGįôL5oü÷ŋ˙ÕĪs`šãMX^`‰1š}Ŗ×éĘK%Ÿ|ŠôĪD+r–ßæŋę”OūŠôKßį‘%kTŧ!8nvnhö‡ąīĖĖĩÖØĻcüuëx|u¯ųVZ*W]y&ËķGXW%g;˛f†]ˁU-zŽædH[„Ŧ•ōē`ŦŦךx… Ãđwßp˛ˆŠ}ŋ­.j•éŧ”j\‹ęWņl¯ļŪ°ô˒/–s5!ßdá7Fy qÉJ˛FĮco/.đ}7öĨae‹>ąE;“Ÿg-[‡ˇ9ŠN°–AȔ”•W/zž>߁ËË ŋ`PX"3ÆL’Ņ‘%SFÉņaŋLtđ*Īîž#ādĖ|7­Ž\C›—°Zšå’åFwËhˆķHV’5˜<ĻT^^āģo|ĄÚ;ãōŽčg+#€%–û¸Đgč;ņ§Á•sxˆ#ā8™#āķRæX5֔ĩ9d%YŖĄũs|řW°ųŗ­]7֎āz× ĸlÚ];übOÛNÔjg—ęŦîøŧ”Ŋ= ļį‘Ŧ%kt ĀãåžQf›ŗˇĢxÍVúŠ“´UAĐķ:Ž@&øŧ” J3MmÎ#YMÖŦšk@+Ã}GĀpG S|^Ę)O™ ÍņrGĀpGsœŦÕ9ä^ #ā8Ž€#ā8™#ād-sŦ<Ĩ#ā8Ž€#ā8uŽ€“ĩ:‡Ü tGĀpG sjėƒ˙üį?™—ę)GĀpGĀČbÎ<ķĖĢ]‘5~ }=ö¨1Å\#ā8Ž€#ā8 ‰'ęˇ8ų$ßäÄįį,ų~Žīš–„ūôĶOkTm_­Q8]˜#ā8Ž€#ā85‹@ŊĩĪ>ûŦfkQ‰´ē./•:0íUqU­C]—ˇ*uK—wUëNއ; ââbUËüšĐŅd™_2]†#āÔ=uNÖ~ûí79įœsj¤ĻEEE•ĘЉōž}öY9æ˜cdɒ%+•WQ\4ņĻ›n*ß}÷]4HĪĢZ‡U-o%Rdf)ĒåA5Œ@&}ˇ†‹ĖjqüäŲÜšsĨG2f˘•ęzĘ)§Č¯ŋūēRxE•ÉŦ(¯Į9Ž@ÃA ÎÉÚ­ˇŪ*įŸū*#€Õeë­ˇŽTNM”ˇß~ûɈ#R’ĩŠâĸĘ]}õÕ˛ŅFEƒt]ģĒuX•ōV(ŧ‚‹lĀŦ‚ęyT éũWE­6"Ö[o=éØąŖtéŌEÖZk­dŊ‡.‡z¨LžĪ<ķLĨq$:t¨>)Ŗo~~žæá_uëP‘.ČMWž…_vŲeJˇŲfIĩ´ÚX1ģā‚ įÃ; äČ#Ôëũ÷ß_¯ąjî¸ãŽŌĒU+ŲrË-eīŊ÷–ŅŖGkܐ!CdŸ}ö&<úĮ!‡ĸá•ũK×wɗN&í@ŋîÛˇ¯,]ēT°–`IšöÚk++N† Ļ÷Â:ëŦŖ2žūyÍS‘ĖŠî#2§ĢCE÷JĻ}ˇŌ e˜ 6ږ{ûŠ+ŽXéxīŊ÷TĢtíW‘.™ŪcéĒ}įwęīĶūío“öíÛ'“Ũ˙ũ˛ÛnģÉ;īŧ#īŋ˙ž\~ųåɸ3Î8C $ķįĪ—ĶN;MvØa‡d'édސČ/G á#°páÂDôX°`A"L؉™3g&NšõįÄ˙”8ãŽņ‰°Xá‘đDÅ.LH‰ũë_ÉD3fĖH3}âąĮK,[ļ,ĘDxĒLĄiúõë—āxũõ׏>úhbŨu×MüôĶO‰°D+ˆVâŪ{īÕãÃ?LĘĩ“xy„‡I(ŅŊ{÷Ä.ģė’r"L<‰đäĒYÂd˜øūûīĨĨĨ‰ģîē+qîšįš¨D°€%ļŨv[Íķß˙ū7Ņ­[ˇDđ5žĸ8,Z´(^bėØąIyĢR‡ę”GÁá5âD Ŋ‰đ„Ž˜R’ÔĮN+f´ëú믟  q`žá†ĒOĻ_ŨrË-Ú¯ąO„ˇxüąĻĨ]Ãō’žĶ×8ā=¯č_e}ˇ"™”Oŋž7o^ŧ¯ŧōĘD°TUT\‚û2´DX×´Ô3Lč‰~øAķU$3Ũ}TYŌŨ+™öŨ +T…ČÚhÛđV—Ž!Œ#Ņãë¯ŋVÍŌĩ_Eē1“{Ŧ Uפß~û­ößãŽ;.96FeŧüōˉļmÛj_bėrį8ĩƒĀ„ tū„1~Ëā.aKˆŽËŒãÁē­apĸĘxņđ+x| šĖWŒ÷Q^Æy}ēŖ2ZŠU +Ų7ß|“LŠ• +×I'¤aøāƒÂ>˛¨ã‡uŅņėŗĪÖ×qŖ–0Ō…‰U¨YØ;ōøã OÁ•ÅĩiĶFōōō4ũÚRŨ:T§<ōđŠ1u ¤WqŽ>Ąߘ1Ŗ]é O=õ”ZÎ^xá9üđÃėšÖ:_|ņÅTS-g„aáÂ2#§Ÿ~ēZÖčwôĘ\e}ˇ"™XîÂMĒVíˇß^ƒHeÅŠÅ”ū‰59<đhúđĀ –jŦtÉLwŅ˙+ē˙*ēW*ëģŠ*D˙â~ Ãč ŅXģvíš6nã7Žņļå^ĀĘwŧŠK×~õ3ōUv‘ĻĒ‹ī?ū(?ü°`9žđ ÅúrAA\tŅEju;á„„ŧÜ9Ž@v!PgË  4Gu”Nž!ƒ÷škŽi—ęs%I,šc/ß91WŅįTåY>üøū1&OéƒåjĨ#<5JEqȨéļ3gŽžđÃōxô˜4i’Ē\QûĨĶÅęZŅ=fiĒ⇕éĐĄƒ\zéĨÂ2í}÷Ũ—ĖŪĸE }hdų“žŋÁ$ãüÄp˛¸Š­6–A1 †ũh –]ĸ.ėJ´nŨZ—6 Į,NēÔÃ5Ë}á-ĖDX˜Yšxíĩ׈Rö‘Š)’‹‘#G&—„Ō•W–+‘]ĩküŠS§&ÂК2ÃđOŽēT&™2TIDATeiĐ%ėĩSķd°đérâmˇŨĻŅÅYūŦ° jáÕŠCuË oá&^yå+:6'Īŗ3*,ŗēÜö %ëÆ’ũĖ–¸č큜%~ųåM, Ú‡I›%SĖĶšĘúnE2YÖ <íKÁrŦũǞePú?u?~ŧĒÅr×G}”DC¯+’™î>ĒŦNu¯há_ēžkņ5í×UÛĸwEíG|*]¯č#ž:Žą“- a?o"X!Á \1žĮpVÆaļÕĮ2¨ÔY /$Âō[J˜Â&éDøåŧÂĻ÷ö´1Ʉ ņ‰M6Ų$ŅĢW¯ÄM7Ũ¤kÃ&ˆũ>ėS OūJŦlßZēō˜ŦûôéŖû•–€tšÉ OĖēĪiíĩ×N„Ĩ†D°T¨˙Ā$Âl",1čģ°|’8õÔSU—Šâ6k9䥔%LU­CuËûâ‹/´>”,*‰K.š$–lũë_ĩúŲ€ _Özą÷,ę !Úváå‚Äæ›oŽd‚ŠŖŲßŪ¸ĶŊ…aŠ.š5íyE}7Ė°<›/‰h?d˙Ķ 7ܐ˔‰`L[ŽE<÷ÜsĒûéŖÁ¨{.+“YŅ}”Ž•Ũ+č”Žīšž5í×eÛĻk?ĢS*]*ģĮ,oUũwß}7ļm$‚å6ļTú QUųžŪp2C >ÉZd-j( *ëō_˜Čä˛'įɨŠĨŌˇ[sšõä寒GĶÛų—_~™öįĻØ´ûîģ ¯‘§sÁĸˇÂP¤ãÅ7ß|SßM—/LxÂÁŪ$s™”giã>oU †.QÅ㸖 nŪŧųJŅÅ­”8PŨ:TˇŧHŅÉĶlĀĖ*ŦO)÷í°<:kÖŦ>‹@–iķéͧëŌh|ĄÉMį§ęģĢ*3]Y„S–ÚXËÄerĨĒC&˛SõŨLōU7M]ĩm&í—N—ęÖ­ĸ|čŗ×^{ÉįŸ^Q2sZD€í#l!ĘôįĻØ“\™ģāá2ü×eŌg\šé„Žēī•9(žMŠNČZeĘϊį5x>DˆŲ`õ¨ąéĻ*ËÁlEĀīŖėhY4دÆ'gÜ9Ž@ũ PŸd­ÎŪ­*´lˆ{Â4ßBsįÔ%lü?ųä“Ķ>ˇĄ/Ŗ¤MĐ@"ü>j ąŠjđF¯ĩUŅŗ;KÖž2ápįÔŧqž_UE×h™~Õ(œ.ĖpzA Î>ŨQ/ĩķBGĀpGĀhä8Ykä čę;Ž€#ā8Ž@v#ād-ģÛ×kį8Ž€#ā8'kŧ]}GĀpGĀČnœŦewûzíGĀpG ‘#ād­‘7 Ģī8Ž€#ā8Ų€“ĩėn_¯#ā8Ž€#ā4rœŦ5ōtõGĀpG ģp˛–ŨíëĩsGĀpFŽ€“ĩFŪ€Žž#ā8Ž€#ād7NÖ˛ģ}ŊvŽ€#ā8Ž€#ĐČp˛ÖČĐÕwGĀpėFĀÉZvˇ¯×ÎpGĀp9NÖyēúŽ€#ā8Ž€#Ũ8YËîöõÚ9Ž€#ā8Ž@#GĀÉZ#o@WßpGĀp˛'kŲŨž^;GĀpGĀhä8Ykä čę;Ž€#ā8Ž@v#ād-ģÛ×kį8Ž€#ā8'kŧ]}GĀpGĀČnœŦewûzíGĀpG ‘#ād­‘7 Ģī8Ž€#ā8Ų€“ĩėn_¯#ā8Ž€#ā4rœŦ5ōtõGĀpG ģp˛–ŨíëĩsGĀpFŽ€“ĩFŪ€Žž#ā8Ž€#ād7NÖ˛ģ}ŊvŽ€#ā8Ž€#ĐČp˛ÖČĐÕwGĀpėFĀÉZvˇ¯×ÎpGĀp9NÖyēúŽ€#ā8Ž€#Ũ8YËîöõÚ9Ž€#ā8Ž@#GĀÉZ#o@WßpGĀp˛'kŲŨž^;GĀpGĀhä8Ykä čę;Ž€#ā8Ž@v#ād-ģÛ×kį8Ž€#ā8'kŧ]}GĀpGĀČnœŦewûzíGĀpG ‘#ād­‘7 Ģī8Ž€#ā8Ų€“ĩėn_¯#ā8Ž€#ā4rœŦ5ōtõGĀpG ģp˛–ŨíëĩsGĀpFŽ€“ĩFŪ€Žž#ā8Ž€#ād7NÖ˛ģ}ŊvŽ€#ā8Ž€#ĐČp˛ÖČĐÕwGĀpėFĀÉZvˇ¯×ÎpGĀp9NÖyēúŽ€#ā8Ž€#Ũ8YËîöõÚ9Ž€#ā8Ž@#GĀÉZ#o@WßpGĀp˛'kŲŨž^;GĀpGĀhä8Ykä čę;Ž€#ā8Ž@v#ād-ģÛ×kį8Ž€#ā8'kŧ]}GĀpGĀČnœŦewûzíGĀpG ‘#ād­‘7 Ģī8Ž€#ā8Ų€“ĩėn_¯#ā8Ž€#ā4ršÔ¤ū|đAMŠsYŽ€#ā8Ž€#āŦöÔYÛ~ûíW{0GĀpGĀpj_­iD]ž#đ˙흌UUĮ?f`č(ˆXPhdģY…ĩIJĢ&ŽŊŘHlQŖŽ=ÆXb‰ŊÄ{×XÖ^0jėŲUcĮ‚FĨ( 0”ßy|ÃĮ›ķæ=đÍ ĖüOōæžûīœsĪīŪĮũķsī¨"‰ĩ*ÂTS" " " "PmkÕ&ĒöD@D@D@D Š$ÖĒSM‰€ˆ€ˆ€ˆ@ĩ HŦU›¨Ú*XĢ"L5%" " " Õ& ąVmĸjOD@D@D@ĒH@b­Š0Քˆ€ˆ€ˆ€T›@E/ŝ4i’]|ņíÕî[퉀ˆ€ˆ€ˆ@§%0Š~ûÆą*;ūŠÄZ˙ūũmė6c­K—.‹5¸`Á‚fļÅwÜĮˇą{Ĩ¯MųĩøĖ7߯HŦÕÖÖZīŪŊ›×–J.ŧāŪ,Ģúå…o3hÁ ~âWüŸŠpy”ÍęúŅõŖëgņ`DŲ/MpĐ÷GߟĨũū ¯*IŠĩëÛˇoj/^”ž÷-ž÷m´•Ęį|s6Õ_Ä7˛ČąĘŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ubžļļŨ˛Š"ąVSSk={öLSžÅAŽ(ŊŒ­'Ę|ßķŅ_õÅ/^~čú)ˆ<<yéûŖīOŧüŅ÷Gß˙ˇA÷߂ņīFüž8#ļíĨ_jjæ7ö>Ch1U$ÖhÁčÛhķŧˎÅöâ:ĨüJŲUŅy(f÷ÅoņéŒČŖT^ü][‘QäŌR>–ŠžŽ?ŽOņz(•Į×Ë|Ģú‘GŠŧø-˙׏_īĨļzuG)2˛‹€ˆ€ˆ€ˆĀ2@@b­č$ŧ÷Ū{vË-ˇX}}}QIÛíΞ=Ûx]ĘŦYŗūT§ŋ˙ūģ1ž)SĻüŠv:rå~ø!1š;wîS|—™*ˆ€ˆ€,Š§A—ĸíĒTay—]vijkđāÁļíļÛÚĄ‡ÚdĢffâĉöĀØ^{í•ÖéŅ6ĸŠGÕė&ÛÖ´iĶėÚk¯ĩ—_~Ųēvíj ļÅ[Ø1Įc+­´RļNą‘ÉúBŌ—_~i§vZúlˇŨvÅŽËÄūI'düqĶąŦ˛Ę*6jÔ(;ė°ÃŦ_ŋ~MöÖĘ<˙üķv÷ŨwÛŊ÷Ūk+ޏbŲn–7že$ežĀrYĢŠŠąŨwßŨŽŋūz[k­ĩėžûîŗ¯žúĒUāŌW\°˙ūûÛe—]Ö*}7zūųįÛoŧa]t‘=÷Üsvå•Wڄ ėœsÎąųķY„Ørēđ “Čq¯6ÚČ}ôQÛzë­Ũ´Ėmá=`Āģ˙ūûí†n°vÚɞ~úi;ķĖ3›Li̓æüÂh…V(ÛÍōȡė ä " "°ĖXæ#kNČÖÚk¯"MožųĻMŸ>=ąŊúęĢíwŪą>}úØGaEBđp#fJ‘ČÔÍ7ߜ„Øgœ‘ĸO§Ÿ~ēũúë¯vâ‰'ÚŪ{īĄ÷ĮöļÛnŗŠS§Ú[oŊeG}tꇩ/Dԇ~˜Ú:đ›ՋmTš'ēôŅGŲ6ÛlcoŧqŠæ­ŋūúi,ˆ—ˇß~ÛFÄ‘Åɓ''!7fĖCpPĄG4ލãyįg+ÂoܸqŠîˇß~k×\s}öŲg‰ÕÎ;īlûíˇŸ!˜.¸ā‚äO§5×\ĶN=õTã…Č­5fgC˙ˆ%"[Æ ŗ¯ŋūÚ^yå•ÄD9ŋũö[bC4Ž÷ū}ōÉ'vë­ˇÚ§Ÿ~šöĪ:ë,[oŊõlƌvĶM7%DE7Ûlŗ]|øá‡íąĮŗ8ĀîŧķN;á„ė‹/žH6Î)¯§!ĸ×Ö|ƒļ" " ŸĀĖ™3­W¯^K4Đå"˛Æˆž˙ū{ģįž{ėŽģî˛#FQ#7_D΍7Ūh[mĩ•]~ųåiŊ7éëŽģΆ ’|h1ãĻī븘fũ駟˛kÔöŲgŸ$˜–#ęEzüņĮíÕW_ĩĢŽē*‰ŋÍ7ß<Ų˙ė ĮˇéĻ›6EŅˆĻąŨ#‰ëSO=•ėcĮŽ5bfäȑ‰ ‚Ģ­ļZnøĪ™3'åĪ>ûė$N‰PîšįžvĮwؓO>™Dņ/ûîģobJģ¤Ösj|áÎãEl›1ûēŊK/Ŋ4‰VÎ1kđyä‘T ÷ķĪ?ÛC=dø0fSÉ\D+ëâ$ž Îīāƒļ5ÖXŖÉæ‘K/‡{[ņM§?" " ž÷!–Z-iZnÄŅ„ĸ‚ˆŅŌK/Ŋ”""O<ņD*cM$"qÜŧ_|ņEģâŠ+›æBđ!Å|2„?žöĢ{÷îMõ‡4Š?ęp īžûŽ Tū7ŊB“%ŗˆ’Ģ”#}MÛu×]íđÃOkÛ8ŽēēēôĄ>Ņ0+˛1H4ލŅĒĢŽj{ėą‡uëÖ͈RzZyå•S4ŠHęũōË/ЍĩÆėũol$Îáë¯ŋžÄ&ëų8˙üo„kD¤õĮLQ3ĘũÅÍD×YgÄˆ)ÖáÇ'ÆÄ‡܎;îhlvū)okžéāôGD@D C`ÖĄÆŊ{IĶr#ֈr1B„ø2͘DExđ€)ŧSN9Å$ĻüˆŽ!bzë›ožiâãâhŪŧō/ŖŖ’û#v˜vE¤1uxÉ%—4ĩųg2C‡Mՙé]’—“įXxzŅE Ķŋ1ųąFŒ"<¸ā尌ãGđŅĻG™ŧ~kŲÛ/Ūē€DŒå¸#įøČ#LQAęuÔQI¨q {ėąöĖ3ΤąqüŒFŒĩx<´Į¸Cq˙ØÛ’oq˙ÚčXj>ø`jņž[é([k÷´e&18ĸ$tPZ‹ÄT 7]Ö#]aÍĶ;ėÖ,!B5~ūųįiMS ˆīžû.‡ČĶĒŦyBxĩ”eLĮš0ĸMlLģąĻŒ'.Ģ‘˜ÖåƒXc:’Déĩ×^KQĸ8Ũʔ(eüøņITxĮE„‰˛â„ØcM‘*Öųąå!L9–K­5fī—sËôãûīŋŸÄī|Öî­ģîēļÉ&›$7ÎSŊ[nšeŠbdûLwsÎáÂ5ė˜ŽĻmĻJc*%Ōܧ­ųzŋڊ€ˆ€t<ŦûŽB }âiūÂ|Z8YčæfÛ0čĶŖ ÖĻÎ\ØZŗęmkā&Ë+5ž}öŲôd(k×x­ĸÃפáIBϏ˜ĒDdq#ß~û퓠ŨvÛ-‰-^kA8ŌŖWšŅ°n5PŦņbmkĄ˜ŽcŠŅĮâũj$Ž‹§>‰ž|ōÉÆÔ+ãBŒüņ‹uÁ˜Î=÷Ü$Hˆ&˛žŠÄô%C°‹rĻ9=5Ŗ}ÖŪņP‘#^‰âëšÜ/ˇm­1{_<ÄqČ!‡¤ķDôŒ‡x€ˆ"“h)į€)8—ˆSĻ2ÚLy3ļ 6ØĀ8W¤ãŽ;.­Aä! üyhŠđJS[ķ­ô¸ä'" "°| €Â:k´Á_ŗÆ=4eFA_ čĶbėĖē4FYSbˆäf~ëøéöđ; V͍Ųî×ĪzÖĩO¨uJÜ@ųXËD…‡8^„ eėaCä`Įī?ūH7snÚ,´'‘÷Š2ü¸ŲSƘ8|\ųâˇ}ĻÖ(ŖoÚå=`Ô+žfK,厅ã ŌÄ;Įč>8N>ŦUã5&8Ž 6Œ—ÄqÁ‚Čc'ąĨœsĘz6ÚįâáiJö õœ)õ"ķÖ3ũ—äcäXũ\c§œãfŊ"ëŌ8NŽ›ąąÅ—ãuN”ãĪõ@[ŒŒƒŸ[ڎļöâËq(‰€ˆ€t,ÅB Ũ@ĐĮ…ŖũוĶŦĄq5Ö^›uŗC˙Ö/é îyÜĮbj1˛ļūęĨG˜n¤š6zE‘šØHkįã͕ž¸ Įäb…tüåō š6OžwA€8ō„ÍíØŧ.Bäe.’ąŠ\<1Ĩ‰ôąÅ.Ø[,ĮŽÍdd‡rR3mĮv؏õZsĖÅũŌwqâp.g~,øøuã@ģ\ėœ7īƒēą>mälm͗ãPč8*j_ũܘX(Mö)ˆŗb‘æD˛b͝‡îj=ēÍļY­>žĶnbÍļ3m ʼnķ›ö‰)UŸ€øVŸŠZÎF€Y ^+æ´\D &ĪM(Ėö1{9jhVŽ5Ą+9IʍĢg]m5Ŧ öŪūrŽMünQĒŠeڔĶŧūJ‘6í¸“t&žäDk˜" "Đ f•ĩĻĖŗ—ūWkŖūb6°oķŠĪxxYą†PķĪ#k­{×B”įęgëmÆėæŸØ ō­K qkŨ;WëâÛšÎˇF+" Õ"PA+Ū÷~ĐQ<:3ÍZ6ŽÖļG„šë.÷‹ÛėܰX'Äú)Ö =ũAŊŨūzA× î_c˙ūG/[ŊaQxlLy<f( |ũ4­đ{ß˙9ßöŲĸgš1cŊš?\€p‹)+Öp@ŦบEÜļk_˜ko}]h=—Lũmxũ}D ]Yĸ-U^D@D@D@œ@ũœé!MÖūŗ¤ĖĶč!smܘnI¨ņëŅk¤˛b '"k<9ČƒD×\°=ōŪ<ûΎ/R|ŨÛåũ ũ{wI¯ø ž’ˆ€ˆ€ˆ€tvŧ§vōÔųæ/ŋ…KËöüëlŗa×&ĄÆ[x{¯Ô*jÔiYÈXķŠPĸkŧúÁƇŪøOģÚÄÉŨ;_$Ú¨§$" " " "М@÷Úų6j­Ûixƒ­6 .ŊŽŠˆBÍŖjĨÖ­•|V” (<”Q6>¸ ×0[wĐûå÷zûī]íˇ]lJ}MŸUŗ˜rl~˜˛ˆ€ˆ€ˆ€ˆ@į @8ĢWŨÔgž­=pž 4ßz÷āåúuI ąFÍEZЈš“*)Öpˆ‚ ĄmĢÔ64>j:¯QÄ~Û˓“ūˆ€ˆ€ˆ€ˆ@''ā‘2ÖĸÕÖ~E†PãC@Ė*h UVŦŅ8â+Š5ņ}Ļ3ִŨ>mPPčŦĐK¤¨›\;!ĐĐPš¨š×+æ–kŪAą`‹úĪ0IŦ#Õžˆ€ˆ€ˆ@g'€frŨäËĘ ļÚχ âôg)ĄĮ’bB*FÁæŌ™‹4_ˆŸĸjPSčėĐLūA”ŧ Nä[J-Š5oĀ›7L‡.ÎâļĨŽT&" " " ‰€ëĻÜÖ9”jø•k8yCQ´‘÷ķ-ŲŧL[čˆ\3ųØ|ߡÅvßoi[‘XķŠ;*g÷rmE@D@D@D ŗ(ĨŖĘqY"ą[Úcʋ€ˆ€ˆ€ˆ€´L đëė-û¨TD@D@D@D HŦĩxu+" " " •XĢ„’|D@D@D@D HŦĩxu+" " " •XĢ„’|D@D@D@D HŦĩxu+" " " •XĢ„’|D@D@D@D HŦĩxu+" " " •ø?Čų2V?|T~IENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Export....workflow/Contents/document.wflow000066400000000000000000000160671445560650400315570ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx export --vcs=svn "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{10, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Ignore.workflow/000077500000000000000000000000001445560650400246025ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Ignore.workflow/Contents/000077500000000000000000000000001445560650400263775ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Ignore.workflow/Contents/Info.plist000066400000000000000000000011671445560650400303540ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Ignore NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Ignore.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400303005ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Ignore.workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001106631445560650400327400ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëUiCCPICC ProfilexÕYy8U]Û_ûĖŽs Į<ķ,ķ˜yžįšpĖķŒáˆ‚^'øÛ9ūeŗæíŖ÷—đ 00ūmƒ DīöÅĪ9_P˜éîāžŠĀ"á:H3  ôūĒ%/ ĀšXX‚ĀŒCāap›0“˙˛Ķũ‰Á¯v~pģ÷H^°mĖß}ūî ÷ųĮgđ†ņ9îcWˇ;ē(÷€Ôúücąëī×h¤kĨßIoũJ%‹R@é ÔQ(@F1ŖØ$JĨŒŌFiĸÔ` 0¯aĪ~Ƹë?¤Ņ7ölXŧǃ?ŦŨũīž´Āá—uĀßŋ˙c `hšeųĪˆö9ŋ膅ĮGøųG“ĩá7×G‚lę%%A–•–‘ŲU˙ŋ)ģkÖīÁŽÚüZ‹ æádūj¨-€E˙# ˜ öŧ˙Č:āđ fÔ+&2öˇ?Ôî ¯„´p„˛nĀDāį, áĩQ č` ė€3pƒãĮŽÁHA HŲā$8Š@)¸Ē@h- tƒ{`Œ€ 0fÁ°VĀ:؄  !ˆ â!qHR†4 }Č ˛œ!Č …b Dč” åAEPT ]‡Ú nč4 MBsĐ;č ôDŒ.„bBĄ0EØ!ö#üˆDââ,ĸqҌčF &ŗˆ%ÄW$@R#™‘ŧHI¤2Ri‰tAú"#‘‡YČd9˛ŲŽėGŽ!g‘ËČī( ŠEFIÂqj„˛GyĄ"P‡P9¨"TĒՋCÍĄVP?ŅD4'Z­Š6F;ĄũĐqčttú ē Ũ‡ž@ŋA¯c0fŒ0F c„qÆbbr0%˜Lf3ųŠÅbŲ°âXuŦ%–‚ÆĻcĪa¯bī`cß`7pÔ8œ,Îį‚ ÅĨâ p5¸NÜcÜ[Ü&• •*•%•7Uü4~•šššZ…Úš:€ú0õYękÔ÷Šį¨ŋH1‚.a!†p‚PIč"LV‰DĸQ‹čBŒ&ž Vī_7hh¤hŒiŧi’iŠišiĶ|¤Ĩĸ¤ÕĻuŖM - ŊA;LģLGE'D§KGĄ;DWL×F÷”î+=Ŋ Ŋ%}}} ũúE–$DŌ'y“ŌH—HwIķ H~]/†#  } o1ŒÂŒÆŒŒŲŒuŒCŒ+L$&y&ĻLÅLˇ™f™‘ĖBĖÆĖÁĖšĖĖO˜°pąhŗø°d˛ÔŗÆžĮÖaŸCĩÃ7G=Į<ĮY§=NINÎėÎέ.X—+._]õ]ΏžŲ§°/}ߓũÂûėāÆîėv۝֝â~ÃíáčQãąEऔSžz{ž÷\ņŌõ*ôZōÖōÎ÷~įŖî“įķÖWŨ7ĪwŅOŨī´ß;M˙˙åŨ€ĸ€ĪFĨß‚,ƒ*ƒv‚ƒBp!!mĄ¤Đ ĐŪ0î°aŖáâáéáŗĒg"V"M#¯DAQûŖZŖáäp0F$æhĖ\ŦFlqėFœC܍ôB ƋÅgÆŋM0H¸|uĐë`O"obJâ\’vRŲ!čįĄždūä´ä7‡ WĨāS‚RĨJ§æĨŽq<ŌžÆ•v8mū¨áŅÚtšôČô§jĨĮPĮŽ eĘežËü™åõ0[:ģ {+Į+įáq™ãgīœđ=1”Ģ˜{á$ædčÉ'§4OUåŅį%ä͟6?ŨœOÎĪĘ_;ã~æA|Ai!ž0ĻpöŦŲŲÖsįNžÛ*ō/š(Ö)n8Īy>ķüˇī’Į´.ԗr•f—ū¸pņY™aYsšPyÁ%ĖĨØK ũ—•/W_aŋ’}eģ2´rļĘĻǎZŠē熺&ˇQSûîęžĢ#uzu­õ’õe Ė Ų×Āĩ˜kī¯{\ŌhÚØsCųFũMÁ›į›š˛šĄæøæ•˙–ŲVįÖŅ6“ļžvĩöĻ[Rˇ*;x;Šo3ŨÎíÄwĻuîÜI¸ķĩ+ŧkšÛ¯{žĮŊgęŽĶŨņ^ëŪĄ>Ķžû÷ îŨí×îŋs_ũ~ĮÕm•ļ (4* 6=RxÔ4¤8Ô<Ŧ4Ü:ĸ2Ō>ēw´ķąæãî1Ŋą{ãÆãŖOėŸ<{ēīéė3īg‹“Á“ŸŸĮ>ߜ:<žÎzA÷ĸā%įËōŅ™†YÅŲÛszsƒ¯l_MÍ{Í/ŊŽzŊõ&m¸Pđ–įmõĸėbĮ;ƒw#ī]ßŋY _Ú\N˙@˙áüG‘7?i}\qZyķ9ōķǜUļÕĘ5ųĩž¯V__އŦo~ËÚ`Û¨úŽüŊ˙‡ãˇ›q[Ø­ŗÛĸÛí?MNī„ėė„S")ŋr$\#|}øR sg˜;Œ€īúÍ)~YĀt‚m`Œ„ķ_!`į§×Ā7HJƒ&jˆjxŊ€AuŖŨ0Ķ‚=„ŗ âĸÚĀĪP?& Ō<ĸ§["á$͙R˜¯˛ŧ`ceˇāČæâĻį1'įđNđķ ø Ö}Qģ+AÔ—JÜĶ%Ŋ-k('Uგ ˛ĩJ˛jŊڜ:Ŗ†ŧĻ•V’vĩN‡îŪŠĩ!‹¯ą¤‰’ŠŽ™ĩšŗ…ŸeĒÕ9ë:x%xiˇâ™D•]l\#ö%ī?áVåŪé1J™õüâō!ų øÉûëX:y„Ä…&†e„gEäEæFŒ>“›WxātüɄôƒÉ‰1I҇“)‡R SÕČ§IåN§MßÉX=ļœ95Ũ–SwŧųÄėI–S†yņ§KōĪėJŸu;—VTWüĒ„xAŽÔãbNYSųdâ˛ČķʘĒãÕ 5CĩęhëeLŽy^oĖŊQuŗ¯i´yąågm;ī-éÛæwŧģÂēôš›×{ž¯ö^KĪũ;†N , ž~46ty8fD”4:ũ¸aėā¸ÁibæIũ̓ĪL&Ų&_?oĘ˜ļ{!đbķe˙Ė…Ųˆ9ŊW,¯>Í÷ž.}“°`˙Vf‘~ņĮģ'ī;–Ē—OHųû)hÅ˙sĀ— Õøĩœ¯ÕëĪ7ž{ūŨ ūéļŗŗ'0{f‚`/p‡@5˜‚3;Kč4…FœBü@† ßŖbŅt5Æ‹Įā Š‚ņ&Ô{"DfZ.: z5’-CcS%ķ}–u62ģGgW3÷ 2¯Ÿ+Ļ@›āŧ0^DZÔ\,Dü´Ä-ÉįR_ĨeTdåÂå‹šģ•ž)oŠ2¨ņī•S7ŌđԌƒŖáŒN™n•Ū ũ;ƒ†SF‹ÆĢ&ßMˇĖļ-P–´VŦÖÜ6ŧļ"vōöĘŠŽN&ÎĻ.&Žvû÷[šŲ¸ÛxØQ\=ŧėŊ},}ÍüLüu4Ղä‚ÅBøC9ØÃIt‘Ø(DÔVôZĖĮØˇq3&ã'<FĖĪ2ČöÉÉ>~íÄpî‡Sø<…ĶųQgŠ ē įĪĄŠÄ‹-ÎĮ””^č/ũXÆXŽrÉ­"įr˕é*DĩTGmÎÕļē…ēk×Ŗ/ܸųŖyO‹_kA[ī-¨Cęv@g靑nLöŨ”ŪŽžĩ~ūûĘö>ÔPT|¤8¤8Ŧ8"3*öX|Lxœ{‚ũ ãSÂ3ĒIhrûų§Š÷Ķī^ŧ{97ķfvfnîÕėü‹×ķo>,lŧŨy‡{Īž$ĩŦũÁöcø§Ŧ•ĒĪ_>¯ņ|5[OøVˇąđƒs˙Véöâß_ķô0ߒæ0ˎÁGˆr…ķö„â b )ƒĖGnŖBP¯ŅžčEL8f›‹Æ=  Åŗā{¨Ŗ „%b=M4­œGŽŅWŦ…™ Ļ9æ>–JÖ ļ@v;]N!.,×:÷žAr#o1_:¨€ĩ ĻŸ0ZxCdB´YŦDü°„줁YjkĪ3éz™#˛.rbōXų§ W(™+ +ī¨L¨VŠ%ėĩP×@iLi^Ķ:ĻíŖŖ¤K¯ģĸ7¨Ų ŅĐÕHŘɸ“É}Ķ2ŗxs[ KŦå+Ģë›h[c;Aģûg×3ŧœ]č\\Û÷åî÷sĶvgw˙čŅM)ô ķŌ÷æô^õšī[ėė¯ĀīõŊAį‚cC BšC×á}Ŋ>âh¤W”f4o ˆ™í‰+?ī P,‘>q#éåĄŪäēÃįSޤFqKŗ>Ē‘.™Á{Œ!ų#ëSö|ÎŗãŖpüôŸė<Ք×pē1ŋáĖՂŠÂËg/ž+-*/.>_^rņBeéPĒ\ūĨâÄåÎ+KUôÕ*5^ĩĮ¯ļ×-6°^3ųCãMÄf–ČÖúļOˇd;Üžs‡ÔÜ}ë.worßĮ~īûĶĻæš÷8f\˙‰ø3†į‚͆/“g?ΟX}—÷Áúķđ†Ķîü˙>[ÚŨ0ŠœuĀ™ kCrö Ô +"v*!Å ¯=ŌÉũ{˙`ĒđʑJ`ž8Ą ˜†Cų0ߛA`R{Dâ2bņɏ´F&!k“(|‚ā3ą!4­ŒA_BOa˜0V˜lL?‡5ÄÅöãˆ8\nžJ’*šĒĪ„÷Æß ÆRģSˇÂĖ'„pŸ(HĖ&ŽŌ8Ō´ÃlĻ„Ž@wn…>”ū)„´ÂÍđņé$3 s‹K;Ģ)ë [,;žŊ‚C›c’3œ‹ĢÛ™{‹§‚lIūÉ[ÃˇŸŸÄß'įú߄ڄ“E DŠE'Å*Äã%L$E¤ĐR3{ú¤Ģd˛dãä|ä÷)Ø*Z*é+¨ĢZ¨yė PĶHÕ,ĶjĶžÖų¨GŌW1đ3Ė3Ē1žlrŌ4Å,Á<Ü"Ö2Â*ÂÚĮ&Ô6Ė.Ų>Įá¸cĄSŊsË¨ëž7nwuGJĒgš×¤¯ŒŸˇQĀXÖ 9:ÎŲõ3Æ#ļų1>4a$Q!éR2ũáC);G‚Ķ>¤‡d,gúg}Ę ?ž‘›vJ$¯1ßôĖDáĄs†Åv%ÁĨGËZ. _AU)×D\Ŋ\?í†oĶ…–ˇí{;ĸ:‡ģ‰w)}-÷Ą‡ÎƒĨCKŖęc™ˇž‘ž[O§ŧėũ2ĪōÆč­ÍģØĨC’>Å|vYåY[X?ˇ!ņŊr“jËfÛíįá_ë‡ |žUúĀgˆ2†ĸĄRč!´Ž #Ė`_‰G"‘˛H 2Ų3rI”ĒõE렓ĐčL<æ6`õ°™ØĮ8Nœ?Ž•ŠŠĘ…Ē–ę'Ūæž>ÔŨAB áŅ”ØNCĻÉ Y§  }AgM×G¯J›¤@jbPcčf4bereZ`ŽaÁ˛\`Uf}ÂÎNÍ^ÃaÎąÆYÄĨÁĩÄ}Į”gƒ|7‡oŠŋLĀSPXpYčšđaKQ.ŅobCâW$ŽIúJf—ÁČŦÉÎË=–ŋĢĐĨxS NCUUÛÔ:÷ŪS‡YŌ{m”Ž°ž†ū>ƒÃBŖ:ãF“ĶZŗķ6‹~ËQ̧Ö36Ÿí {nIGe'{įh—L×ō}wöĪšc<¸)Ļž^ĮŊoøLûaũ|Īõ  ķ /‰xĸÕbbc¯Į}‰WNˆ8X—øífrúáTâ‹´˛Ŗ_2¤Žee>ÍæÎ‰<>K>uĒį4mžį™žBŪŗEEZÅK%EĨîeLåc9WĖĢĒßÖ6Ôå4x\WēÁys­yēĩ­ũfGIgJ—wkīŪ{ō÷ɉ6†gFûƚ'ĒžfOO™ŧИažũōjüuŨBęĸÃ{îĨĨˇ>e|6_ĨY{¸~fÃüqŗc;ô×ü̧HM` ’ƒ" Fh Ą€8€¸D ‘Į‘OP<¨`T+ƒvDWŖ71˜Ë˜ŦöŽ…{L%OU‚Įâ#áŦŌŽē— Nh%JoĐČĶ´ĐęŌĐšŅ­Ōg‘$Hƒ ąŒŦŒ™’˜Ĩ™įX YmØŲž˛ŸápæäįüÂÕÎ}ŠĮ‹,ĮKÍģĖwŋB C0LČUØLDCTJL\œO‚_’[Jd¤´’Œ‘ŦĢ\˜|ŽBĨâ°Ō7UCĩ¨Ŋuę šÜZû´‹ufô$ô“ ƍ؍ŖMÆĖÍOX,[ŲX_ĩeŗK˛_t4vjsásÍۏsKp_Ĩøz>÷ļõöŗđŋ¨ÔĸÚŽŅī ũąqcņî īã“6’3R8RĶ gxûžu>Göøxnä)B^{žÍ™íÂķįHEąÅS%Vē/*–U_âŽ(ŋ"TYį 7Ž*Õu4h]ëk4ž1×ŲŧۚĐļ}ëômÁÎĒ.ąîĢwĨzîI÷_}@ķ0gúQäĐüˆõčĩ1šņā‰OŸž|2Å:íôâė˧ŗLs6¯2æë_ß}3ĩ°ŗČôŽ˙=ßī2ĪŽlˇ?Ŋ\éü\ōÅUfuuíúאuōúġ˜ ÂFÅwųīw~˜ūx¸Š˛YĩŞ•¸u›iÛsģ~{ķ§áĪ“?'wøw‚wšwį?ĘWNvw÷A>~|šŗŗ*Ÿ_æ°}jggŗ|ggûL2āo ]ÁŋŋWėcā3÷ķ™ģčîõĒŨÛŋ•˙A4zXąî8” IDATxė|TÅöĮOzGETPé ö ŠŊ7lX°?{īžŋŊëŗ÷ŪžĸĪŪ°`ÂĨ÷ž„´ũĪw’ŗ —Ũd7$Kgōš™;íĖĖoæÎüģYS§N‰CĀ0 CĀ0 ‰@v,•Ę0 CĀ0 CĀ#`dÍ:‚!`†€!`5#k5¸qŦh†€!`†€!`Yŗ>`†€!`†@ FĀČZ n+š!`†€!`FÖŦ†€!`†€!Pƒ0˛VƒĮŠf†€!`†€‘5놀!`†€!`Ô`ŒŦÕāÆąĸ†€!`†€!PĮ 0 ęC ‹III‰üõ×_ōĪ?˙ČüųķĨnŨē‚?&++ËÛæ^=ņxúöÉÉIīŊ7ËUĩU›†˛sßļŌ˙´ŽŌ AŨåú‚wTÃ?ëöŧ­ėxŗ:õ÷jx„V™Č,ûšŠU†Ŋe\‹PâQ:t¨Ô¯__öÚk/ŠW¯ž'i999ĩ¸öĩģj´­ļ/öĐQsĨ}›Ļ’íH7ŧÛũ÷’gŸ}6NÖđ#>ļ^֟—a&ĩÕĨŋWåŗS“dŲ2hMj +K­A€­¨¨H k[lą…û‹ÉŊ¸¸ČO„Äa 7{õ6ÔöĨ]į.‰ÉŧÜ"ÉōäĻÄĩi)qA—†žíķߖ>{ā]ŽÉÁ‹9íšĶ°9;¯0KzîŲIŪ}ü9ú¤NR§Nß'ĒúAĐōVÔɡ°°Hū™:ÛiëK ö%GČrdɒÅōá‡K˙#–™3gģ~ŒúĐÕ§¸DZ´hK5ÆÖ¯kĪsŊ:öwúqm3FÖĒ E,X šššŌļmÛ*f"ŌE€‰hƌōúë¯Ëgœá“3YT§!ĪéͧËoŧ‘0O ŊæĨM›6ޏû ĸVPXā´lõü¤Ė@¸hŅ"yéĨ—däȑrꊧJ=âu¸å–[ŧüæÍ›Į žÖK'Äęt—W>4/ÔƒMyÂō†å›6mšŧúęĢrîšįúø„…áxŽ.nę .qÚxQaLr œjÍ­Sd;ĸsëžÚũ~ûq¨\{ŅérĶ#-ĨįV;yœ\LO‚ c[ęŌ6oŨL&ÎĘöō ;āPÕĻĸūX§NŨ8ū .’ÆæIîHn~žÔŠÛP ō¤AŖFō鐏dĀq'Jī^=dá’BYš_$7’QŖFyĸÖ¨QÃxŅÃūįĘļ/2žųæ™5k–xā+ā´˛ō-})ÁgŒâą:ö÷ŌÔŽ˙ļ Z‰ö¤ķęuÎ9įČŅGí'Ųž}ûÆũ OרLėúÉMũŌ•U]ņĩ<؝;w–É“'Įë\]y&“Ģe!|æĖ™ōÜsĪÅŖ†aqĪrn˜|S1Ą\&hžČĐ8K–,ņ÷h_ŠŠ ËŽ")rš‹bGۘėÉ÷ņĮ—_~ųŎ9{ۚ5k&ųyų^w˙ũ÷ûC %NsAü¸†Îšš'ŊˇĢ؝Ŧ|FÍOËãëQ–XŪ°|ĩ'žx"^ŪPžĘ ãSߚęĻž´!6d-¯(&ųŽ=—•HŽ#_ųÎÆoá’|yčÖĢ|ˇzøļ+eūâ<ÉuūÄÉ-OÄņYėürš5”Å‹ĮûNØĩ?1BļÛnģxüS1šžŧū¨xƒ9×Ä9Ųō×Ė,3ĩPŪ{į-ųgv]ųú§‰’7ētÛŦ‡ ũæ7ųáûáRŋAC§!tĨČjāŌ-ëŸÚžČZk­ĩdŗM7ķæ^ŊzɓO>)?˙üŗlļŲf>/ߏ~ÉÚ; ˙á‡äƒ>hyÕ]]ĪÚ,?Ķũ=•>Ŋ&Æ1ÍZš­ß˙ŊŒ=Ú- |čĨäåå-'¸ŧTÆ<øāƒ~“Ļ]Y*ceí°îČbālÚ´i\lM)cǘk}&Nœ(‡z¨Ÿ@´2ŠČĐô‰ęÍÄSPPā—ĩüdãÜn–õ<ūEnbÐö‹/ŋ”Į#Ũģw÷~cƎu“ËQ…>ŧČĨ-td/^&´R>fé?ĻėĒtŗôĨō(ߗŽ|Į”•2:’Â5š?qšĸåEF\Eâō‘§éŖōjĒģØä×&ԉúäՓ§%Ër˚%Ųn‰´Ø-:xzZfN$õę7pödywГ˛ī1g‰‹áHĢ[:tWna‰–¸=M ëĘŌĨK=a‰ˇŗĖÔĐ?>ūøcuz›đ0ūrŖŧūHčČ‚ė,uũsĨųNŧ@ –Ė“ī†|-u×Ú]~üü}9l÷Me~ŽČč1“dÁüš˛Qį­Å2kîRYģevéžL—¯ßŖåęĨåé嗤cĮŽĨ%rm~Ÿ}öYiŋpžž7šG$ÚH¯ũƒ{Očœ>„'ęĨ™9 U~™‡šËđNLöwm3ŗWDĀ4k+b’’j~4Küņ‡ä4hā'ÂîšįŲe—]äØc•áÇĮũûõëį—ŧvÜqG¯i ÜH. oÖûíˇŸŸä¯šæ?0Æ'˜,ˇÚj+ŲyįåÛoŋõi>ųäA›Į’Ëq*'´˙ûß˙ ˛ūõ¯ɑGYnēŋ˙ūÛk ŖųÜ}÷Ũ>ßãŽ;N~ũõ×x>–Ī:ë,ųâ‹/Ÿūy\fXödqT&å ąĨšlvŨu×°xėžûî^CAû°|}Ųe—ÉėŲŗeīŊ÷–7ß|Ķ×Cķˆ–›Érûíˇ÷¸ĢVMķô ƒ20ą° rļtŠ#hh͜ūzĄ‰úūģīäúë¯úÆnģí&ũÜEš ˜gs?nÜ8_Æ>ŗ[oŊ5>šquĨßЧnģíļx|̓ô¤=øāƒĨwīŪ˛ã;øhø.NŪķĪ?īûūąHųž++ZdĘ1á¯ŋŧŦ-ˇÜŌįųŠKďŧ°ŧīŋ˙žĪo'WާžzʡĪĶÅí¤I“<Ųb"kܸą<üđÃōįŸú%EˆK ¨,ąé˛ƒNëÖ­ũrY#ˇoĈn`¸ęĒĢ|Œ+Ŧ ûĢ0ԅ˛0°A pÁyL”Đ@Ūyį2lØ0ŋDĸ¸–Ų[Ņ8:‘?~šō°GŠŧ Į ‹û̝žz9l´Ž_|ą'Ž´ņØ#tĶM7Éa‡&´ &Yš ģüōË=–]ģv•Į{ /Ÿ§ŋq˙ŧfĀ•Aû„ŋ|ˇ÷à^ā4(‹ũˇÖJdĀ€cũ„ )ÜcŨ]ŧˇ\´šßĮļtiž—ŗxņOäoŧņF7Y”ŊÜsĘŠ§øO‚lšåV„uōÉ'ģI{'?æŌ..{uĻĨZ,ČŨÖ[oí^žt„{¸'E_~ ÁÎö/Lô¯ŋūšĶ”6÷éŅgP-“åc?Ķ-NÖ6ÛlãؓŽ,˙ęe•’õŌ4ZŪK.šÄ÷Ž]ēĘSO?åņ^°`Ą×ĸ€ã A/ģg ŠėãÛ.}ú¸>XWĻN&?ēÉl×[¯­ëwËon/ß;īŧãƊ|YŽ~”ßkeü?ÂË´vÕčĻ%1CĄ#âE2eqi>×i‹˛ęHÚ5ˇo͝÷Ĩšã†rûŅÃũCŗ†ã"wŒtFžkކuœ_)~ØQƒš7÷Š%pž?^Š^|ņEŋ4ČË Ī †øĒq å&ꏅîebąsx8(°Ø‘›gįģēšŪ*uš6–3§Ë†mˆíדE‹—i¸ürgNŠ[Į+č~54ˆ˜§Ÿ~Ú=ë-ŨįIøå~ž7ȋ.ũ­/¤úĮB>q/DŧÄôîŨK&LøÛėwDî5×\ë‰û<'Nœ īžûžŧõæ[ōû¨ßåÚk¯u§TŸ“šsįy­ŋ~ģ9­đP×FŽ‘,í?tŒ,—ūõØcO¸eŲ§äæ[nv˜•ørüôĶĪ~ ʰaßĘŲgŸ-ß ûÎŋ$°UáĀråûDîŊī^šá†ëåĄ‡‰÷?W 'ŖúûŸīÚÕØŋŖō]Ĩ2Ūßé3f–GĀČÚōx¤ėbdpģā‚ dÛmˇõÚŪúžyæ7€ŧëK&Wâą\ˆĻÍæÂ /ôD{´S DW^yĨ';äĒ|H d BBzÂU&Z,Œæ!SÂāÜ?ŪŲëBZ&BĘĸéԍKĸ|˜$‘օ2ąˇ Cz´:`öĸtéŌEÖYgšīžûĻĨhe ā5Jō'—h´*ÄI†-a\!Ę­#xQfƒ°ĮC~”Ÿ4lü’Õ‡ oáOdč$čšZ>€ !$ƒ?§KÛČ ėeá*īcøxĨ˙ü°é‰5ËFėgûá‡ī=Ö_ũĩ×6õqDrJ9äŸTąÄAZ4fėõŠS'Įkģ¨D‹vĮЏ›5kîËå=ĘøBX> RčG¨Ŧlw:ôĨ˛†û=I>­+6Úfü{öėéŊvÚi'˙ŌĀ„Æ¤GY}ô1Ÿć6Ŗ~ŌI'Iģví|ēŽ]ģȜ9sÎá‡îŸĩ’’âåļĢ„õņkÁ?ßw2ØßkdÕR#k•€Õw^÷ĐĢÍ$ķöÛîxž›4ŲĮÆ)A&4]TōI§Ä€ÉŌ‚v-ÕĻ›nēB<âĸmĶôČbųąaÆņ< L›l˛‰/áⓃ•ĻĨlŅtm´‘Ī›|Ė5.2ĸu!djl4„ŧŅŋõÖ[^ÛsÔQGųúEĶ‚ƒÖR Ņ9ũôĶm—(ōÄ —o9ĄÅ;í´Ķ|ä˛Q}ũõ×÷õF–b–'Y![Ô<¨+Fëĸ6~ÉĘÍ21u%/ŊˆĪ=2‘5´“—~Ō€8ęÖI„4ÜëēUÍEßž}…Mū`šöÚkû4ht!EhØ phHÉC åc ŦyB¤ qę&>—ēIÖGËnôĶP0˛ÂôhMš4iâå!GĶcs 1} 7m¸ņÆĮķåPG^"Đ´ņŒĐØģE éUž÷p˙ĒÛ žō†õÜ7ĶÜ娍8jîĩj17ņ˙úņ ų}č[žžŋãVũ¤÷ū'y [‰ÛĪ…”ĶŖK–ē”ę%Š!/Ŋ4"Sʆ)~øšh$Œøz 5.ÛĨEãVäž× AiŨf#Š×ķ,ųjŒĶėÍũTö;đXˇüé>[2g–4rÚŅ"ˇė›å4‹úbBž\*%[ÚXÛMmâPNŒ>›Ūáūö#üņS›~ÄX@?ÂđL¨\l.¯ūÄc•€—b^PАķĖh<Â1毿‰į/ôįžą€įŖō‰Å}uwkRLõwĒũ[e#úrŪæH b:1îzë­į5.h° O,•r1ˆi§ĮæĸãoäˆŌēëŽëĩmė)Ï0db3€ąÍ{ŸđÃFŖ1wî\{.Ū°I§iõš\”EĶiŲHGųŅĀE큄…u!Ÿ8jy!,upb4øŖy Ķ’iķķķ} h|ʁÁ’2ĒážÉŸz†q‰l´d`ĢõË>Ņ:ō6ŪĸE‹¸H5gd˛ŒĖ~AČ铕 *oõ,ؐŽ=6jÂō㇛ \i{.ĘŠ“÷ę&>ƒŧN0Ą.ĸÎ-‘;Ö/gĸiÔɏrƒËŊ÷ŪëąTššõc˙K•Čš2eŠ×&”j˛–M~ZFM§åÖ2āÖ%wdQ^–åčO`C<-;Kã`šÆč3q(;i‡V• R†<Í 7ĪmĮžB´sô/­Ά^øé=vuēͧQŨGÖęHc÷ MĘŽĻNSļåŽČŧÉcåŸ_‡ĘĖqŋɖũ•fÎŋYũē.n]iäâ6Ž—ãŽlŠãöŦiŸņ€˙´oŠMĨ˙aôŖ24Ž÷ ü+ęÔ Ü ÜūģŧüĨ2âĢgä‡Oî—1#>öŸœiĐ ž#§uä wØāŠĮn‘˙Ŋôˆ;šœįȚĶhš6Kԇ(2ĩ?aãVŊ×ļW76Ī"Û%ĐÄŌĪĩ——cÆNĨk?b ĶsO~hsé;ÜCÖ¯ ˙āÄ8Ŗũ2ņR‡›}u2ž3 ųĶß ûę̝dˇŨv‹×š™ęÚī2•_ĻûģÛū­€€iÖV€¤bV.zöĄÕ`û  ^\ &P4e,˛¯FTŊgã7Ãy3Œē¸Ņ>ą‰ŸÁ ­›Ņīēë.˙ Ž 6ØĀk;Ø#Ôˇo_ÄzŖų„6Ëa:4.]t‘/+‡øN™æséĨ—ú|Ø\^]˜8ØÜN=Yü(KČ Xáßž}{?ßpà +`‚v ōēá†ú8,÷€2ŖåaߎâPGöÄQ°Ņ:2đŗ\Čr…!„ėį#>?ÅĻc° ūŅrĶ~†ķĪ?ßĮC3tĐAÅqÖüąÁ[ “9¸Æ= áÆŸIE/Ō'œtˆÃĄöFžöÚkž,0Č.ûɈKŨéaZ- éčG$˜8qĸĮ2¨Ņŧĩœø#|šT&÷ėãĄ¯€;˛ØÉÄĄy!‹žÎr?{™đčãŌķŨ9ę‚ mú¸k­ûįîđ ûé+”‡I–˛„åDf&bE}š‡¤5rûíbŲN+햆Ũú ģ˛ĨiŖÖrÄšˇĘS× ”CΞÁŊČĩs˟W—ŽMō…Α“S$M ęHĶ&ü6čR_ ŇŪcë=8¨[ŨŋMGx´?â–´ũY¸ Üž5ˇēaĪ’ŋ`ĸĖ[0YæĖš$šKæHŗØß2{Ö §áÜÚíaëä4pîDėŌ\‡ESŸ–~EūČRŖmĻíŠMŊ4^Ô͸Âō=Äˆį”—ˆņđcU"› äEŠō%/4ŗUöķœĶ‡yiceĪ0/ĒĄãŸÜąŊCe!˜Ŋt9Æ'4˙Čæ"Ÿ0žÖ§6ØZGú÷ÕŲßk^ÕUûmĐ4ÕA›ˆÁ7ŪļXö¤#cįBsƒÆ†AÃÃœČ¨ÜhXčOZNÂĄ#Â(ūh&$uĐÚWYzO:´”MËMūäƒ?ųp¯ņyû ë–UekzuĢ YŌ´ČTš”ųkš5L'ö+A’Ô_ËŖ2I5›<¨ŖæK\ü!–Ú.?–î0ŌĢĄÍÁZ'%Ę^¤/–ĒÔ94ĸõğôäMé#\´†˛¨Ņ<ÕOmꄆK—"ņg/~ĄæD1Ķ<ˆĮÁđ¤Ž*Ÿü(ŋÖIķ§LZFî5ž–ƒļŅ~ĸi°5œøŠō1Z&C_S­šâŽņ4.å‡āƒaˆs´ŅōU—[1Ą-!ü/üÕ\Ú¯•#1ę˜í 8˛ĻuĄ5ßzôv9ā”KáoŽ!kîrŠ1ˇŠčNÉø)ķeúČr~ŋú~¯my€;Xé퀛 Ŗj=ÉSņÁOņIĨ?˛‹<¨ĪĖYŗåØkū’ļíÚģiâ–Ŧ›ģōԓ:NūÂEs¤ÎĖ˙ĘÅ]%šŽįæ.qÍ­įHû8éģM+ßFô#ōϜÚ÷(¯–‡{ åįŌúāGšŖõ"œņƒgSÃˆĢ†úŅ?čGŠļbĄųâ§e‚đQ_Č+˛ąÁœĶŖėɤ¯…ĪÃoŋũæ_ūШŸgøZWÍ+QųĩĖZļÕ͝ÉūŽmjöŠ,{ĩ^1Ė|*@€‡ “ˇ~Āđ")ŗ’ }PņįžKãã—Čh C–Ę x%#Oí0Ÿ¨,Ü njT.nÍGķĀNVÂBؚ9ę¯iq‡ų0ŅcHŖrŧGđ8xûōhúPĻæ¯y)6aoõ×|ą!1š;,7y#Ú\æĘW?´  ōLLäËÅF˜‚¸šWųZ͡^øĄšUY¤ab˛ÅO' l܄Š÷,Ķcc´œØÄĄžL>jˆGš˜ Ã2izdiš‰ē‘Šū‰âčA­qÃr!2€q(eU[ej:ÍĢ:ŨÚn”‡ōĩlÚDš6sŋ uđ9oĮ~)AŠxÅĨ˜R’Æ!W×âúĶtåՑzîĻÁœī]÷Œ×]ĶĒ­'ųFũԝ,ŦŧūHŸĻ^˜F ČnŽvß~ī7ė—Ā*ŨįF0­ęԓ& —w^û#,Í}ßā/ÄĩaŸÃ⤇6BžbEZmcĘĮE?Ōû°Ėę§õ!^8&Č­ždiōŌ~‚ŸúS\.´ĀaúûÔԐŸöcl;ˆ‡[ķÁFŽ–Oķ\ŨŨچ™ėīŠŊŲËX62/ķŗģĐ‘¨á}ÔMXx…áø3X`Gh⩟ĻQ9øs¯ūjk¸ē5ž>dšæŠņB›{5šéՄyā§25\ũ°5 ‹Ļ ũõ^mÍ[mõĮũB™š6W7šÆ˛ĸE͆é5­ÆI†9š%NFōSdL* |äĨų1ĀccÚ&4a]4 Ų*C͆õÕ0GŽ­åÅÖ8¤!ļ†#›øLJŅôĄ›xŅ4šæĢnlÍOˁ_x¯}UĶkX˜.Ė[ĶcĢŠępÍ[å¯Ŋ6{ų\šMŨ…‹¨úXî}t˙ĐĒŅːĩGrrfŽ”v įûū-ĢæM˜†c+&a˜ÆŅxšwEũQąf‰˙Ė3ņ{´Đ´Ņg ãŗ99Ž .äžmįöIî´Ģī3=Ũl6Šöm-ƒúãÖŧ¨—­—ú…u$NčÖ8ZW•;,÷š›pŊ e˛'ŽgUĶø„î‡Z8DĻrC;|nTŽĻÃÆ/4Ģ››ē†eÎT1ŗ{?´ Š" Víč`”Ē‹ˇf @˙`{ģø€&§uīU8Ņ„ƒö-Ō8jO'âéĨáęN„.a¤×I’8š/ļŪã¯ō¸×tęÚÜŽŅôa8ūęæŖņÕˇ^*CŨÄĮ2cBŌk]đΤ!_ō×ĢaãBˇ\č˜~ލŽdŽ8e!(XVŲįÂ͡ôB­å¤Tâ? ÃOÛJëÆ×püÔ_Û^ŨÄÁDķėŌ´*WãQõ+•*ūtŠĘW?l^´ q¤Å`‡u@ŽöGĄũËd¯E°UyUlĪZ•Cj×ttŸKCėaC2û`ØëÂō K–|]'1ĩÁM'ŊW,urĀÖ FmMƒ[—,TBš1Ŋ4ŽĀØ\Ä× 9ÄŖ\LÎZ>M‹;ôSY¤ ËMZŌ¨!œ¸ę‡Ÿú‡rT––AãRF–eÃ˛ĒüLŲ`‰6‰ļdI Í)[ 8åŒ&ŠōŅ*2āC_ā6§›ŅhA ´­*JŸjxĒũōÅR)ûąX¤~¸•”Ņz‘7m@}Ņŗg’=Ÿ|„7y7ė´¯šhÂ_ûéĮ„ņŧ‡û§ũ$,‹ĻÕ0lŊH§2‘žZŽP>÷ÄÃP7ŌĢ!>áäâÉ3Ž;ĖKĶÔ{uëīĩ÷h=ŒŦE1ˇ!°’0Đ3€3s1‰3ą!ŸÉ ™IžÁ?œĘËZ'’ōâč¤Eî5 ļŪkzÂÕčŊÚę¯iԎúĢ;•tŅ8š;†;Ė“{ƒ­÷ĄŒLŨ3i3yŗŌ §M•¤E'úhš¨ {$ųx+„9ČP˛†üĒ2ŠöGŜ˛‘?“´•}ād IDATü0js¯í ōéķÜsŠ,â%3ĄŦŠâh܊Ú= ī5=ųpuGũIMOõĮÖį7Œ—ŦĢŗ˙ęÖßWgŦË+ģíY+ 3*€NLx\h&0,Ŗ0°3øq¯o㊒ĩJĨÖ' 'ŨLUVÛ0$3:y+YЍ\„kßPÍní;UY•™Ŧ?âOš+ꏉHIĸzjŧDaUY¯š&ĢļÖwuëī5­_TUyŒŦU’&ĮСQ&tŧ˜Õā§oæFÖ•ôėU99’7íĖĨmIk{'ĢM˜–ø5ú ÷ČĒSQ$o­ƒöĮdõĀ?Š}ԝ(NuÔĢĻȌÖŋĻ”ĢĒĘöŲÕĄŋWUŊk’[­I­ae1 CĀ0 C ‚@õŧÆE21§!`†€!`†@å0˛V9Ü,•!`†€!`AĀČZF`ļL CĀ0 CvĀ r¸ųTlĸå“ cĮŽõŋMWž(~Ū¤sįÎū˜~mߌZf†€!`é!` ŌÃËĮOIņۏ|ŗC‡IOrqēj„ ū;[=zôˆįX¤MËöķĪ?ûįģMՑOŧ•ŧĄœ|0vܸqŌŗgO/ĨēËIžK–,ņŠÍTž•„Į’†€!`qLŗ‡"ũžM„fmũõ×OJÔT*q&OžėŋgÄ1yŒ+îŸ|ōI˙ûz|D•enˇŨvū+â„ĨBbBY¤1b„×äAÖ4,9¤­NŖe!Č?äÄIÃR-'ņS‰Ģrɓö*/ĪTe"+™Š Éd›ŋ!`†Āš‡€íYĢd›3!ķÅrũæ ÷úsũ9’ÂĸR?ũā$q‰CZŊȞ{ĖŪ{ī-ĮsŒ˙ŪdK†Ģģ"[ãĢ]QüUŽåS;•r—‹ŸˇyņÅã8Ļ*C㊭yâūėŗĪ<‘ã>Žņ’Ųšfed$“mū†€!`k6ĻY[‰ögyÍäĖũzŗûáãe?‰ƒXÂt‡°áÖNjļŽ[Ã7nė5@J~ųåŋ\Čoõmšå–ū÷‰˙Úk¯y­ÔđáÃũG5{÷î-n¸aœh¨ė/žøÂ˙nåD‹ÅŪ9 ?yôõ×_Ëŧyķ|úwŪŲYŸ%T–'ŖųA ĮīBi‡vˆ˙čąVö/QęĐĄCũ20ZCęĀī jũÔūįŸä‡~đ ŨlŗÍüī%"vʔ)2lذ89>äCŧ<´doŧņ†°´ÜącGų駟–ûīŋ˙–oŋũ֓ā6mÚø’jž8hâ˙ÔŠS}÷ß_ΰÜ[mĩ•/7e!ÍļÛnëe 2DēwīîãGeh>Ä7c†€!`T#k•@ ˜ rŗĮYē,Î).Wd¸¤Ņ \(I›6mš'‡]vŲÅĮ…Pá>ôĐCeöėŲōũ÷ßËžûîë“.Z´ČûtĐAžd@ĘĐĖŠA.ħe˖ž,ĄųéÔŠ“)ã7 ?üpOˆË1'Ęĸ:捪|Í#´Ŗq'ˆŋŖH>Ë?˙üS6ß|sƒÆ!īožųF8ā˙ûˆ˙ûß˙¤}ûöž`}ų嗞dvëÖÍ× %dņŨwßęŽIVnžúę+éׯŸĮ`äȑņ| ƒDQHnģvídŨu×ōÁ/ZîŅŖGK¯^ŊüIäG¸ų­OdŽ4QFŌ@،!`†ĀĘ `d­’č)ÉĐß},O q1ÄÕt:‰ã†¨`&Mš$sįÎõdĄUĢVŪMqžûî;oΘ1ÓCˆ{⨇˙3gú„Šl4dŗfÍČ ėņ‡„m ˛0ħüÕX&+7$ŽŧÁ“ôü&į˜1cŧ H~Ô[/äã-7åØb‹-|;îļÛnōá‡zb Á$ĻWÛĐũSŒÔmļ!`†€!FÖŌA+—I"¤ĪŤ˜‰ƒˆWŨøé¤ÎDa‰B€† $ rÃ˛(Z&Lwę”tšÂĸrU{G\ÂĐĖ <ؓŖĩÖZ oŸō†rĢ,Âå§yėžûîū3%,ûąäÚĩkW’Ä ņöØcO†ˆƒ ’ÅAĘ QÂhžZfĘOž”]ë‰Ũŧysŋ7øÄU‚ÆŊ–Yíŋ¯€aÔ’ĖŊ^”AĶ…eQšJŖåĻũ´ āG[“ŌĢ äkų™1 CĀ0*‹€0¨$rLĘ–÷ \&ôđR?‰‹Ņ´z¯nl4@oŧąßK!€ā ujÚ´Šã3!% h⸟3gŽ/ņ ČâB;éƒ4Q.ÂДA$6Ø`ai|đO–d„4äÃ*K˜ėíŌrk=H¯q žhōKĐėąKũ°ĩŒ¤å4nzė°)ˇjΐOÂ(äw"œ(7Ú=´kH -KŧZ^ĩ+Ú‚†<â†åw-7ådiōŠ{ØHÃÅé[•Ąr}†öĪ0 C$9]tŅĩ•LģÆ&ĶI˛Ā>2’1Bxn6ÃCēĐA4Ô ‹Ižīĩm˛É&>ŒŊP,Õą?Hä‚ôĮøũUö_!Âõûīŋ{mō1¸!V-Z´điĮ7âŖmb$Žx\„ŗé^ĸü (īŊ÷ž_Ē…ĸY#>ō0ÔųīŧķŽ.:öÄA¸øl {Ū°YîEsŠaC~—.]&Ė!‚°QŌ"FŲ)Ä*ZnČ(ä bJzö Ą]„ŧą/ 5”Ÿva–˛“‚–¨ÜĘ  ä ŽĒ€ŒCÜč*ŖƒĶ&ĒvMqŌüĖ6 CĀ0REĀ>Š›*RA<Õŧ@Ļ QlNgâ.Ī e‚˜ė´ĶNž@čä,H÷jgĸ‡D`4d@ĶžōĘ+ū°~Ä Éi42 – ä(1Ņ8h§”lƅf‰2AŠÃ…?qņ#/cĻZ/ˆ)$IĘ¤ ď†Oã`ƒk˜¯ĘQ˙0>åĄ^ČÅP?ōŅôŪĶũÃO1".e×ō“'écęMĩLaš5 Sųꏭō6l¸\ž×lCĀ0 C lĪZ:hEâ2ųŖŊBۃv‹I:‘agōĩ9:ŠŸ{%ZČĀ5„+Ą ÈYQMĢeŌ8Ņ|W¨qą5?ä…2ĩ Äá ô ÄŅpü¸Į šŌøjã¯áøq)Ņ ã„ūš/ļæĨr(ˇĻĮtÄĶúĢ_([ũ°!pŠnŒ–;šĻ4t)ÖpŌ‡ųi<ŗ CĀ0 Ę `šĩJ Õ°9ž%@ü•x¨X&p&o–JYÖcįŸ¸\Ē‘"}Ԅō” hZ6ÕĢö& SšVķÁ?ŒŪ‡i4~”]ãEũ ĶpÂ(?uŅüÂøÜĢlŊ'h| S›8z¯v˜.ŧ×plŊWųÄÃPf%eÄŅpmWâ¨÷˜Pî0<†[ąQ?3†€!`†@eXĻ’ŠLę5<NĘė™BӈlQ”(l:ŽQ7÷5܇aęĪ^.Œ†aëŊÆ I…úiĩU†æŖyGåáÖ8ĻļĘ .ŅŽ­~‰ōL$“øa~áŊæĄéĶŧĸa¸+JĢr4­–]ËMzÍCeŠ­iÃüÕ/‘­2SŸH†ų†€!`Š€‘5E" ›‰ÃRZx˛3 ĩ2ĒâR++g•2 CĀ0VËž]°Š `Ų†€!`†€!`$GĀČZrl,Ä0 CĀ0 UŽ€‘ĩUŪVCĀ0 CĀ0’#`d-96b†€!`†Ā*GĀČÚ*o+€!`†€!`É0˛– 1 CĀ0 C`•#PįąĮ[兰†€! ~ņŖoßž˛ŅFų(Uņũ:ũ†Ū„ äķĪ?÷ŋƒ›,ķ7 C`U#õÛoŋÅøám~$›°ÖAlUĖō7 C eøđáūˇu{÷îĨ2¤-ß~ūųg5j”ôęÕËž—GÕn C & ĀøÆ‹*ŋ+ÎĪJÖÁƒ‹šė'“jBá­ †€!°æ!ĀØ´Å[ČčŅŖeŪŧyŌ§O?VAŧŌ!lJÔx)ũōË/Ŋ,ˆ?—Žœ5¯ŦƆ€!i÷¸”Ŗeš7ËØŌĨKŊVá6c†@M@r^hØÆ'ŒW{íĩ—đ›ŧ˜Tˆ–ĩÜÜ\ųđÃ=AëØąŖ×¨ÅÃ˛ךPw+ƒ!`üJJ4˙B9f˘K 5´j:¨L†€!`ŦjtLb|Ō1jōäÉ2iŌ$ŲsĪ=ĨuëÖžˆå6Ķf͚%}ô‘l°Á˛ūúëûˇVC.ŌķkÆ0 š€€ŽIŒO,…fMœ81Æ ¨ûÕt`Ģ …ĩ2†Āš‹cd‹ņIĮŠÂÂb™9kļŒķ‡ė´ĶN˛ņÆ{6Ī8H0tčPéÔš›´iŊļ͍•žąę›k¸ä°æ"n57 š‚ãš5˙B9mÚ4OÖÔôĒ)…ĩr†Āš‰€ŽEØ5.–Aį/^*Ķæ,•ē9%’U´XƎ)Ũģw—čÁŌŠŅƒēn&ą:M¤°8[ÚļĒ/-šÔ÷Ë  †\:8&"}*ËlCĀ02@8y˛6g̘.5„\& cy†€! Æ#Æ&4jl՘:'_†ũšPšÔ-‘&õK¤EŖbŠ'ō៪ĨE‹ņƒ*‚ĮA‚šsįJ׎]]Ėú2?7G/Í–Å…Ų˛]—f˛^Ģ~‰ÁP7ķjzŗ CĀX•(aķcĶüųķ=Y[•˛ŧ CĀH„€.Î]X Y˒Ũ:/§‹ą–-[ĘöÛo/؄EÃ!dø!yČE>~f CШUS[ÆĘeŦÁča§ųKŠeä?nÉĶaąíFEŌ¸AŠ, S"F˜†‡~zä!ųäƒŅ|ŊÃū†€!PC0˛VCŠa+"0lLžĶ€áī~rj}¨UŠQâĨ¤,JĐĘ WĨō˛Ŋ|ō1c†@ME NM-˜•Ë0ÖlĐrMœUčA¨—s‡ J$;ˑ+wā!ĶK#„š1 SBį•ũÃyČ-(Îōų–4f CiTšŦ唸åƒ9Š@&Í.”EyîKãvŽ´Ļĩ¯•ĮXˆÉ¤9Ežü-ēCe< ĸĨ„@~­Dd-Jˆ‹A^s'wÖâ,ųė÷|7}6Ō|˜ũ3 C`eČqƒĖÚͲĨMŗ:ŌĻyŽlĶąsįTJlÚdmÆü"yŲmČũtdŽä;Ģę–Č0ŌB IƒåĮšD„ R%kŅL”¨ŠS'wÖbq{Öbî*Õâi˜Ų†€!`T%ŧ îĐĨĄēméŅž~\t8nÅ=#7’5@}3}ī§ÅōČGķ—#iŦŦĶT¤YCŪp#ŌÍi†@ °áZ9ūcˇQQĄ†-uG‰ᛴŠ[á(•dnCĀ0*F€ÕÆųš"ķÜUzĸ]äĢŅyū:q׿2`—fq!ļŦŠ>ŠĢdí–×įȐß\Žef‹ EútéÚV¤a=ciЋ؆€!`†€!`„ü='&_ü)ōÍ8‘ü2%~ŋäŠC[­°…#L§÷’5"žôÕbyúŗ>Mk§E;ygHš4ŅlCĀ0 CĀ0*B`ú‚˜ÜûąČ´RJ%ėßRöéÕ¨ĸdR.YC-÷›;DpņslŧiÛ\ä˙ʒFĻIĢX‹`†€!`†@\ˇß˙߯ĮdļÛ/ËĘäc§ˇņtËY4>î¤ģ5tũôīœ4gÔš`¯li\ŋú4jü s~~~Ĩŋ&Îū• ømö…!`†€!`Ô āQ§öÉ-ī–ø3Ú}ēüņĮžŦiŋÅ^´h‘ŋ&Nœ(“'O–nŨēųų/ŒÃ}ßŽŲŽŦ•jרrļM'÷Y$&)YƒņM5L]÷ ˇkgæ—Š hŒŨwßŨ“ĩĄC‡ĘŦYŗYų5 Ę6l˜—Í5×øĨNâ]yå•ņ<ũMä_(KƒÔOmüÃ{§ūĄ[ũ´ũ´Ėß˙ŊvØa‡ų%eüO:餄r5/ĩC™Ņ{Ū(z÷îíeë?M§v4 ūhŸyæŲe—]4YÜÖtj'J¯õ ã¨õSÛŌ/ß’ábø•" ø¨mũĮúO*}ÁžŸÚņü -ĶÕ'+OØ/ŋü˛6ą_­ÛtĶMŊ"G|ö¯ąŌĨ}ģšãWĶÜį<øÉNŗ° MÂĩM"r—ũØ'?‘@ÂđBnKxŸ~úŠ'>ØŅ{HV˜–{M¯ļĘRÍŲ Aƒäíˇßöv­ģîēŌēuëø)Q¤mūüųūb}˜ÃJôBų‰î}æîah{0ššš>/üČ{Ÿ}ö‘§žzĘĮ!üŌK/õËĨŋūúĢ÷#O–OYǜ1c†'7[oŊĩ@ÂĐØa͟‡˜üq…0ü5>÷ÉΔ)SäēëŽ#kéŋūúëxz-“Ú”-•ûhRIÆąôË÷é›Tî ?Ã/|VSé3aë?ÖjB˙aļæËß˙] fl§Â`ãÆ?Ô¸‘n…ō— *)ã]JØĘŧãÖ š5 )%leŽ2˛ĻaĄ&ŠMã#FŒŊ—ģīŪŊ{ŧ€ËDäŠÚ1N„ĸ-ƒ”<ōČ#qÆ )ã"Ž;%kęŸĖ&ū /ŧāƒwÜqGaŠÉ6ÄŗWN…ãŠÃüqŗßė„NđĐđ!ÅūŦDæ€đC–\ĮŒã—955ā‰ļo“M6–!ûīŋŋ4mÚTܯNxų!Kš=ö˜'´§œrĘrĸ(ĢÖAĸnõßoŋũü2(67PFęĸ†ēCNépíÛˇ´“ė/„P#“ˇ 0šūúëũ}ģvíŧ˙‚ ŧ?äNķÖ¸2Ú˙úë/9ķĖ3B ŠEG^uHaÛļmãéĩLf†€!`™D@—?5O4jJĐԆ¨…š6â’Nį@M+ĨzĮ)J÷ãĮũ#7 ÉZ)Q[ļŦ¤ØV–#2¤E‹ūBĶ5L´ ōŌk´9JÖÔOËB¤ ™¸Nŧōō"ōƒöƒví†nˆ§Ķ|(‹ĘŌt*_ũ!Žt_.|úé§åŽ;îđš&4s‰ äŠ<Ÿ|ōIyíĩ×ŧöŒåW´g͛˛ũ÷ŋ˙õ*SōÆĄâĄņŖŅ!„& 2ū÷ŋ˙ųĶŸČ‰–WåBŒ´ėÄ M‡äŅG•‹/žØ“+–C?ūxSfōÚpà ũ!]2F25Oö˜ĄmÕĩųDyk\ˆ>¤!ˆœB%í;ėā ‡PSOÍĮߨ?CĀ0 C` Āį9ĸ&$l‰ˆņIKünŗRÆĻ|gBįŌ&$k%‘ûĪ­[-qĨŌī­y˙Ö_}ŋ$ąO m™T •€L` JJĐtb§Ĩå*%#Üki¸G†~jŋ¨QųhîødĉÃhņ´œJ.°ÕOĶQ&üpŌAĻđƒ´bŠéĸųãæāÚÆ[oŊÕkīÎ=÷\¯ãs ¤ L‘Ŗš74T¸é˜QŖF iÕ ­Ō|ŖåUšāĒq4]hŖÍbS˙M7Ũ$h؞}öYß\pA<_ˆ8DæÉ‰[ÚFķI”ˇÆíׯ_Ë=zx˛) ̓¸*+š§š CĀ0 L"€Šy>4ĄFM—DŖš5ŌEį˛â’N {å—}–,”Ģ÷ ÷Ŧi`W‹;Ë쁴D?}Á2Ë[ŠČ•*i"=ūJÔtĸWšøsá¯q4,™}öŲgË=÷Üãŋ%öđÃûĨÆdqĢÃŋOŸ>ōŌK/ųo QˇÁƒ§œ ņ1hŽ t\”#Ž8b9ōš˛ĀHDÚíÁŒkéØsFžJžhëę0|OŖųTG&Ķ0 CĀXT1Ŗ2BĸACĄĸ„Mã`GĶ…aʡ’q˜„d-Yäå'pđ™ %g0H>¨šŽpE—BCZ6l%-„Ģ[ÃÃ4ÉîŲwuôŅG{mÖĩ×^×ęéō‡0,Íq2ąĒ Į^9 ËžŠš7ŪØGEcé ¯čŠÛTeFãĄÅÔĨ\>Ŗ‚&qŖ6ōŅĐ|U‡Ņ˜,{bTC}ƒŠŽŧMĻ!`†€! līRÃ^l=L š´°Ž&L§~ŠÚI—ASƃ䰟 bJ´îƏŪCž 5´jēė%bÄãR%x¤ \T~"7ōŅAXūCCņS­h‘8í¨.‘ŒtüØ@Ī9>g1sæLŋ÷‹ô,-Ļjú÷īī7.ÂŪ9IÉR"Ē:pRS sĒō49Øw¸ÕV[ų ūzø‚oÂqR”O¨  äPÁųįŸīŨėCĮiÎĘ´šhÔøp.ũŧ9L€ĄpŗÜ‹æÜXV7c†€!`Ŧ*˜‡ø ÆU%ƒÚZ&DMũIŗ2ķW•’5 ‰ļ¨cĮŽņĪ@hÁSą!Z548|˜‚¤¤ bjÍÔšÜë/pŸŽ„œsÎ9‚fÍõ|’rÂ>64HšK.šÄ>|x:ĸƅx°ŒŸÔ°Á„5UÃ6Hķ91Ęá(‡Ĩ*OãA› IDATŧŪ|ķMP?4Ŗžāgŧ0hNxāŋŸC\à /ŧ°ŌdĶŽ—]v™_öĻīpØBUÅhg!Ķtz~vâä­CĀ0 C`U!ĀžwV¸ø+OJČĸåQø ņõwĪŖņRqgšĪ@,;öéR0ŲĢĻęōįɨŠ%Ōąuąœŋ[ų RÉŦĸ8N=ĸMtE5sJDTãĻáøŗüĮ^'6НŊöÚe•R8Z&N6VÕŌĸf:wî\á7Å`Ų4âĘ–'é,ŠĒĐūą_ˇęŦ˞‰Ę‡&åI]eđáÅ?ü ÷Ū{¯lģíļūt+uĐ6 ķ¤}ŅB’Wĸđ0ŽŨ†€!`™@€Ī{ąŌĜ™Ė0ĪCԒ-Ūķi7+G睗-ˇhé/ĖåŅšŽĘ5kÉ œŠ?ÄMÚĩhAŖéŖáLčh—V–ü„ų¨†'ô̊{NĄrU…ᐁ~"Ŗ*äĄÍBÛU‘á{o\Uah7>|œĖĐÖ93†€!`†@MA†B‡ų ↂ…ķ(üpČÚĘhÔ´Ž5ŠŦÁ&Ŗ'Jĩ f×.XjÖĪ§ÔŽšYm CĀ0Ö˜Į:¸o”rU§ŠQd­:+j˛k,ƒš1 CĀ0 ŠHøéŽŠ“Y CĀ0 CĀ0 L `d-([†€!`†€!`T#k•Β†€!`†€! RÚŗ6gÎ÷ņÖĪ2QËÃ0 CĀ0 59yģēzVükO)‘5~ūį’/Y#€ŗJ†€!`†€! .xz†Ėû{i…YŲ2h…YCĀ0 CĀ0VFÖVö–ŗ!`†€!`"`d­Bˆ,‚!`†€!`Ģ#kĢ{ËŲ0 CĀ0  0˛V!DÁ0 CĀ0 U‡€‘ĩU‡Ŋål†€!`†@…YĢ"‹`†€!`†ĀĒCĀČÚĒÃŪr6 CĀ0 C BŒŦU‘E0 CĀ0 C`Õ!Ō/Ŧēâ­\Î%%%2zôh3fŒđ“Yuë֕X,æ/$geeų đ3wíĀãŠÛ˛%''Ŋw,×ü­×m,ũöl/Įģ™4hP×÷ûg†@U#`ķR͟wkâø`Š_ŋ~U?s&¯"ĐyûYŌaf’íˆ8\Üũ÷ĨŒ•Z1Ã8ĘîHģHąûWT“SÉ+Ī —ķOūTî}ǟë/ĩöŅ(Āū†@ưy)ãW*Ú8¤§‚¨TĩWMĸß˙]–.]*ûîģ¯ÔĢWĪMZé$ÎD^z™{ĩŸ™"yąlÉ-ɒ\lGÖōܕīØî\lļÄŲy%Ų.<[­ÛLúŸģŊĖmTGž{ôˇUĶi-WCըŧ´zĖģ5qŠ•ęƒââb1b„ôčŅC¸×eÎėl:JļwCLđ7ģvá0wILæåûvuÍííŌŅ•Z–|ūáÛŌgĪœ^Íi×Üŋ’’˜ĶŽ9 ›ŗķ ŗ¤įžäĩ'‡ÉIgõtËŠ9ĩzâ°Ę†@æ°yiõ™ok☜y晓DáJP“Ĩ¯­á‹ c˛Äi×XīĖvmsvŲ ¨üöãPšöĸĶåĻGZJĪ­vōmPâĸ–8ÖVčÛR—ļyëf2~$ŽÄȝĮŒ!`T +3/QįK ÚՉGMœGĒtô”SN‘ž‹O9Î8ãŒŌk¸Ę Ũ,ÃB‘÷ÆoČī#O+}ĸō"˙ūûīˆq˛đDåOTžÚ–>¯(&šîĘ/rũĀÛNcæė…KōåĄ[¯ō}čáÛŽ”ų‹ķ|xŽ#hš…âã/qöb7§YCY˛dIĘũÍ"†@Å´hŅÂŋŦō"ŋŨvÛÉ/ŋüRqĸJÄ>|¸lēéĻ•H™zÆ×tMēķR8Ôļq:Y}ŠŠ˜¯KįåUY˙š8T™fíÛoŋ•QŖFÉ7ß|ãû0sUH ^§NosŸã„š$-Wé˜Čûīŋ/{ėą‡ÛhîČ]Ié˛)é4\ã<ņDGøJŧ\üĸáQ÷ˇ°D Ũ^ˇė†uãíÅۛCŪyįŲpà ũĘÅ=÷Ü#Ī>ûlÕ¤°ũeذaOÕŪ>÷ÜsōÉ'ŸvĒĻ2ķ’Ę^SÆņ_|Q>ũôSyâÉ'ãĢ!`°*ę_į‘*ĶŦąŋįŸūņ„ €5j„7<”ŧíôë×O&Ož÷ŋõÖ[ĨW¯^r衇ĘĪ?˙÷OvsÄGİ"Y+((pdŠĀMŧŽ AÄĘ.ۊ¸beúJvØaīÖ7Ļx@zlļ™wÜqōĮøø¯ēåQĘKüÜyūųįĨwīŪ˛Ī>ûČdW} Î÷@īļÛn>žĪĪÉ)SĻČ~ûíįëü ËCã?ôĐC˛÷^{ÉöÛo/W^yeŧ| ûģ|vÜqGšũļÛâņyøúáéÛˇ¯lŊõÖōŲgŸÅëC^>ŋ$õ­ÍáN;–WĀRh‰ˇķãę{øiōĀāąrŲĩk˙3dIaą‹“ÅNģ6/ŋDf.*”É Ķsd͌!`T|BŠ[ˇn2vėXŸÁi§&}úôņãØ /ŧĪ”• ü™1Œ]§žzĒė´ĶNŌŗgOY°`A<žŪđŠĻÃ?\˛íļÛĘģīžëĮPŌ@0Œá{š1—|:uę$Gu”÷#ėģīž[NÆwÜáãąEįĻ›n’!C†ø2Œ7NžüōK9öØcIVĄIe^:ËmoAy˜˙ß˙ū7>Ž3'áŋĢx$ĮŲŗgVįwŪYĀ–šâS—ÜN:é$ŋ%į÷ĩ„#÷”ŠSü`BYgÎt˛\ųxŗŧęĒĢåíˇß’:uëōÅcJētéęI$ņ5­ßšæŽį°+pĸ°8ËÛEÜģĨMŊ–ē{üŠŧ-Î?[œN–ēĢ8+GęģôYöQ܊/ 7*…Z1H+ zčŦŗ#5’Ŧ† úņ‘odō2Ī8†a<…Lüņ^‹Ã˜šŠASÄX‰FÂĄ†š Y1H"ķnSŅ8Ų͚5搊Ie^ęØŠŖ'¤ÔÂȸÎÜÉ Î‰'”_†˙âˇųčŧŽûHûûHiu lėËnŅĸš—÷á‡ĘčUc!ŋ:¸ų­ôƒâá<§×y„0Úpƒ 6pËŲí}9Pŧ€~sįÎņō!oā|à ×ûē0‡V4o’?ōĩ>Ũēu÷ŗ?÷ŧsũü–“S'^-Ö¯ĒŨ5qŠrä‚}k</Ø5TMøpŅ™ØŋpØa‡ų`T×úPjüĘÚ¨›‘ĨDMķUšEN6ë76qÔMzę@gDž†NŊ°1ž ēpu˙øã˛å–[ÆŨÄ!-24~lēŏA u?4ČOË̀ÆCzË-ˇËĩŧĒáCŋČâB6i°ÕPŸ5ÍŨ°^–4Š_ŠHx4Üŋ_?$ŋ}ĢÔíü;nÕOzī’_+qÄ­¸ØuƒÅ’ĨŒ͍žBhļ!`T!|`“M6‰KDãÃ֘K/Ŋԏsņwƒ&ė™gžņš/ô„‹ąõîģīöĢė7fZEFį p<ŒĻaŧdė Įįhœ•u#ģŧy ˛Ę\Āט0:Žŗ§‹eQVo.šäŋ2C¸Žķ¤=äCœëėxZō#Ã÷FÕÍ!?4ŊÎMØā¤8pOp‡÷ĄŌiŨ ÔtPéö"—?ķ'ņš’Í›š¯Ö"ÍJЃz|Ĩ¯)hy}ĨÜŋęp×Äy¤ĘČ'ų´oD4 vûöí=3VPŖ6ëī,‹>üđÞ´DÚYԆOŽ~tL=ėd„ŅЏ0ŦÛŖ o׎wĶčÄį$ Z2ü!HhŪč`„ŅĄÂÎvXÂÔM'Û{īŊãn2 ßņãĮ{9¨ųy›DãČō*kų Nԏ7;ÖÚɇS° fZČŦĘG÷z!›ø­õYĶ܍ęēˇAé ĸjcđØr×äĢ—î”ÅsĻKƒÆ-äČË”ĻNƒD…îpA‘;œ]"ëš6´=kžßØ?C ē`e­Ú–$ûX‘Ņ=G'Ÿ|˛ŸŒŅÆ tdņ‘\ÆÍ‰'ú%šTČZ˛z oŌ¤I^+¤c6q×rK(0ūų§đŲ%–h1c~PC™Y‚čUd*š—Xbd•…ũdl B6ķŠŽRᏅAŒŽķšĖ8iĢi‰aŽ`Ž >ûËØŽ„Ļ’ũyäÅjá­ZĩōØr˙Ö[o ōeîÍ,S‘‡ÁCn–™)K܏qXīąq뜊›åîŲŗgĮåą% ?–˜ŲĶ6bÄŲÜm;ŌúVį`ŽRƒ’ī\r8áIˇŲž=t@āĐAEĻĸy <¨++T›šn”Ŋ{ė ã ŲFmä÷ķY8o‘oĸ´ėņ&=ķņ5 ō¸gi”oäIÍØO<ᗡŠ+aĖ1„!‡{æuëŧŖķ#nļІ­K,s¯ŧy“ŧØŖ idO#äķÚk¯õuĻ­ŲBDž™05qÉr>KÕ/eĀZaņ°ōË_œ'ŖĻ–HĪöõåî׊#ŨØI‡ĸáR5|Ā‚‹^YCų!ˆ°zöĮ!“ÎC'Ķ2qá äwRĸˆŅēë[ebœĻK•ŅO˜0ÁoBEm‹ŅüT+ˆ<´wú&ĻáœvA;‰[īI-‡ÆOĩhRŗŌ™—ˆKžĖāÁŧ ” <Đúa´ŦŅy€ų,™ÃÁRŋː,>,”( §ČãŸ9**?7síb[QzVšĀ•ō’–úĐÖÉĘ_‘ŧʄgršāé2âīĨŌ}Ŋlšu@KOH•Ô†ũŽJi*o á~„0Ŗōî!SŠvúōäFƒŌąŲÜĪeRÕŗ6ļÚhôĐbŠ[U0°ÜĒ2ą5<?ęféõ/ē0}(2Få…á¤Õp}ØÔÍĪÜĨŦ |Z6uŋBĐŌíķpdÍu…RÂVFÚh‹W\겔¤š3#îÅÄŨ;ۍkR?¯ŽÔs7Í˙ęúĐĻņ~áŅū†@ĩ!šĀ0pЉ5üyŲ]YĸĻōÕÖüÕ­v2ÂĶ™ŗŖS—Į˙Iθ×_ũøŧlÜįʙhŪxõÕWũį9ĐÜq–C,1†ņ)očN–_"ų¤KTūTäą"§éąuūĢLū¤/¯|ÉÂkâD–L%Į¸ũ2áāU–Ü,CE0đŨ´L™š6/ĄĩTÍ%ˍf–!Pį‘ZIÖ`ō¨R9ŧĀwßøBĩuÆeŅîVDM,÷ŅŽĪĐwĸoƒ+Ļ0CĀ0RGĀæĨÔąZ]cVįŨ:Ŧl~+ GmĀ,AĩjW˛ž´ēTŸöš;wŽtęÔIƌŗBąO:é$ųûīŋWđ/ĪŖ"™åĨĩ0CĀ0j:'kwß}ˇœūų+ څ-ˇÜ˛B9U‘ß>ûė##GŽLHÖĘ wíĩ×ĘFmzųuítë°2ų-—y9ŽÚ€Y9Õ[íƒõĨÕŠRë¯ŋž´lŲRÚ´i#ëŦŗNŧč#FŒƒ>X&Ož,”ũë_ņ0՘õîŨ[/^,ęÖÉdj¸Ų†€!`ŦÎd”Ŧņ6=xđ`9æ˜câ˜}˙ũ÷˛Ã;HëÖ­eĶM7•˙ũī>ėžûî“.]ēȋ/ž(;īŧŗė¸ãŽōŌK/ų0ˆĶ 7Ü h€Žģî:Ŋųæ›q™zͯ  @zôč!Ũēuķoî&|Đ'aŠ‘ƒL {īŊˇŒ5Ęû7kÖL6l(īŋ˙ž?DAy^~ųå È0tčP¯A ŧyyy> ˙*[‡ōʂÜdųŠ˙å—_îIãV[m%‰–VWWĖ.¸āķ!‡ røá‡{÷žûîëŨh5ˇß~{iÔ¨‘lžųæ˛įž{ĘčŅŖ}ؐ!Cd¯Ŋöˆũ㠃ōūũKÖwI—L&í@ŋîŲŗ§äææ Z$4L×_}EŲ%m[Nš4Iú÷īīûī5×\㟗sÎ9'ž&Yģ'ĢCEĪĘđáÃũsšŪzëųúŧöÚk–_#Ü˙ũūwXožųfiŪŧšzËã?.ģ랋|ôŅGō駟ĘW\;í´Ķ¤_ŋ~2ū|9å”Sdģíq“Lær‘Ėa†ĀęŠĀ… cáĩ`Á‚˜›°c3gΌt÷Ÿąí.ų#vÚãcn °ÜË ŽîDųÆMHą˙üį?ņH3fˈšå‹ØsĪ=[ētiė“O>‰šˇí˜#>N¯^Ŋb\īŊ÷^ėŲgŸĩk×.öĮÄÜŌIĖŦ˜#ZąGyÄ_Ÿūy\ŽŪDķÃßMBąŽ;ÆvÚi§˜›PcŽ4ÅÜŊOâ& Ø/ŋü+))‰=đĀ17ŲŠ¨˜Ķ€ÅļŪzkŸæÕW_ĩoß>æČœ//Œ‹-Š9‚;vl\ŪĘÔĄ2ų‘ą;Fs¤7æ4sGJâåŅ›Õ3Úuƒ 6ˆŅ†0īĐĄƒˇéĪôĢÛoŋŨ÷kGėcîOėË/ŋôqiWˇėæīékûíˇŸŋ/ī_E}ˇ<™äOŋž7o^ ŧ¯ēęǘĶ——]<,Q_"Đi¤bW_}u맟~Š|ōÉ1wR).3YģWT‡dĪ c„#i1ˇ$īķsGēbŋūúkŧœ•šĄė´ĶŅGB9oŊõVŦiĶĻ3žQ3†€!`d &øų~Äø /‚ģ¸íL~,dwZī'Lj7ŋ‚gÁˇË|Åō2î%ęQ]dÍibNŖā'OyÍšįžãÂ@J>øāƒxđ­ˇŪę'6<gà 7Œ‡Eoå§qܞŸØŸūŠÎ¸ÍdsÉ%—ÄœƓ+§}ЇEËrįwÆÜ›ŋ//LôíÛw9˛†eëPŲüÜ^Á˜ĶTú"1C~Cŗēcvã7Æ.ŊôR_%úօ^čī_yåOŽÂē2ņCV0Nksšļ˜Ķ>Åđwڛ0jÂûŠúnE2iž‡ã?>Ąüō<Ŗ}iΜ91§•Ž'aā%HM˛v¯¨¤OôŦŧûîģžīÜqĮ1ŊœĻ0vÛmˇi–•ļižs§ŨöäZ9­tĖi cß~ûmlã7Žũõ×_dļ!`A`U’ĩŒ-ƒ>ũôĶ~™ĻI“&q%$˂k¯ŊvÜÍ îpšåQ5ėqá;'jĘۜŸ(?M‡Ũ?æZZŽ=öXŲf›mürį]wŨå÷”…iĸeųíˇßâÁå…Å#%¸Šl*›ŸĶLøRđ˜ŦŦŦåJ´ēcÆō˜ĶzŠĶēi>ãŒ3|ũõŗ<Đī™"mí^$''Gžzę)Ų}÷Ũ—Ã%‘#‘˰īV$ŗUĢVū;=,;G÷_%Ɲ+ėC›úõbúˆ#ŽĐ$•˛†]Z´h!—]v™8-ģ<öØcq9 4įŸŪ/ŌÆîE-f7†€!`Ôv2BÖ8 đĐC {hBã4~PÖŊCŗfÍōr8Yē7wr ’öđË["ņ"øûW¸0ė/cƒ2&Y~>0Éŋéͧû‡z¨@(™ĸÆ-áĸ‰âBÂr–•Ŗî•ŠCeōĶ|Ųĩ3önģíļž|A&Ürˇ¯jŸ>}üūŧüŅģŨRĸœwŪy2~üøx¸ĶVŠĶˉĶÂųŊė'+ĪTÔwÉ3™LöĪą×’&˛÷ę„NđŗŧüĘ ƒā°×ޝeŗ¯’Íųųųųå%ņaÕ!™0Aš˙.õIDATfÁfĪŨ‰'ž(NÛ%nY Y’”üŨ2ĩ'|ėãKô#Ûä‹ao!ĪŽCĀ0Ö2ą ęÄÎ<ķĖ„jJ70ĮÜ ė—Yv ÷´ąÜĮŌÔ&›lëÚĩĢ_aéP û}اäŪüũ2—î[K–ß?üëŪŊģ߯„6`Āŋŧä6Šû}A”Ĩŧ0äē Ķ>ŌPō|ûíˇ5Kŋ˙&:T6ŋaÆųúŋ͍øåB7áÅūũīû˛Ôˍˆ#@1ęÅŪŗĐ¸!žíÜá‚Øf›mæ—ģŲ[€ĄŲ߯ž/öēīaŌ¤÷åõŨd2_ũõ˜;$âû!KŅ7ŨtSĖiÆbN ˜4 (¯/ą}Ám˛9aĖicît¤OVQģ'ĢCEĪ KË`Å6ž÷ââ÷jY+cüņĮą'Ÿ|2æ4”ą^xÁī÷¨ŒKc†@u °*—AŗüÆĩ€šē zÍË(—ŋ8OFM-‘žíëËŨ'.;bDß~÷Ũw+ŧ k ':Ņ4pŧ>™q“Ír'ÈĮ‰Eˇg͟M–ÎMxÂ.¯Ļ’_2yhę7nė—¨Åaš Sŋ~ũ‚Ë [!rāQŲ:T6ŋ ëømmĀL+ƒÆ MOÔ°<Šö6ü\qXÖŖÍҘ˛ÔÎrh:&Qß]Y™éäË7ĘÜq›UŖAIŨ‰ę4ržh1YĻŦ n{ėą‡¸ŊiU!Îd†€!Pe°Â§?3Ĩ6Zūd?7ĨĢåā‚§gȈŋ—J÷õ˛åÖ-ũĒsPt›RFÖœFĒŧ˛ú°đ?|â`ęÔŠÂԈĶz$ũ.ŋÍÅšTō ã‡÷,)•g‘4_^˜ÆIdWļ•Í/QjfZ¯DD0¨(QÃ_‰~ÛļmqĻmĸ}++3íB¸Nėˇ đŲ wP&-‰ęŠ€pīd*ņ+ŠÃ§UX"6c†€!° ŒĩeŲĨ~Į$pĪ=÷ø| ͌!IØøĪ^ŦdÆ}nÃFIž*ü;î8˙‚sûÎ/8ĢŖPķ <3†€!`˨ądÍí).3†ĀĒ@€SŽî3Ģ"ëJįɝšĖ†€!`Ô.2r´vAfĩ1 CĀ0 C sYË֖“!`†€!`i#`d-mČ,!`†€!`™CĀČZæ°ļœ CĀ0 CĀH#kiCf CĀ0 CĀČFÖ2‡ĩåd†€!`†@ÚYK2K`†€!`†@æ0˛–9Ŧ-'CĀ0 CĀ0ŌFĀČZڐYCĀ0 CĀ02‡€‘ĩĖam9†€!`†€!6FÖԆˆ€!`†€!9ŒŦekËÉ0 CĀ0 ´0˛–6d–Ā0 CĀ0 Ė!`d-sX[N†€!`†€!`¤€‘ĩ´!ŗ†€!`†€!`d#k™ÃÚr2 CĀ0 C mŒŦĨ ™%0 CĀ0 C sYË֖“!`†€!`i#`d-mČ,!`†€!`™CĀČZæ°ļœ CĀ0 CĀH#kiCf CĀ0 CĀČFÖ2‡ĩåd†€!`†@ÚYK2K`†€!`†@æ0˛–9Ŧ-'CĀ0 CĀ0ŌFĀČZڐYCĀ0 CĀ02‡€‘ĩĖam9†€!`†€!6FÖԆˆ€!`†€!9ŒŦekËÉ0 CĀ0 ´0˛–6d–Ā0 CĀ0 Ė!`d-sX[N†€!`†€!`¤€‘ĩ´!ŗ†€!`†€!`d#k™ÃÚr2 CĀ0 C mŒŦĨ ™%0 CĀ0 C sYË֖“!`†€!`i#`d-mČ,!`†€!`™CĀČZæ°ļœ CĀ0 CĀH#kiCf CĀ0 CĀČFÖ2‡ĩåd†€!`†@ÚYK2K`†€!`†@æ0˛–9Ŧ-'CĀ0 CĀ0ŌFĀČZڐYCĀ0 CĀ02‡€‘ĩĖam9†€!`†€!6FÖԆˆ€!`†€!9ŒŦekËÉ0 CĀ0 ´0˛–6d–Ā0 CĀ0 Ė!`d-sX[N†€!`†€!`¤€‘ĩ´!ŗ†€!`†€!`d#k™ÃÚr2 CĀ0 C mŒŦĨ ™%0 CĀ0 C sYË֖“!`†€!`i#`d-mČ,!`†€!`™CĀČZæ°ļœ CĀ0 CĀH#kiCf CĀ0 CĀČFÖ2‡ĩåd†€!`†@ÚYK˛˙oīL`Ŧ*˛>~čnšuP8‘OPÁ=Ŗ0.q™OMüܡ‰[Ô¨ãc\2jܗ¸Ä}׸|îŽ5î;2ŖÆ4*‹BÍ2ũĢĮi¯ëu?đu7ôûWōúÖ=uĒęÖīŪĮũsĒî}Ē " " " G Ž’]Mœ8ą’ÍŠ-¨zkcĮŽ­z˜ " " " •& iĐJU{" " " "PAk„ŠĻD@D@D@D Ō$Ö*MT퉀ˆ€ˆ€ˆ@ HŦUϚJXĢ4Qĩ'" " " $ ąVA˜jJD@D@D@*M@b­ŌD՞ˆ€ˆ€ˆ€T€ÄZaĒ)¨4˛^Š;eĘûį?o¯tßjOD@D@D@Ē–Ā”†šÆ>¸Íņ—%Ö `ãˇoŨēu[ĒÁE‹ĩ°-åĐ´ã>žå9[,'ī>žå9[,W}ņķkġņúČŲbšŽ]?~ø6^9[,×õŖëĮ¯߯ë#g‹åē~Ēãúųôå~6í—â3ßrŋ,ąV[[k}úôiY;XĘšđ‚{‹Ŧęˇ-|[@ ņŋâ˙L…ËŖÍŦŽ]?ē~–F´ųĨ úūčûŗŧßôU9ŠLąVcũúõKíŋŌķžÅÁķžļRųœoÎĻúKøF9V9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖ×Ö6˛Ûf*KŦÕÔÔZ¯^ŊŌ”gņAЃ+J/cë‰2ß÷|ôW}ņ‹×ƒ_#ē~ "ĪG^úūčû¯ŋFôũŅ÷Į˙mĐũˇ Güģŋ/Έmg闚š…MŊ/āZMe‰5Zđú6Úŧ/ķmąŊ¸N)ŋRvÕ_rŠYÄ}ņ[z:#ō(•ŋ%×Vdš´–eǝëëÁSŧJåņõ2ßĒ~@äQ*/~+˙õã×{Š­^ŨQŠŒė" " " "°X+: īžûŽŨrË-ÖĐĐPTŌqģsįÎ5^—2gΜ?ÔéoŋũfŒgÚ´i¨Ž\ųûīŋOŒæĪŸŋĖÃßeFĻ " " ËA ėiĐåhģ"U˜GŪu×]›Û2dˆmˇŨvvØa‡5Û*™™ųdûčŖše5Ö°ŅŖGÛá‡nũû÷oļˇWæų៎ģīžÛîŊ÷^[uÕUÛėfeãÛæ€ä " "°ÂX)"k555ļĮ{Øõ×_oëŽģŽŨwß}öå—_ļ \úŠë8āģė˛ËÚĨ¯âF/¸ā{ũõ×íâ‹/ļįž{ÎŽŧōJ›4i’{îšļp!‹[O]tQ9îĩÉ&›ØŖ>jÛlŗ›V¸-ŧh÷ßŋŨpà ļķÎ;ÛĶO?mguVķƒ)íyМ_­˛Ę*mvŗ2ōmsPrXá Ŧđ‘5'HdkŊõÖK‘Ļ7ŪxÃfΜ™ŠØ^}õÕööÛo[ßž}íČ#4"!x¸3ĨHdęæ›oNBėĖ3ĪLҧ3Î8Ã~ųå;餓lŸ}öI‚Đûc{ÛmˇŲôéĶíÍ7ß´cŽ9&õÃÔ"ęƒ>HmtĐA-ęÅ6ĘÍ]úđÃmÛmˇĩM7Ũ4Eķ6ÚhŖ4ÄË[oŊecƌIbŒČâÔŠS“7nœ!8¨Đ#GÔņüķĪ7Žá7a„T÷›ožąkŽšÆ>ũôĶÄj—]vąũ÷ßßL^xaō§„Ķ:ëŦc§všņBäöŗŗĄÄ‘­áÇÛW_}e/ŋürb "œ‹_ũ5ą!Į{˙>ūøcģõÖ[í“O>IûgŸ}ļm¸á†6kÖ,ģéĻ›ĸĸ[ląEŠ.>üđÃöØcŲhwŪy§xâ‰öųįŸ'į”×ĶŅëhžÎA[ŽO`öėŲÖģwīečJYcDß}÷ŨsĪ=v×]wŲȑ#¨‰›/"įÆo´­ˇŪÚ.ŋüō´ŪŒ›ôu×]gC‡M>4˜qĶ÷u\LŗūøãŲ5jûîģoLËõ"=ūøãöĘ+¯ØUW]•Äߨąc“ũūA p|›ožyshûØ=’Čą>õÔSÉ>~üxC€ fF•¸ 8`°ÖZk%á†˙ŧyķRūœsÎIâ”å^{íewÜq‡=ųä“éĐáAņ˛ß~û%Ļ´Kj¯1§Æ˙á<0^Ä&ŧŗ¯ÛģôŌK“håŗī‘GIĩp?ũô“=ôĐC†c&1•ŒĀE´˛ū!Nâ âü9ä[{íĩ›mšôr¸wßtpú#" "Đå pbŠÕ˛Ļ•FŦ=AX *ˆˆ!Ŋøâ‹)"ōÄO¤2ÖA"ĮÍû…^°+ޏbŠi.„RĖ'CøãkŋzôčŅ\h“øŖĮđÎ;īØāÁm˙ĻWh˛dąBōq•r¤oĸiģíļ›qÄimĮQ__Ÿ>Ô'æoEöq"‰Æ5ZsÍ5mĪ=÷´îŨģQJO̝žzŠĻ1IŊŸū9ĩטŊßâ-‚Ä9|íĩגØd=įŸ˙p-ˆ´ūđÃ)jFšŋ¸™ãú믟1Å:bĈäΘøÛi§lĐ A-Î?åÍ7œūˆ€ˆ€tiĖú Ô¸w/kZiÄQ"Fˆ_C†Āa“¨0…wꊧĸƒÄ”Ņ"DLo}ũõ×Í|\-XĐöËč¨äūˆĻ]iL^rÉ%Ímū‘˰aÃRuĻ;cbz—äåä9ž^tQÃôoL~ŦŅ#„.x9,ãø|´éQ&¯ß^cöö‹ˇ. cDA9nÆČ9>捪RT:G}tj\Įwœ=ķĖ3il?ã„c-í1nįPÜ?öŽä[ÜŋöE@D@ē„Úƒ>˜„Zŧī–;ĘVÅZĶ=m…I Ž(ÉÁœÖ"1ČM—õHDWXķ´ãŽ;Ļ5KˆBŸ}öYZ“Å("äÛoŋMã!ōÄ´*kž^­%DĶq.ŒhĶnŦ)ã‰ËJ$Ļuų ֘Ž$AzõÕWS”(Nˇ2%Š@™8qb^ÆqaĸŦ8!öXF¤Šu~lyESŽmĨöŗ÷ËšeúņŊ÷ŪKâ÷ũ÷ßOk÷6Ø`ÛlŗÍ’įŽŠŪ­ļÚ*E1˛N}Ļģ9įpášĀvLWĶ6SĨ1•iîĶŅ|Ŋ_mE@D@ēÖ}GĄ†>ņ´pņ>-ž,ts‹mĢôíYPkĶg/n­EõŽ5p“å•Ī>ûlz2”ĩkŧÖŅákԈĀđ$!S\LU"˛¸‘ī°ÃIĐÆîģīžÄ¯ĩ éŅĢÜhXˇÆ(Öxą6ŠĩPLĮ1EŠčcņ~%ĮÅSŸDO9åcę•q!FN8á„Ĩē`Lįw^$DY_Ebú’‡!XE9͜žˆšŅ>kīx(‚ȝDņõ\î—ÛļטŊ/â8ôĐCĶy"zÆC<@D ‘I´”sƒœKÄ)S™mĻŧÛÆolœ+ŌņĮŸÖ ōū<´ĀTxšŠŖų–{\ōXš@a5Zƒā¯YãžGš6Ģ ¯öm5vfŨšĸ,K)1D r3ŋuâL{øíFĢiŌlwLčoŊę;'ÔÆ:%n |HŦe"‚ÂC/†2ö‰°!r°ã÷ûīŋ§›97mړČûT~Üė)cĖ>Ž|ņåÃ>Sk”Ņ7íō0ęOŗĨN–ķĮÂqiâcôG'ÖĒņĮÆKâ¸`A䌱“ØRÎ9e=ísņđ4%û΄zΔz‘y{Ž™~áKō1rŦ~ŽąSÎqŗ^‘ui'ĮÍØØâËņ:'Ęņįz -Æ ÆÁĮĪ-mG[gņå8”D@D@ēbĄ†n čãŅūߕ3Ŧąi5ÖŪ[tˇÃūÚ?é îyÜĮbj5˛ļҟ J0Ũ¤)ķmĖúK"5ą‘öÎĮ›+}qŽÉÅ 7čøËä47l>ž<ī‚qä ›Ûąy]„ÉË\ $c˙¸xbJčc‹] *°3ļXŽ6› ČČå¤8fڎí°ëĩį˜‹ûĨīâÄ9ā\"ÎüXđņë ĮvšØ9oŪuc}ÚČŲ:š/ĮĄ$" "Đu”#ÔžüŠ)0ąXš ę[gÅ"͉dŚ;Rg=ģĪĩ9M­}4¯ĶĚl5m ʼnķ›ö‰)Už€øVžŠZj#Ā,¯ķZ.ĸ“į&fû˜Ŋ=,+ĮšŅ•œ$åÆÕĢžÆļ^P{o}1ß&ģ$Õ܂2J€i^ĨH‡v\%‰o•œh SD@ځÂŦĄöũ´öâ bmôŸÍõk9õ/+ÖjūŲsT­õ¨+DyŽ~ļÁfÍmņ‰ *ßžrˇöíąēZßę:ß­ˆ€TŠ@q­xßûAG]øčė4kŲ´ZÛvYjŽģÜ/nŗpÃbë§X+ôôû vûk]7d@ũãīŊíO ‹Âccʋ€ˆ€ˆ€ˆ€ä 0CIāëĮ…ßûūßQ mß-{Ĩ3֛ûÃˇ˜˛b Ä‹¯Yč`ģö_ķíͯ ­gĶ’ŠŋލˇŋŦˇaĢK´E Ę‹€ˆ€ˆ€ˆ€h˜ˇ(=¤ÉÚ–”y3tžM×= 5 c=:bÔĻXÉČOōÄ Ņ5lŧģĀū‹Û—(žîMíō~}ēĨW|P_ID@D@D@ĒīŠ:}ĄųËoáÁŌ˛ŊūgŽûK]ŗPã- ŧŊ€Wj 5괈ŦaDŦųT(Ņ5^}€`ãCoâ'u6yj÷ĻLj6ę)‰€ˆ€ˆ€ˆ€´$ĐŖvĄ^ˇŅvŅhk ŦO¯Ŗ"ĸ†Pķ¨ZŠuk%ŸĨ ĨG”î/k›m0xžũü[ƒũû‡:ûuV7›ÖPc3įÔ,Ĩ[Ļ," " " "PgõŽ_dƒû.°õ-°áƒZŸžŧ\ŋ> 4Ö¨šH+QsR%ÅQ°!ÔĸmÚÆĻGM4‰¸Âb{yrŌ¨r)c-ZmmáWth5>ÄüĄ‚ÖPeō#žĸXŖß§a:cM[Œēá#Ņ%j%€^"EŨäÚ ††ĘEÕŧ^1ˇŦXķŠ[ėÔ†Ib­ŠöE@D@D@ĒšÉu“/++DØj›&ˆĶŸĨ„KŠ5 Š›wJg.Ō|-~ŠĒAMID@D@D Ú  ™üƒ(+ūxœČˇ–ZkŪ€ 6o˜]œÅmkŠLD@D@D@lj€ëĻÜÖ9´%ÔđkSŦáä EŅFŪSˎfķ2mE@D@D@D +pÍäcķ}ßÛ}ŋĩmYbÍ(î¨-ģ—k+" " " ÕN ”Žj‹Ë2‰ĩØØōvÛP^D@D@D@D u…_goŨGĨ" " " " D@b­“ĀĢ[(‡€ÄZ9”ä#" " " D@b­“ĀĢ[(‡€ÄZ9”ä#" " " D@b­“ĀĢ[(‡€ÄZ9”ä#" " " D@b­“ĀĢ[(‡Ā{í2*­XTIENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Ignore.workflow/Contents/document.wflow000066400000000000000000000160561445560650400313050ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx ignore "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{191, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Log.workflow/000077500000000000000000000000001445560650400241005ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Log.workflow/Contents/000077500000000000000000000000001445560650400256755ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Log.workflow/Contents/Info.plist000066400000000000000000000011641445560650400276470ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Log NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Log.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400275765ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Log.workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001110261445560650400322300ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëViCCPICC ProfilexÕYy8U]Û_ûĖį8ĮpĖķ1Ī2™įyž Į<ĪCD"‘Ą”D‘D*C(eLB¤"’(¤¤¨I!ßVĪķŧī{}×ûß÷Ύ¯k¯ũÛ÷ē×ŊîŊ×Ŋ×ēkĀžLˆAĐek¤KqvqĨ`§pČ@„ęĄcmmßũ—cũ€vĢFĨvmũĨ˙&fđņö˛†ŧ|ĸŊCa| „ŽwDT Č Xū$>&ƨ0fŠ‚„ņô.ö˙ƒWvą×oŒFũÖąˇÕÍŽHĨFų@„å”8oØI 9Ė'0 FgkzP}`? ëH†††īâ^‹zũ›˙ÃTĒ×?6ŠT˙đŸg[ÂëFG„P~ßü_Ą!ąđûú}á’bš;6,đščCÕ7ƒ¯\đų+"ä÷˜Á:‡o˜ƒ,ÛŒa^–VaMŋ(C[Ãm!ëˆŨ] ŋ3Č/"ÆÚū/ųĄÄ=Kayo´Áßv.QMwĮŒ–7FÅÚ:ĀXÆ]Ņqv0†# z“`īô—ʏ¯ū_rÂ/ĐĐ䏂c˛Û<æüÁáfģ>Ā}!”€ž DÁeæ@č˙UJ?@…kâāēh ` ˇ‡Û„Øō—žŪ˙’ūnįˇûO‹ā ëÆūĶįŸŪ(pŸÛ >0ū[N…ûØ­Ûõ.Ú#0í_}ū­ąkīˇ72ĩ2īeļūö %Œ’C)ĸtQ(M”*  XP@ Ĩ€RAé ´Pęp*0o`Ëūû¸k?´Ņ/îlx‚šc\ģûė^×Įßځ˙Ü˙/@āĐrËōßã{ūĐ Hˆ ôˆĄčĀ_ޝ$Å$Ė[Z’"'#+ģ[ũ˙æØŗū8ģjû{.‚X†˙% P@},ú_˛Āj?Āįø/™`ūâԌxĮFÅũą‡ÚŊ ĐÁĘx€…ßŗPę@S`ė p‡ã'ŽÁ(’@*Č9ā$8ŠA¸Ē@h- tƒû`<ã` Ė‚ˇ` Ŧ€u° A"AŒ;Ä A¤iB9d š@ž?ÅBIĐ(ʇŠĄr¨ēĩAŨĐChš„æ ÷ĐWč'‰ "˜ÜaÄ„ Ba†°GėGø#"‰ˆtÄ ÄYDâĸŅ@Œ#fKˆoH€¤A˛ ųRH¤Ō éŠôCF!!ŗ‘…Č d=˛ŲEÎ"—‘?P#Š‚’‚ãÔå€ōFEĸĄrQŨ*T3Ē5ŠšC­ ~ĄIh.´Z m‚vFûŖãŅčBôtē=Ž~‹^Į`0,Œ2Æ゠ÂÄäbJ1 ˜.Ėfķ ‹Å˛c%°X+,ƒÍĀžÃ^ÃŪÅ>ÅžÅnāhpŧ89œ!ΆKÃâjp¸§¸w¸M<=^¯†ˇÂûāđyøJ|;~˙ŋI` ˆ4ö„ B*á,ĄžĐG˜&ŦŌĐĐđ͍ԨĐŌĻ9KsæÍÍ"™(NÔ#î#ÆO¯ģˆ“ÄU‰$LŌ&š’bH'HÕ¤{¤W¤ ZFZiZZÚÚÚfÚ§´ŸčđtBt:tît‰t…t7é†é–éņôÂôzôTúCô%ômôôßdŦBrj2,’ąda˛Ų‡œNžDžGžgD2 0ę1z3aŦdėc|˄aa2a bĘaĒcbZa&3+0;2`.ažÃ<˂df1a aÉcidyÆō“•›U‡Õ—5‹ĩžõ)ëw6N6m6_ļlļļqļŸėvö`öSė-ė/9Pâ6ņ8ú8–9™8Õ9Ŋ9ŗ99_p!¸Äšlšr]âäúÆÍÃmÄÁ}Žû÷2 6OOO'Ī{^F^MŪ@ŪŪģŧ(ĖJå,Ĩ—˛ÂĮÅgĖËWÎ7ġÉ/ÂīŸÆßĀ˙R€  "ā'P Đ#°"Č+h!˜$X+øB/¤" T$Ô/ô]XDØI8S¸ExQ„MÄD$Q¤VdZ”$Ē%)Z!:&†S +{"ŽW/–@H(IJ”JŒHĸ%U%Ã$+$'¤ˆR:RqRĩRsŌ,ŌæŌiŌ-ԟöîqŨsjO˙ž_2Š2!2•2S˛dYSŲ4ŲvŲ¯rârŪr%rcō$yCųųVų/  ž ž+2*Z(f*ö(n+)+E)Õ+ŊWTöT>¯<ĄÂ¤b­’Ģō@­Ē̚ĸÚĄúCMI-F­Qíŗē”z°zúâ^‘Ŋž{+÷ÎkđkP5Ę5f5)šžš5gĩø´¨ZZ¯ĩ´}´¯hŋĶĶ ŌšĻķIWF7JˇI÷ģžš^˛^—>RßH?[Ȁlā`PlđʐßĐß°ÖpÅHŅč Q—1ÚØĖø”ņ„ ˇ‰ˇIĩɊОi˛i¯ŅĖÎŦØėĩš¸y”yģÂÂÔâ´Å´Ĩe˜e‹°2ą:mõŌZÄ:Ōúļ ÆÆÚĻÄfÁVÖ6ÉļߎŅÎÃŽÆnŨ^×>Ī~ĘAÔ!ÖĄĮ‘ÎqŸcĩãw'}§|§Yį=ÎÉÎ...­ŽXWG×+ŽßÜ ÜθŊŨ§¸/cßŗũ"ûėčÎáâ~ĮƒÎƒęqĶíéäYãšEĩĸVPŋy™x÷ZņÖķ.ō^ōŅö)đyīĢá›īûÎOÃ/ßoŅ_Ã˙´˙û­€Â€å@ŊĀâĀ/AÆAeA߃­‚¯ī„8…4„âB=CÛÂČaÁaŊá<áÂG"$"2"f#Õ"ĪDŽD™E]‰†ĸ÷GˇÆ0ÁÉá`ŦhėŅØš8͸’¸xĮø›„LOČJx—h˜xų ę ÷Áž$ž¤Ô¤šdäōCĐ!¯C=))é)oŽJ%¤§>N“IËO[;ât¤=;ũpúüQŖŖĩ´Q™ę™eĮPĮ eÉgËú•í“ũ(G&§0g+×;÷ŅqŲãgīœđ;1”§”wá$ædØÉg§´NUå3ä'æĪŸļ8Ũ\@)Č.X;ãqæaĄBaYĄ(ļhöŦųŲÖs‚įNžÛ*(/Ņ-i8Īu>ëü÷RŸŌ§´/ԗq—å”ũŧxņyšQys…pEá%ĖĨ¸K •Ž•ũ—U.W_ḒseûjØÕŲ*ÛĒŪjåęęޚŧZDmlíûkûŽ=ŠĶ¯k­—Ē/o`iČšŽĮ^˙pÃķÆŗFŗÆž›*7ëo Ũ:ßÄØ”Ũ 5'4¯´´Ėļē´Ž´™ļõ´Ģˇ7Ũ–ž}ĩƒ¯ŖäķŧNBgzįÎŨÄģßē"ē–ģũģį{÷yž82ųåE܋ͩÃĶčéė—ô/ _qŊǘ›i˜UšŊ3§?7øÚîõÔŧ÷üŌ›č7[oĶH …īxßU/Ę-vŧ7|˙äƒÛ‡ˇKK›Ë>ž˙$úéÖgí΃+Î+oŋD}ŲųšģĘžzuMa­į›õˇWëĄë›ßŗ7Ø7Ē~¨üč˙éôķŨfüvëėļØvû/ŗ_Ķ;Ą;;Ô(ęī\ —??ž^…9„ Ėž@ ũÃ)~kĀt‚u`Œ„ķ_a` į§×ÁwH J‡&ęˆjxŊ€EuŖŨ1Ķ‚=„ŗÄsã734O‰¤G´éÆč—Č8F)& æT–kŦ/ŲŲ8,9s¸†xx-(š|ã|‚ūB5Â_DÕÅâÄīIĨ ¤“ötÉlËÉĮ+\Sü¨,¤bŖšĸV¯>§Á¤Š e­ŦS­ÛĄ7¤ŋbHcÄjĖg"eĒlĻgncábéo•f}ÎĻž ^Ų¯8'g1W[ˇČ})ûO¸WytzŽPgŊžú |É~‚ū z–AÎÁž!ĄņaIá™Ų‘ųQyŅ'cÎÄæĮÄ8p21ã`JRlrĖĄ ęaįTŖ4# éRGy2č2v2W-gMgä´åÖo>1{’õ”Q~ÂéŌ‚Á3;E2gŨĪĨוŧ.%]/ķŧ˜[ŪT1Y‰¸,zÅâjlÕņꆚĄÚutõ˛ Ļ×Ŋn$4æŨŦēÕ×4ŌŧØōĢŽīļL‡æ‹NĮģ>]áŨzŽÜËī=ßW{ŋĨŋįÁŨ‡CÆß<ē<ûÄ`„<2ũ´aôā˜á8y|æYũÄÁįĻ“ė“o^´NeNÛŋ|šųĒæÂläœūkÖןį{ߔŊM\px'ģȰøķũŗKÕ˧?Ļ~Šûŧđ%đkđjÂZîˇęõŒ?ŧ~Žl…ürßŲŲ€ƒķE!°¸‚C LÁ™t šBČ N!~"C‘Pqh"ēc‡%`pEø‚)Íĸ(‰—–…Ž›^’AlĮɔË|•åë:;…Ø3˜+Ÿģ™į%ΧĖī&%Ø&4/B•ŗ•8-y[ę…ô7&YU9ų…bÅ&Ĩnåį*[jŒę{å5Œ5Ŋ´âáh8Ŗ[ŽWĨĶāŽá Ņ”ņĸÉĒéŗ-ķmK”5› -Ÿ¨Ŋ‚ƒŠŖ’“ĻŗŠ‹™ĢŠ›ũ>§ũÖîļļžöT7/Go'_+?sĶŨ@Í õ`ųņP0Žp–r$}6Ŋŗû)î]üˁɄ§‰ŪOęIn;Ԟrķp}ęÕ´ō#ĶĢŽöe,#eIdæøææŋ~b8īã)BžâiĮ‚č3Ņ]EķįPÅ%–įcKË.ô—}*gĒPŊä^™{šåĘtĸZ篺6÷Z[ŨBũuÍŅnÜúŲŧ§Åŋĩ°­÷6Ô!}'°ŗėî“nLÎŊÔŪŽžĩ~*÷>ŌPTzŦ4¤4ŦôDvDüŠÄ¨ČĪ8Į3Ļ âsü$4šũâķԇé÷/ßŋš›y;;37÷zvūå›ųˇ6ŪíŧĮ}āX’^Öųh÷)âsöJ՗¯_Öxŋ™¯'~¯ÛXø)°šĢl{q‡˙¯ņĮ˜o) ˜æƒ;āÄšÁyû Bq1Š”E ˇQĄ¨7h/ô"&ŗÍÉāâÃŦ„šĸ$q‰TOC§ᑪ •äDFk&fˆyŽĨõ*[&{‡=§—07–{į-ī Ĩ‘¯„?C LĐFHK˜_-˛!:.Ö,^*qXŌCĘPš"ŊĩįšLŊė9WyqŦ„âĨĘ*"*;ĒãjUę‰{-5$4QšSZ×ĩéøę*ë1č­č\6L2r3V5a6ųlúĀŦÜ<ÁÂÎRÖ kõÚēÃĻĐ6ÆÎÄ^Č~Įášãu§,go%Wzסö}yûũŨu<8<>yvS‹ŧÂŊ |¸|V}ø•ø‡hrĀk}o𚐸PÃ0ž°ux]¯<å­Ã bgãzâ+¤&ø$ObHÚH~u¨7ĨîđųÔ#iQGÜĶmŽjfHeōcĖBgũĖūœ3Ÿûüø?ũ';O5å7œn,h8s­°˛čōŲ‹įƊ+JJÎW”^ŧpĩl¨UĄp‰Zyârį•Ĩ*†jÕīÚã×ÚëØŽ›ūŽĄą&RŗnKTk}ÛįÛrîÜŊKî éž}§7ĨīSŋ΃éGÎĶķ<š˙4vĖā™ÄsÆBĶF¯Rf?͟X{Ÿ˙ŅæËđ†ķîø˙Ų[Ú]0JœõĀ…#r÷ Ü+köĒ!Í o=ŌÍûgũ`jđĖ‘Jaž8Ą Q˜F@0ߛA`ŌD2â2â âRiƒLFÖ 'Q8x!fbCh$ZŠž„žÂ0cŦ19˜~,k„=ŠíĮ‘pޏbÜ<^ ƒī%0|7i°44­0ķ %> ‘rHĢ´N´í0›)Ĩ'Ō¤_acøH%¯0Æ0ū`:ÂLd>ÉÂĘRÉ*ÍÚÎfÆ6ÃĮAā¨äÔáœäŠāfänãqáŲâ­¤XQ~ņÕđī ô &Úūwá6‘QC1ąIņJ‰IS)Qi´ôĖž>™*Ųlšxy_…}ŠvJVĘ*†Ē&j–ęž{5â5Ķ´ĘĩÛtĻu?é“ T ũōkL.›ž4K5O´ˆ°ŒŗŠ´Ž´ņĩ ŗ ˇOqČu<îTä\īŌã:âļ°oĮĮCÃ͉šæUáũĐé'ëīP8 BtC…=‰āŒ ŒjŠūë×|€”–ø$I1ųR ÃáCŠ;GBŌ?f„f.gd΍8ž‘—~J4ŋąĀėĖxŅĄsF%öĨ!eGË[. _AUŠÔD^ģ\?ƒũĻ_Ķ…–wí{;ĸ;‡ģI÷¨}- G.ƒeCK#ŖYãˇŸ“_ØL§žęũ:ĪúÖøíû¸ĨC“?Į~q]å][X?ˇ!ųãę&~ËvÛũ×áßķ‡,ŧŋUúĀˆ2b 2č´Ž  Ėa1†D"åTd>˛fäR(OT!ę1‹ÖE'Ŗ;Đ?1ǘĖ,Āęcŗ°Oq\¸\+wÅ×âœ7`îëKĶM"Ļ_“ĖHí´ÚLÚuē@ē—ô6ô} j wȊä&FuÆn&cĻf7æ–XV,ë6ļgė45œœk\ÅܚÜK<xÍx7(×ų‚øyų§ĘŊ„D„–…¯‹ĩãû.>$qEō˜”Ÿ´ŅYŒėšÜŧüS…{Š]Jˇ”á4TĩQ­MŊsī}1˜%}ĐAéŌę‰čkė3L4*2Ž3i4­1Ģ5o°hŗėˇąž°™ąũb9đ8J9Š8;¸Ä¸fšUėģģÎãÉC5ķ ō>îsĶwÚ čt.¸'äk˜x¸wDiäãhŖw#ūk‚JbäÁē¤ī‡´R2¤‘ŽXĻ—ũš)},;k"‡'7ęø@ådôŠžĶt^gzŠøÎk—,•—y”3WŒVæ^ą¨Ŧ~WÛP—ÛāyCų&×­ĩæéÖļö[ĨŠ]>=nŊ{ī+< Ÿ+w|,/ę1ŋŊĀöĖvŅųsä⸒ŠRë Ũ•ĘĢ/ņTV\žZį 7¯)×u4h_īk4š9×ÕŧۚØļ}ûôĄÎĒ.ņîk÷¤{îËô_{Hû(wæqÔĐü›‘ëŖ´c!ã'„žž|6Å6íüōė̉Yæ9ÛיķõoîŊZØYd~/đ‰o™÷#÷'öO۟_­t~)ũ°*ģēēvã[č:e}ü{ėqŖō‡Âģ?Í~>ÚTŨŦÚbŨJÚz°Íŧíĩ]ŋŊųËč×É_“;;!;Íģãí'/ˇģzˆ¨ o?žÚŲY†÷/ķØ>ĩŗŗYąŗŗ} &đ?Ž?˙+v•1đžûųŦ]tīFÕîå?Ž˙Sßy‡x>a IDATxė|UEöĮOzGEPé ö ‚Ŋ7l¨‹}­Ģk/ûˇ×]×Ū{]{ vD@”Ū[HBÚûĪw’ķ.ī%ä…p&Ÿ›šĶΜųÍÜ;ŋ{fî}3gΌ‰9CĀ0 CĀ0 ‰@fÔʔ2 CĀ0 CĀđYŗ`†€!`†@ FĀČZ îSÍ0 CĀ0 #k6 CĀ0 CÁYĢÁcdž€!`†€!`dÍÆ€!`†€!`5#k5¸sL5CĀ0 CĀ0ŒŦŲ0 CĀ0 C #`d­wŽŠf†€!`†@ƒĀ0ǁX,&ÅÅÅōĮČ_ũ%‹/–ēuë ņ¸ŒŒ ī[xŨÄãÉÛŗ$+k͞{3\S[ĩi(ģ÷o+ƒÎč, Ô]e,ø@üŗņh×ÛÚŪoÖĨņ^—PÚDfØĪMĨ {̏# Ä ĸ6bÄŠ_ŋžėģīžR¯^=OŌ˛˛˛jqëkwĶč[í_üãJĮ6M%Ķ‘nxˇûī xŦ„ƒ Ä įJšr"Eî_aQLæĖX&/?3JũĩLnēgG7FJžu2-)U9˙UßTĮŖæOV;éQ=Ŗáde-~ŨB€žÖņ€ŋ.Œ÷u áÔ´]ŗĮÁÔdZ.C`ŊF ŧąM˜0Á[Ööß˙¸E ŗdb/™Ô™ä,ŧ‹uú™žœ›/’[,’SäŽXĻä8˛–ëŽ<ĮÖ8įāģ´åÎĪ-Îté™Ōhãf2čüeiŗ2ôŠ ĢLˆ•yUdxKúís°š.w/æŦkÎÂæü܂ éŊOyįą¯å¸SēH:uü˜¨ė Aõ-otí)*–-šģåā‹ąëÚs]¯‹ãq\ۜ‘ĩJčŅ%K–HNNŽ´mÛ酪ˆ5E€‰hΜ9ōÚk¯ÉYgå‹3YTĨŖÎŲŗgËë¯ŋž°NŌ ŧåĨM›6ޏų ĸ–_īŦlõü¤ĖpŲ˛eōâ‹/ʘ1cäôĶO—^ŊzÅÛpË-ˇxų͛7ĄžĄ~ŗf͒W^yEÎ?˙|ŸŸ´0Ču%L[Á2N/+ˆINž3­šuŠLGÔbnŨS‡ß¯?Œk/:Snz¨ĨôŪn7“ËéIPŗÄ­pe›ˇn&Sįfzyp¨lWŪxŦS§n˙ĨK—É÷sĨWĪM%'/WęÔm(ųšŌ Q#ųdø‡2øÄ“ĨoŸ^˛tyŦČ+”ƍɸqã}äņĮ—Ÿ~úIļÚj+_—GŋdũĻ˙ũ÷ōūûīKT_ WÕõ°>˯îņžĘ˜^ķ˜em {=ŧA~÷Ũw2~üxˇ,đ—’››ģŠ4ōōtRw˙ũ÷û=NZvmdЌĩõÃļ#‹gĶĻMãbkŠŽŠbŽí™:uĒqÄ~ŅÆ¤"CË'j7O~~ž_Öō“ ģYÖOđÄē‰ GŲĪŋøBŧôėŲĶĮM˜8ŅM~,GøôBWļĀ‘Ŋ¸NXĨ|ΒLŲ•féKåĄßNŋãKõC‡GR؃ŖNë'/GT_äi´É5$.yZ>*¯Ļ†‹A.v}B›hO^a=ÉwëšnYŗ8Ķ-‘šĨ@ΰĄOĘܙͤ^ũΟ.ī }\8ūq9iuK‡îČ)(–‚bˇ§Ša]Yąb…',ņ~v€™:ÆĮG}¤A_%1”5iãYn|ގØY€—HūōEōíđ¯¤î{ÉŸŊ'GîĩĨ,Î?aš,YŧP6ëēŊÃĄHæ-\!ļĖ,Ų—éęõ{´\ģT˙_zQ:wî\ĸ‘ësđûôĶOKƅ‹õŖÉ]"Ņņ@yœ{Bįüđz =Ņx,ŠĖa¨ōK#,\ŠwŠxTįx×>3u˞ļ:&)ÅpãĀĖeéˇß~ķ7š ø›iwŨu—ėąĮr 'ȨQŖâņôK^ģîē̎4îoHŽ OÖx Ÿä¯šæc&O>0YnˇŨv˛ûîģË7ß|ãË|üņĮ‚5%–ãTNčŋđ ‚Ŧŋ˙ũīrĖ1Į”YîĪ?˙ôVÂh=wŪy§¯÷ÄO”_~ų%^‡åĮsÎ9G>˙üsuC4Ÿ{î9ŸOËFqx衇|[iĪgŸ}—ęž,ĘDŸ[Đō`ŗįž{ކ Äc¯Ŋöō ú‡åëË.ģLæĪŸ/ûíˇŸŧņÆžZGTo&˝wŪŲãŽV5­Ķ t`baälÅ GĐ°Ļš8âõĀõŨˇßĘõ×_/ŒČ@w dWė|Î'Mšäuėį0ģõÖ[ã“ûp×VÆ cęļÛn‹į×:(OŲÃ;Lúöí+ģ€Ļīáä=ûėŗ~|‹č÷mŠ~X‘ŅcĘxYÛnģ­¯ķW† yĄžīŊ÷ž¯o7§×O<áûÆ×éō6Ė—ķWŨō(rIûĮ?ū!=đ€ėŊ÷ŪrķÍ7{šgģą .ŒËE‹ÅÛąāP}ĶÎwü“åĖ\ˇš—ī,kŽ€qô?ę šoØDšˇôØsĐYΒV$Ë]žl—Qž{9aYL_ępsd͡Å]?É}øˇŋũ->ÆĮ<(îŗĪ>KŽÁčXD–ƁoyãQûgų’\Yŧ(בĸ:˛Ķ>įKŪō)Ι&]ēm-ķæäËļ;ô“=÷>L:ææÛžį( }Žo^Né8BMSų<ärO#L~ŽÅwß}×_WÛģ~>|xIšëßÛŨ˜Ūzë­ũ`,Æ\œŽ—˙û߲ŗŗ6}ôŅōã?ú2ŋ+tü÷ŋ˙•=zHŽŗpk~ę›î ōuŨO?üOį~4ÔmIāgĖ1NŅolŠĖûîģOz9‹ ÷–~UīאņXÕ×Cuwƍš•˜em%åžqĶÃéÍ“ūI'$|°0‘}öŲ~߯”)SüEūá‡ú}HL:/Ŋô’/;mÚ4Oļ˜Č7n,>ø üūûī~IĸĀŌ7T–ØtŲ‚›NëÖ­ũrY#ˇoÄßŨáĒĢŽō$ ëVGÚ8ā˙i_QéŋĨK—ĘË/ŋėËîâ&i&„h9ŪT䓉ęáû`ܰÂļ°ŋ G[Ѕ¤.Ø@b ‰Ę‚Č˙üį?2räHŋDĸ¸–ĒėŊhČ&OžŧŠ>ė‘ĸnŌqČâüę̝^mãÅ_ė‰+ũF>öŨtĶMrä‘G }‚KĻ7i—_~šĮ˛{÷îōČ#åëô' 8tŒ@č‰Ës{pÜÔķ%Ûk­X>ÁO¸ÂŊ÷ŪËåËwËE[û}l+Väy9ŲŲË=‘ŋņÆŨd=DöuĖi§Ÿæ? ˛íļÛ ÖŠ§žę&íŊü˜+›]účŒ%V,ČŨöÛoīw„{”'E_|ÁÎôLô¯ŊöĒŗ”6÷åągĐÕÉ ũØĪt‹“ĩÃ;8ö¸#ËŋxY%dŊ¤Œę{É%—xâŪŊ[wyâÉ'<ŪK–,õVp:ô%w 4•ũaÛŖ_?7ëĘĖ™ŗä7y‚í&›´uãî#ųÕíå{ûíˇŽČ—UڇūŪ*ã˙‘^jĩĢÂ0JĮ Žˆƌė:Ō|ĄŗeԑBŦknߚ{ߗîŽ;ôöw÷Ëa,ŽËÜk¤sō\w5ŦãâJđÏ:â°ŧšO-ų|¤sũņPôüķĪûĨAn¸qäW‹[(7Ņx,pŲîžÃõĀ‹ŲŽÜä;?Īĩ͍VŠĶ´ąĖ™;[:´m,:n"˲WZ¸ürgVIXīWŧt ûÕ° âž|ōIw­ˇtŸ'iā—ûųŪ ēŒŦb<Bč}ô1ųØ=ņ͎o™2åOīdŋ#r¯šæZOüØį9uęyįwåÍ7Ū”ąãÆĘĩ×^ëŪR}F.\ä­ūpVᎏ\?9"Y2~>/ãë‘Gs˲OČ͡Üė0+özüøãO~ ĘȑßČšįž+ߎüÖ?$°UáCuú},wßsˇÜpÃõōĀÅĮŸk†“QõãĪí*ßQųŽQÕ>Ū3æVEĀČÚĒx¤âČÍí /”wÜŅ[gxę{ęŠ§Ü äŗdr%˅XJ°ŧáūųĪzĸÆ9Ö)nDW^yĨ';äĒ|H d BByŌ¸ĒLŦX8­BĻ„Á'¸<=˛×…˛L„čĸå4‹Kĸz˜$‘ļØ[…Ŗô§ Ÿ¸dm†Ä!ƒ¨‹§pČ'2tô‚Ü?ՇāBIĮĪ[ƒ%}änėĨá*Éīsø|%˙ümĶ/&j–ØĪöũ÷ßyŦŋúę+omęįˆä”6~øáž¨bI€˛XĖØëS§N–ˇvŅˆũŽc7kÖÜëå#JųB¨Š¸—#TVĻ{;ō%˛Fų=IžŦSk3ņŊ{÷öQģíļ›h`BcŌCׇ~Ä×ņĄĪŖ¤ŸrĘ)ŌŽ];_Ž{÷n˛`ÁO!xćm Ī}jøįûŠeOGĘ õ\˙¸IÚ5ÃQú,ÃŊí‰_âxŒ ÷]×ķßĨ92į2;R”‘%õŗÜ¤îŖ¸:fČ:ĮĮ1ŪÔ]wŨuŌ˛eKéŌĨ‹'DäI„‰ĘH4]Į§ĘæPˆX–#b…ŽėŦČ[&ŗ'“géÎČĒ'ģ÷;ĐųLîÅGė ÜAģé?ŊJt)Ņ´UĢVū“‡ÂPŋ’ˇIKō°°á†­¤K×.ō˺Ώ|™Îb˙™<Ŧ"7Ģą0↠cûILnģũ6Æ˛ÆøĖp}Âũįä“OņņZōŅŦy3Ÿįë¯ŋ‘‰'øņEFŌqCNâīĪîåÚr•Œ;Æ?@ŖÃ AGųđ ­8m‹úÄ%Ķ›ebÚJ]zŸsd"#ęč7&/ũ¤y4Ŧ“e8×# Ģ<2–‹ūũû ›üÁrà 7ôe°čBа°AⰐR‡:ôc ŦuB¤ q&?‡†)ļGu7Æi(‹ YayŦ&Mš4ņōŖåņy 1c‰0}¸ųæ›ĮëåĐF"°´q0ØģEåUžp˙Ē: ž8ę†õÜ7ĶÜᨍ8jî­j17ņ˙ōŅP;âMOßČßyģŌ÷ Sŧ…­Øíį ĘÛŖËW¸’ę‘%ŠŖ.=´~2Ķ~tĶ?âH]t<’F~} 5.ەÅâVčž× AiŨf3Š×ûųr‚ŗė-üD<äˇüé>[˛`ž4rÖŅBˇė›á,‹ú`BŊ*%[úXûM}ō 'N¯Mp˙H ĮņÄŠĪ8â^Ā8ÂqM¨\|ͯņäc•€‡bP°sÍh>ŌqÆį‰ë/Œįœ{×Nå“?ŠûēÖ>¤Õ5Ū=¨öoVŪŅW‰ļ@*pŗā"f3aqán˛É&Ūâ‚ ōÄR)71ôø üÍQÚxãŊĩ=eđ†L|n`ėßÁ˛ÆŪ'âđąh,\¸Đį㜃'lĘiY=ĮG.ēh9Սrč.Z$,l õ„ÄQõ…t˛ÔÁk”!ËSX–ú(›——įÛAãSÜ,ŅQįLū´3˃Ldc%[mw¨øDÛČĶx‹-âV ĩœA:É22û!C”OĻ7TžęY˛Ą{lԅúG˜\é{ôÔɌs “Ÿ›ŧN0a˜x˙F["Ÿ8qĸ_ÎÄŌ¨“zƒËŨwßíąTšZíc˙K•Čš1c†ˇ&”X˛VN~ĒŖ–SŊUÂēäŽ,ôeYŽņ6äSŨY+Č5N—˜Éƒî”AVUHō´.|Â\_ôû ąÎ1ž´}\z§įøUV|´žFuŗYĢ#Ũ/4)=š:KŲļ{,‹ĻO”ŋ~!s'ũ*Ûc”ņ‡Ķs|œĘĐŧ>2ˆ/o<Ō6pĪwûīrķVČč/Ÿ’ī?žW&ŒūČrĻAƒúŽœÖ‘ĪŨËOŖã x¨#Ėž:׎úī¤}ųå—2`Ā€x{‘[]ãOĮ]uÕWŨãŨƒm˙VCĀ,kĢAR~+={°j°‡‚}P/H(–2–ŲW‚E§7T=gã7Ãy2ŒŪt c}b?7'ŦbL\lFŋãŽ;ü7¸6ŨtSoí`P˙ūũëÖú,G„å°¸\tŅE^W^Bā;eZĪĨ—^ęëa#pYmaâ`s;ídylˆC—(A°"žcĮŽ~2žá†VÃëäĩC‡>Ë=`Ė¨>ėÛQGÚȞ8Ú6ÚFnü,˛œÆFa!ûųČĪOAąé,hToúŌpÁø|X†=ôĐ8ÎZ?>xĢcōāFÎ.¤qÎ ŒΤĸeÉN:äáĨöFžúęĢ^d—ũdäĨ팁°ŦęB9Æ/L:Õã€ę´nՓxäQ/‡Ęäœ}<ŒpG{ ™8´.d1ÖYîg/ cGyž;G[ĄũÃXwÍŖm˙ĖŊ|žDÆ ú0ÉĸK¨'2ĢĶ)V´—sHZ#ˇß.–éŦŌniØ­ē#Sš6j-GŸĢmOmđĩŒ#ÎĢrŧ×ŧĒĒ öÛ k€ŦŪôđšqsãɟ§-–=Č8Ō9°Ü`ąá&ƒãbNäTn4-Œ§,oÂaŖŌЁƒx,Ü$õĻĻsޞôœrX7ĐMõĻ~ę!žz8×ü<}†m uUŲZ^ÃęC–´,2U.zc1ĸ~Õ[Ķtâ`ŋ$IãU•Ių¨Ķ<øÔAĩ^ōąÔ~ŅüÄąt§x„uP^}Ö:)Ą{xPŧXĒæĻÎK#ÚNâ)OŨ´‘1ÂAāĐEÖŠqęĶ&,\ēI<{ņˆ -'Š™ÖA>^\OÚ¨ōŠũĩMZ?:ŠŽœk~ՃžŅqĸeđ5üŠōqĒ“æaŦŠUMq×|šũ!ø`âmCTŋĒ +&ô%„˙š?ZHĮ Ü5I3Ũ‹ŽŦi[čÍ7ž]>íRø›ëgȚ;œaĖ­"ē7H eōŒÅ2{Ėhš``}ŋ׊>„<áĀŦôz ˁS ĩÔŠø§ø¤2ŲE´gîŧųrÂ5HÛvŨŽ4qKÖ͝>õ¤Ž“ŋtŲŠ3÷šøĸĢ$ĮãœœåîŖšõiŸ$ũwhåûˆqDŨčŠc}UÎqčĪĄí!ŊŖí"û×ĻĻ‘Wíc|0Ž |ÅBë%Nu‚đŅ^Č+˛ņÁœˇGŲ“ÉX ¯‡_ũÕ?üaQ#?×ųĩ­ZW"ũUgÕm] Wįx×>5uV>Z¯žf1å ĀÅĮ„ÉS?`xP”‹YɄ^¨ÄsÎĄų‰Kä4Ļ!Kå„ŧ’ͧ~XOTannęT.a­GëĀOÖŌBŲZ9¯e ‡õ0Ņã(Ŗr|Dđ<šD{}´|(Së×ē›07o×zņ!1Z?ԛē‘A<}ŽNë åkVPnōLLÔËÁFšŪ sŽōU­ƒ°ÄašUY”ab˛%N' |¤iį,ĶããTO|ōĐ^&uäC/&ÃP'-,Õ ¸h™Ÿ(žH í!o¨ōĐŧȃ~čĒžĘÔrZWU†ĩßĐũZ6m,M›š_…:ø\´cŋhPâ†\qŠĻ„¤ņ‚kŽëqãĀYērëH=wŌ`ÁwŽûÄÛŽeՏļ“zŖqN–VÖxdLĶ.\Ŗ† d@‡ņîÛo“ũ†ũbXĨûÜŽUzōũ´QōöĢ˙u„ĨšŧÅ qmØīČ8顏§XQVûũ8GzęŦqÚō…÷$ŌCšÕ‡,-C]:NˆĶxôáœüČåĀ æaląOMõé8Æ×{ųk=øČQũ´Îu=Ŧ}Xã]ą7%+īĖ+ãė,ôB$kx “a:ņÜ,đŖ4ų4N˨â9×xõ5]ÚO/2­GëÔ|ĄĪš:­ƒōęÂ:ˆS™šŽqøZŋĻEˆņzŽžÖ­žÆã‡qĄL­Ÿ#Ė-ãYQŒĸeÃōZVķ$J#Ž9–%یä§Č˜T¸ņQ—ÖĮ §Ķ7Ą ÛĸiČVZ6l¯Ļi>ęĐt|Õ_ķP†|øšŽlō3)EˇaōEËhY|\X¯†ņĩ>Ճ¸đ\ĮĒ–×´°\Xˇ–ĮWWŲéZˇĘßpCöō9Ŋš›ē #PíąœûéūaUŖ›!kŎädÍ#í.öã%ĒĢցOšĻã+&ašæŅ|ZžpyãQąf‰˙ėŗ÷{´°´1fIãŗYYŽ Ž˜æžmįöIîļ§3=Ũl6ŠŽmÕAã k]´CļKãÂ6’' kmĢĘ'ęÁš–Å']ŌB™ė‰ãZÕ2ž ûĮK-ŧDĻrC?ŧnTŽ–Ã'.tëZ˜ļ†:W×x1ŗsk1RE@ŦúŅ›QĒr,ßúãƒ}Xėíâšŧõ¨{¯Â‰&œtlæQŸ|:ąOM×p"tIŖŧN’äŅzņõœx•Įš–͏Đįœtœ–͉×0į8ͯņ„õP&?qčŒ ã)¯m!ž:õRŋ ¸åBĮŧˆsĒ:͜:Ĩ!P,ŖôsY™.G~‘Lķ‡üüū;˛xę/ūãŲ‰î'ŠIĸ´@tJ§åĮ°O\Sád\@ôøŌņƒ >Â͡ôBĢzŌ*…8'NĶˆĶžŌv…ų58×ž×0ypŅē';´ŦĘÕ|č q%RÅŋ]Ēō5Ÿ-HeqøaŖãŅg¨E˙Ēsŧ×"Ø*Ŋ)ļg­Ō!5ë;ēO‡Ĩ!öư!™}0ėuay…%KžˆŽ“˜úāωž+–:9āëŖž–!ŦKj ! ˘šWoĀøä×9äC/&gÕOËãTåBŊ)Ku¤“Wãđ‰ĶøPŽĘR4/:˛,ęĒōĢËKŦIô%KbXNŲRĀ[ÎXĸЏ1PžÆoaķv3-HöUyåSMOuwø–ŋũČ1;uę”ôM.ŪŽš2eŠ˙ÎV¯^Ŋâ5ViSŨ~úé'˙â|ˇŠ*ę‰7ĸ‚'čÉc'Mš$Ŋ{÷öRĒZOę\ž|š˙HmuÕYAxŦ˜!`†€!GĀ,kq(Öü„oaYkßž}RĸĻRÉ3}út˙=#^“Į)ąâüņĮ÷ŋ¯ĮGTųPæN;íäŋ"NZ*$&”E™ŅŖG{KdMĶR‘CŲĒtĒ u@Öø&%Nš–ĒžäO%¯ĘĨNúĢŦ:S•‰ŦdŽ2d$“mņ†€!`ëļg­‚}΄ĖËõ›3œëĖõįH Kâôƒ“ä%eõ zÎqûíˇŸüņū{K-ušŽáō|ͯ~yųĶ•ŽúПŠäåāįmžūų8ŽŠĘĐ|ęk„?ũôSOä8Ļkždž–YÉd[ŧ!`†Āú€YÖÖĸ˙YŪIJ9sŋŪė~øxåO⠖4Ä!l„õƒ“Z­Ļִƍ{ †ŸūŲ/ō[}Ûnģ­˙=AōŋúęĢŪ*5jÔ(˙QÍž}ûJ‡âDCeūųįūwûĐ+{įpüäŅW_}%‹-ōåwß}w˙e}–PYžŒÖœ‘A9ĘDeIes†€!`kƒ€‘ĩ ĸ§$C÷ą,1äőWËé$Nĸ‚›6mš,\¸Đ“…V­Zųx,YäųöÛoŊ?gÎO!~8,:ėcO2įΝë_x Mec!›7ož@Ų`O<äqęÔŠ~éUj†2‰ęÃ2F}XĨŪ˙}Ųyįãä$lrÂņ”WČ×4ę3g†€!`T{Á ‚Č1)ãXۃdp@ ˜ĐÃCãH'/NË깆ņąmžųæ~/„‚ƒÕŠiĶĻ>Ī„ā”4`‰ã|Á‚^ōAÅu ŌiB/Ō°”A$6ŨtSaizˆOVd„2ÔÃ*K˜ėíRŊĩ”×<O,yČĨ XöXŠĨ}øĒ#e9'‹›ž;|ôVËōÉC:An ' Ŋąîa]ã…ʲÄĢúǝXŅ?4ä‘7ÔÜUoôdiōJ{Ø(ÃÁÛˇ*Cåú íŸ!`†€!PA˛.ēčĸk+XvŊ-Ļ“0d}d$%b„đ$Âl†‡ta-‚h¨C“<ßkÛb‹-|{ĄXĒc/q Čéˇß~ķûĢ 0ėŋB6„kėØąŪڅ|aˆU‹-|äąĮüX›Øc‰#élúĮĸ—¨>Ęģīžë—j!†XÖȏ<í@ūÛoŋíķ€ ¤Ž=q.>[ž7|–{ąœAjؐ߭[7OČНĨRÆĸČĮ„9 D6ÚOYäBĀĐ= VQŊ!Ŗ'ˆ)å؃†uōÆž4âÕĄ?ũÂ2,ēS‚–Ho^Ę@ęG^Ē€ŒCÜ*Ŗ“ŗ&ĒuMqŌúĖ7 CĀ0REĀ>Š›*RA>ĩŧ@Ļ QlNgâ.Ëae‚˜ėļÛnž@čä,HįęHgĸ‡Dā4d@ËžüōËūeâČ’Ęh>d@,!ČQbĸy°N)Ų$Ë:AАÃAķ CĀ0 Š `–ĩ  ĩ°9ž%@â•x¨X&p&o–JYÖcį žŧj‘ĸ|ԅō” hY6ÕĢõ&LSZVë!>Ėž‡e´qčŽųĸņ¤i:ičO[´ž0?į*_ĪŠ#š_ĶÔ'žĢ– Ī5_ĪU>ųpčŦ¤Œ<šŽũJãĘ#ĻGĶ+6ęgÎ0 C+M2)Ŋž—ŅI™=SXx‘- Š’…M'pŌqæ2 Žķ0MãŲ˅Ķ4|=×=ŽĨ´đÍÎ5Q+ŗ*.ĩ˛qÖ(CĀ0 C MŦüvAš°j CĀ0 CĀ0’#`d-96–b†€!`†@Ú0˛–ö.0 CĀ0 CĀHŽ€‘ĩäØXŠ!`†€!`iGĀČZÚģĀ0 CĀ0 C 9F֒cc)†€!`†€!`¤:<ōHڕ0 CĀH†ŋøŅŋŲlŗÍ|–Ęø~~Coʔ)ōŲgŸųßÁMVŋņ€!n2~ũõ×?ŧ͏dķÖzKˇbVŋ!` PPP ŖFōŋ­Ûˇoß8(!máũí§Ÿ~’qãÆIŸ>}ė{‰qTíÄ0jÜßxPåwÅųYÉ:DpđAS’ũdRMPŪt0 õîMÛlŗŒ?^-Z$ũúõķ÷*ˆ×š6%j<”~ņÅ^DŸŠ[9ë_X‹ C ēāžĮĄ-Ã=YÆVŦXá­jüˇ9CĀ0jĢđĀÂ6iŌ$á~ĩīžû ŋɋK…h)QËÉɑ>øĀ´Î;{‹ZüfXúāZÚn:†€!$aDķ”&Lˆą QÃĒĻ75ƒÉ0 t# ÷$îOzš>}ēL›6MöŲgiŨēĩWą,ÂĻ÷´yķæÉ‡~(›nēŠ´oßŪ?ĩr3ä iŅtqČAr‘Oœ9CĀ0j*v‡ĒŠ=czë1ú˛ĶâåE2æ/ˇäé°ØqŗBiÜ Ä–ˆ„)#MĶÃ8=ĮGō‹|ęÁiŊ>`˙ C!YĢ!aj†ĀęŒœë,`Ä쟜jĩ*qJŧ””E ZYé*ŖD^Ļ—O=æ CŠÔŠŠŠ™^†€!°~#€•kęŧBŊŦ˜{Š X23šr/ā dzčËĄeLĶ”ĐųBĨ˙ˆCrķ‹2|=”ĨŒ9CĀ0j&kšųÅnų _ÆL˗iķ dYŽûŌ¸ŊWZĶú×ô1Öab2mAĄ×ŋEC÷RA)‚h)a#‚Ed+Y‹0ōâ×Üɝ—!ŸŽÍ“Iŗį#ͧŲ?CĀ0ց,w“Ų°YĻ´iVGÚ4Ī’:7páŦ ‰]c˛6gqĄŧä6ä~2&GrķUu+dk„@“ĢŪk6HY”ŦE+QĸĻņMÜyŲâöŦÅÜQbÅĶ4ķ CLx@ÜĨ[C9bĮ&ŌĢcũ¸čđžŒœ”KÖ¸ę“éģ?fËC.^…¤ąj°QS‘f yHˇ !`•€@‡ ˛üĮnŖĸB [4-Ž5Ōˇh#RˇÜģ`T’… CĀ(Vįˆ,rGÉí"_ŽĪõĮÉ{6—Á{4‹ )°e”÷Q\%kˇŧļ@†˙ęj,uÛté×U¤{[‘†õŒĨ).憀!`†€!"đį‚˜|ūģČדDōJø{5’+ŽhĩÚްœž—KÖČøâ—Ųōä§K|™ÖΊvęî4#h ĸų†€!`†€!`”‡Āė%1šû#‘Y%”J.<¨Ĩėß§QyŤL˛†YîW÷ÁÅΰņV¤ms‘˙;4C™%­\`-ƒ!`†€!`QrÜ~˙Ŋ“ųnŋ,+“œŲÆŋ€ [Îĸų 'Ũ­Ąë§¯ë¤9× ŽČ…ûfJãúUgQã™ķōō*ü5qö¯4hĐĀ˙hŗWÚū†€!`†€!Pƒ€GŪ?&ˇŧSėßāĨÍķhî—C“ļ„dM‰Úŧ%…ō̈́<ßÄ]ģdČÆÍWžl í&o2áŅ´ha܊+$??_ę×/yKBĶÔëÔsõҁ˛ø7ö҉ĘEuæQyøŅ´h8Q+ŋ(^Ұáˇú[‰Ūęi†ßę÷šD˜(†Ņ´hØÆßęcLąK„ágãĪæĪUU\˜ĻM›&ŗf͒ Hvvļ4iŌDZĩjå¯xĶM7•† ŽÆ'zn’!}:ËΉ˙ēÆé›HÃúYĢåĶk2!YĶÄī&åÅŋļgĖ„¤,ÚyZ?š 'Ęa{ôŅGeūüų‚Ĩ-++KęÔŠ˙Žāpāôŧ°°P6Ø`9ũôĶãD/‘ėTę÷‚K˙EķGÉęHĩ|AAL™2Åw(ēĢėüQŪ~ûmŲf›mä°Ã ÅÅķ„‘Z.Œãü™gž‘É“'ËāÁƒũZ'“›ŦüŸūéqoĶĻÔ­ëĖĒÎ%ʛ(ÎgōΜ9S~˙ũw?pģwīŽÉŪOĨŧH”7Q\˛ü‰ō&Šŗō%Dą‰†É•(Îđ3üDc%Qœ?ëĘø™={ļüöÛožŦé¸Å_ļl™?ĻN*ͧO—=zøų/ĖÃy˙Ŧ•XרrļC÷Y$.)YƒņM5\]÷ ˇNVĪ/SAĐ {íĩ—'k#FŒyķæyŌFŨ8WŸs~¸YĶËēœxâ‰ōÍ7ßx9üëÔŠ“pĀrėąĮĘ&›l¯ĒØ÷-ˇÜ"_|ņ…gāÔS¯^=ųōË/=áœ4i’<˙üķ’››+‡~x…Õøøã};  ]ģv•Tåū÷ŋ˙•wŪyGūúËŅ}įĀōÆo”cŽ9ĻÂēЇW_}ĩqÄrûíˇWXŽ4 CĀ0jĖå?ũô“7,•ĨV7æķmˇŨv5ÂÖŗF°bĮeøâ˛Ŋûhn2ūR&Y›ģ´„ĩt̊É”ĨdEŌ°’ą÷lŅĸErÖYgÉFmäÉMŖFŧ…‡4ĩ¨á‡.˛Ļíčßŋŋ,_ž\~ūųgyā<␍Ēv•÷Ū{Oz÷î-'œp‚ˇ8}ôŅGžMĒ:p†×T¯°lô< ‡r?øāEķæÍåŠ+Žđ{?üđCO‚“• Ë';īÖ­›œ|ōɲõÖ[¯Q›x*yöŲgĨYŗfōü#™x‹7 CĀ0Ē Č5Vq[mĩ•Œ3fĩú5ž|äĮ¨Ä’¨ēFnīÚÆîSkŧƝĩĀi’ÍĩĢ‘5%@ø –•’ĩFĢŽĶRU0+ŒKtũ eX^ë$N-fŧ(pĪ=÷x+ÛQGåׅąˆ’:ˆuŗfL~Õ#QũZ‡–=ķĖ3e‡váÇËgœ!,H,ģĻR>™ūZĻGe9ŌËŋæšküR'ųŽŧōĘxū$ō/”ĨI§>ņášæĶø0ŦqÚĒķwß}įŗyä‘~I™øSN9%Ą\­KũPfôœ'Šž}ûzŲúOËŠ-C<Ö§žzJöØc-÷ĩœú‰ĘkģÂ<*@ãÔˇōĢŽŸd¸~%(>ęÛøąņ“ĘX°ë§v\?XËtõ BÆĘūK/Ŋ¤]ėWëļÜrK†Č‘ŸũkŦtéXÁoîøÕ,÷9~˛Sį,|ŌB—pm“ŒEĨ?öÉO$P0<BÂÄŪ'Ÿ|â‰~ô’–å\Ë̝˛Ôr6tčPyë­ˇ„Ŋ]oŧą´nŨ:ū–(„Ōļxņb°>ĖËJôBų‰Î}åîiX{p999ž.â¨{˙ũ÷—'žxÂį!ũŌK/õËĨŋüō‹ŖN–OYǜ3gŽ'7ÛoŋŊ@°Øá­Ÿ‡¸~øaĩ4â5?įÉC9DXĘD'•‡Ī:8$ŗOŸ>˛ûîģËmˇŨˇ€…2ô\ũ°ÃįĐ3XėÔx-C˜'° Nį~ûí'Ÿ~úŠĪ‹5LčīË/ŋܛ}ÁK"ņwŪyg\f˜˛ v{īŊˇ|öŲg>Ό3äēëŽŖjåŋúęĢxyÕI}tKå<ÚĻTʄyŦüĒc:Ä&•sÃĪđ ¯ÕTÆL˜ĮƏŸš0~؇­ŽųrėØą1c;Ÿ0ņĄÅrĢé_*¨¸”w)a+Ž{ĢYÖ4Ĩ„°•†JÉšĻ…>–(6=:Œ^åŧgĪžqWIˆ¨S­cŧŠĩ RōĐCÅ'¤ŒƒŧJėTL”Ŧi|2ŸüĪ=÷œOŪu×]…ĨVot°!žŊr ,Ŧ˜8HqÔO˜ũfûÛßü‹ XøbV"wđÁ{‹!KŽ&Lđˍŧ5uā‰ĩo‹-ļ–!t4mÚTܯNxų!Kš<ōˆ'´§vÚ*ĸĐUÛ  ҰÆxā~ /7 #mQGÛ!§ ¸Ž; ÖIöB¨‘ÉĶ˜\ũõūŧ]ģv>~ɒ%>r§uk^ũŽüņ‡œ}öŲ!†ÔbŖ.ˆ:¤°mÛļņōĒ“ų†€!`†@u" ËŸZ'5%hęCÔBKy)§s –•;ƒã%ûņãņ‘“„d­„¨­ÜV\äŪV–#2¤E‹ūĀŌuL´ ˛ĘkŦ9JÖ4Nu! RĖAÜH'_Yu‘ųÁzáÁēvà 7ÄËi=čĸ˛´œĘ×xˆãĄ‡ę— Ÿ|ōIų÷ŋ˙í-MXæ9Ču>ūøãōę̝zë˯XĪpZ7ēŊđ ŪdJįCŪx)|Xüčt!„ Bà ˙ûß˙üÛŸČ‰ęĢr!FĒ;ųB׊S'yøá‡åâ‹/öäŠåГN:ɇ!åčL]:tđ/!č’12Šu˛Į kĢŽÍ'Ē[ķBô!…āAä-TĘî˛Ë.ž ņ˛ĻcÚŠõøûg†€!`¤>Īu!aKDÔČOščü[ėw›•06å;Ģ:W6!YC(…ÜNŨrhąŗ(•|oÍG$ø×ž}{ŋ$&ąO k™T€Lā JJĐtb§%z•Î52œ#C?5A\ÔŠ|,w|2âÄËXņTO%ø§åЉ8œr)â ­8djšhũ„yqkã­ˇŪę­wįŸžˇŒņšH RĻČQË* ܸqã„˛ę°ViŊQ}U.¸j-úXŗØÔĶM7 履~Ú÷Ņ^¯"Q§uōÆ-}Ŗõ$Ē[ķ80Že¯^ŊtĄEM—DŖ–5ĘEį˛ĸâN {åW~–,”Ģį ÷Ŧib)W‹Ë:´D?}Á2Ë[Š:ȍ*iĸ<ņJÔtĸWšÄs¯y4-™îšįĘ]wŨåŋ%öāƒúĨÆdyĢ"ž_ŋ~ōâ‹/úo ŅļaÆĨ\ ųqXŽ tC† ‘Ŗ>zōš˛ĀHFúíūûī[éØsFJžčëĒp|O§õTE&Ķ0 CĀXÔ0Ŗ2BĸAàĸ„MķāG˅iʡ’q˜„d-YæU'đ™ %g0H>¨ēĻÂ] e¨nøJZHװχe’ŗīę¸ãŽķÖŦk¯Ŋ6nÕĶå=^"Āą4Į›‰•íč8öĘáXöLÕmžųæ>++HgxDßēMUf4VL]Ęå3*X7Ûl3Ÿ ËWU8ŨˆÉ˛'N-¤Ņ'˜Ē¨Ûd†€!`Š Āö.uėÅ֗ Ԓ6ŌՅå4.U?é2hĒÂ|ö3Al B‰Ö]ÃüŅsȲ†UM—=ŖDŒ|¯˛!‹ĘOfC>–#ˆËX¨X‚ÃņV+V$ŪvT—HÆšÄąž=r|ÎbîÜš~īåYZLÕ 4Čo\„Ŋķ&%K‰KÚĀ›šJ˜S•§ųx‘ƒ}‡Ûmˇßā¯/_đM8Ūå*XyŠā‚ .đaöÎa‰ãmΊ8ŦšXÔøp.ãŧy™G?fšË#¸ąŦnÎ0 CĀHĖC|‚ãĒ‘A}Õ ÂQĶxĘŦÍüUŠd %ąuîÜ9ūU<ĸQÂÇY!HJĘ fĄÕLã‘Ëšū‚įkâ !įwž`Ycs=Ÿ¤€œ° Dî’K.ņ/Œ5jMD'Ė ņ`/?Š…cƒ=$3jĒŽ=l6æķÆ(„ĸb”Ē<Íņzã7ü‹ ÄÕáwÔ IDATaåå ~Æ ‡åôžûîķûŲx €bøĪūŗÂdˇ]/ģė2ŋėÍØáe 5c…L3čųú‰7o͆€!`éB€=īŦpņVž”EõŅxø ųõwĪŖųR g¸Ī@Ŧ|íĶ•`˛WKÕåĪ/’q3‹Ĩsë"š`@Ų/¤RYyy ŧõˆ5ŌĩĖ)Q‹›ĻĪō{Ø¤žá†–WUJéX™xŗą˛–ĩŌ…  ŋ)ËĻׯą<É`HU†õũ‚<-Đf]öL¤–<–'!tÁ‡—,ž˙ū{šûîģeĮwôoˇŌíͰNú+$u%JķÚš!`†€!Pđy/Vš˜3“9æyˆZ˛%Đģ>i “æeIĪM2åÖÁ-Ŋᅹ<:×Uēe-™ÂŠÄC\°4a]‹*-MgBĮē´ļä'ŦG- ?ŨQ~1Ëa†€!`†€!PYĢ”­CĀ0 CĀ0*ˆ€‘ĩ gÅ CĀ0 CRÚŗļ`Á÷ņÖOĢCĢÃ0 CĀ0 õš{ēv–˙kO)‘5~ūį’“/Y/€ŗF†€!`†€!P\øäYôįŠr̞eĐr!˛ †€!`†€!`¤#kéÃŪj6 CĀ0 C \ŒŦ• ‘e0 CĀ0 C }YKöVŗ!`†€!`å"`d­\ˆ,ƒ!`†€!`éCĀČZú°ˇš CĀ0 CĀ(#kåBd CĀ0 CĀHFÖŌ‡ŊÕl†€!`†@šY+"Ë`†€!`†@úHé Ō§ŪÚÕ\\\,ãĮ— &?™Uˇn]‰Åbū@rFF†¯€8 ×<ž¸-S˛˛Öė$ÃuëËĀ}:ʉįo% ÔõãÁū†€!PŲØŧTķįŨš8ÔZ˛Æ1lØ0ÉĖĖ”Ã;Lęׯ_ŲלÉ́tŨyžtÚ¨™d:"w˙Ŋ–ąO f8GŲi)r˙ ‹b2gÆ2yų™QrÁПČŨO tãĨÖ^%ØCvl^ĒvČ+TaMœGÖĖQĄf§§ĐØąceŊrĀHŊzõŧXŌJ&q&ō’ÃÂ+ą¨ øĖÍɍeJNq†äā;˛–ëŽ<ĮÖ8įāģ´åÎĪ-Îté™Ōhãf2čüeaŖ:ōĖÃŋĻgĐZ­†€!P̰yiŨ˜wkâú¨â›’-sĪ=÷ȲeËR*K&Č"d„‹Ŗ¨¨ĐLž1g=).*öņ„I'üŲgŸÉ?˙ųOž5s–×7L÷ų\~ô8ëŦŗV+¯é*/ ŗ DŪë¯ŋ.cĮŒ]Ŗō‰ôEūŊ÷Ū+ãdé‰ôO¤_m+Ÿ[“wäēqā}g1sūŌåyōĀ­Wų1ôāmWĘâė\ŸžãZN¸üŽä9?ÛųYÍĘōåËSo–Ņ0ĘG E‹ūa•ųvÚI~ūųįō U Į¨QŖdË-ˇŦ@Éԋp]SˇĻķR8Ôļût˛ö2_—ĖËélMœG*ͲöÍ7ßȸqãäë¯ŋöc˜™IŖÃëÔŠã}ÎŗÜKĄ%Iõ*YyīŊ÷dīŊ÷vÍš+.Y6ĨœĻkū!'Ÿė_ą—K\4=^äČûæZļléËxéä#;•ōQyŅpē82Ē.šž>†!]yÎJÆ&V5÷ĪÃ3lč“2wæ4ŠWŋķ§Ë;C—Ž?G…/Y uD>§ X Ü^ˇĖ†uãũÅĶ›9CŪ~ûméĐĄƒ_š¸ëŽģä駟ŽÁļŋŒ92ˆŠÜĶgžyF>ūøcÁOÕUd^RŲëË}üųįŸ—O>ųD{üņøj¤Ŗũ5qŠ4Ëû{ūúë/OظQŖFxqĮEÉĶ΁eúôéņø[oŊUúôé#Gq„üôĶOņød'G}´@ Ësĩüü|G–ōŨÄëDŦôāŠˆ#VūōË/e—]vņa}bēīžû¤×V[ɉ'ž(ŋũö›Ī˙Š[E_ōwČAÉŗĪ>+}ûö•ũ÷ß_ĻģöëĶy†ģ zĀ€>ŋ¯ĪÉ3fȁčÛ|ŋĢCķ?đĀ˛ßžûĘÎ;ī,W^ye\?n šzvŨuWšũļÛâųšøüū{éßŋŋlŋũöō駟ÆÛC]žž$í­ÍéųÎ:–›ĪRhą÷ķãčÔrß°‰roéąį ŗœ%­Čå‹IļŗŽ-Ę+–šË dúRĮôY3gUƒŸPęŅŖ‡Lœ8ŅWpÆgHŋ~ũü}ėšįž‹WĘJņĖÜqÜģN?ũtŲmˇŨ¤wīŪ˛dɒx~=áSMGu”eĮw”wŪyĮßC)!Āqß×ŨsЧK—.rėąĮú8ŌžũöÛUdüûß˙öųØĸsĶM7ÉđáÃŊ“&M’/žøBN8ንëR™—ÎqÛ[0pĪá…â÷uæ$âwríD÷qļÆė”Õy`÷Ũw°eŽøÄ•ˇSN9ÅoÉ9Ü}-á˜cŽˆ4ųtsŅwÜ—?Ø­”1į’ÆvĻ'™bžf>â‰'äå—^ō+iûėŗŸß˜W—.]ęû ę?Î;OfΜéË'›7™osķķØĀ=÷ôcŖ+YŨĘJ_Ir:čŧ¨ũÚ^W+މķHĨYÖvØa9ķĖ3e=öË.ģL.ēč"˙Ų F/äė?ūīš`īŲKŽs/žøbß!\D<aēūŋ˙û?Q•5âo¸á†ø~¸˛ōņÉŦ"yyšŽ´­đįŪFâ-%|ļŨk"SĻN‘6Úȓē|Gė°˛ [ßY`>ū‰Üu÷]rũõ×˃>$ķæÍķi˖-•… ÉwŽ=ŊˇŪÚYæŪ•+ޏRžwƒ‹gäŋûîģōfđqŖ¸ãŽ˙HnnžwÜq~öčŅŨ“´AG rÄß\N:éoŌvãå?˙ųœvÚŠ˛×^ûxĢ^vvļ—O۟qD‘‹åÃ?ģīž[úöéëËkũ%í%įĘö–<˛ÔŪđŒlg›[āÆžkŊ{$Kds<×?­ņËaö­-Ë-–9yŽLÃJģ,ߜ!`”"Ā$Î}ņĄ‡ō“9Ņ˙øĮ?üō(ë'ģÕ ˆOnnŽÜxãūáà 7ô=y!Fcƌņä!Ņj yXÍ ūų§ŋOžņÆžp¯ä!š|?ūøŖ |ņĨĨI“&îķY¸šķyōÉ'åÜsĪ)sŪ<ûėŗÜĘÜ7rī=÷úyėŖ>ôũōî;īr—v­pÛYœ~a{u¯ėy­&Î#•fYc ūë_˙’W_}Õ_0oØ-2áÁÚÖŊ{wßáÄŗ‡‹ îĒĢŽō›úaī\$ešnŨēIS7ØĘs<ŊaíãâĀ÷įĨáĖL™’é˜ü^{íCđZˇnힲŽ‘†Ę Aƒä̝žrzō’BÉË ”‡ īōË/—ƍ›ø'3Hõ‘ÎĀâɑ§­ōČk׎ŊtîÜŲ“˛#FøtÂ3fÎđ7t;×ÉrúņdyÕUWË[oŊ)uęÖ ä‹ĮēuëîI$ųĩ~mßúŽį°Ëwĸ (Ãû…œģĨM=V¸sâ Ŋ/.>SœNV¸Ŗ(#KęģōöQÜō./K7*„V1H+ úŌYWG. j %Y 6ô÷Gž‘ÉÃ<÷1÷SČÄI'ä­8ÜSSqXЏWb҃p¨cnBD ’Č| ÛT4Oy~ŗf̈́6¤âR™—:wéė )í†0r_gîdį䓇ČĪŖ~öÛ|t^ īû](;vŒĮŒ˛: û˛[´hîå}đÁrđÁ‡8BÕX¨¯S§Nn~+ų x8ĪéÆu!>ÜtĶMŨrvG¯†đ#náÂ^>ä œo¸ázßæĐōæMęGžļ§Gžūcöį˙ã|?ŋeeՉˇGõŅöUv¸&Î#•nB€\°o‹ōģf€Ē /.ûŽ<ōHŸŒéZ/JÍ_Qs3˛”¨iŊę#ĸČÅÉf}ōÆ'†)OŒČĶ4Ōi>ΓA—Žá~øAļŨvÛx˜<”E†æ!ŽMˇÄqSÂÜĪ Ô§zsCã"Ŋå–[„åZž ÕņĄ_dq ›2øęhĪúnX/CšÔ/Á$<îß/ •ą#Ū, ģøÎÛ ”žâŸ×Šq+*roē›ÅōE’Õ¨žBhž!`T"|`‹-ļˆKÄâÃ֘K/ŊÔßįâ îKØSO=å-_† â ÷Ö;īŧ͝F°ß˜=jå9ƒÂûa´ ÷KîŊáũ9šgmÃČ.k^‚Ŧ2đ5æœŪ×ŲĶŞ(Ģ7—\r‰_™!]īķ”=üđÝëÜxYę#Į÷F5Ė!?´ŧÎMøā¤8pŽ„Ãķ0L<å´męC=´d{‘ĢŸų“üÉæM­WÛ ‘f% bĪ‹z|Ĩ¯)¨žžQî_U„kâëī,‹>øāƒž´DĶ…YԎO”Žq L:=d¤1¨8pŦÛc o׎ĶéäįM@ŦdÄC°ŧ1ĀHc@…ƒ-°¤i˜Aļß~ûÅÃT@Ŋ“'Oör0ķķ4‰Å‘åUÖōš9Ņ>žėXk§Ū‚åfŠ…ĖĒ|äqŽ˛ÉĶöŅžõ-ܨŽģá6(šŠ¨Ų<ļŨķ`ųōÅ˙Hö‚ŲŌ q 9æ˛ûĨŠŗ Q{š ĐŊœ™Y,ëš>´=k~ÜØ?C Ē`eĢÖ–$š÷ą"Ŗ{ŽN=õT?câČ÷GpšoN:Õ/ÉĨB֒ĩyĶĻMķV!Ŋg“wˇÔˆ1÷ûīŋ Ÿ]b‰Į cĖęЙ!ˆ^yŽŧy‰%FVYØOÆÖ d3¯č*ņ„1ˆ`Äé}^˂oÚjYōã˜+˜#ČĪū2ļ#aŠduąFzĢV­<ļœŋųæ›Â‡|™û#KįTäáˆĮ‘ÆA˜eft`‰[ķqÖs|Â:§fš{ūüųqylI"Ž%fö´=Zļvێ´ŊU9ĪÕÄy¤ŌČ›¯žújŋ ûĮ,Ęor&s°e>÷Žo-\¸Đ˙DT˛üÄŗ‘Ÿ} †˛O :¨đ9pÚÁœsŖ€é"Žsˆ&OnlTŔËĶ ņ:9G˛ Tä`öeyW͉Ŗ<¤–‹ė—_~ņE-Žö°ß§ 6eŌFLÕlü¤äíŠ+ވËĶ瑝m ëōB×Íë;ËZ=™ë×Gîp84mÔZŽ>˙Vyâš!røšė{lįö}”ėUã _[VVĄ4ɯ#M›Ŧ´¯‡Z“ jC€ÚÛoŋŨΐ.î›ĖŠÍ7ßÜīŸâÍQ÷Dæâš'ōÂŲÚ:V- d‚×^{͋Cˆ D’—˜ĢÔadā;—ŧœđ¸ÛlĪ:^@āĨƒō\yķxĐVV¨ļr/¸Ą{÷ØƋf›mļ™ßĪfáŧEŊ‰Ę˛Į›ōĖä×2ČãœĨQ^xŖ.HqXÄ{ė1ŋ M[IcŽ! 9œ3×hXį ŗ=H-|l]bИ—ņƚ7Š‹=ڐFö4B>¯ŊöZßfúš-DÔYŽ&Î#nÃg‰ųĨX+,V~ųķ‹dÜĖbéŨąžÜyōFåb¤;Pt\ĒŽØBđ`ŅkëĐ‚Ģg2< 2ՉsO įš7U Š8mģ>%Ąûã´\nj~ʔ)~*f[œÖ§VAäaŊĶ'1MįmŦ“„õœōQ=4ĒúŦOųīūŽH6iĶL܊Ļ[ÖŊ•>ũ͇o—ƒOģÔ§ģëŋ„°š­•|77ŋP&ĪX,ķĮ“ÛNčäo^Šd˙ C JāÅ&tæ–č7nėëá^‰7ųą°­ÃšÄËXސĮŊ>zŊĢ^‰ęÁ ”ęœĩ&ķyŠ—š<˜WÁŨĀĢNuÎĖ`É–úe†dųą`a4ĀĀ9EņĖQQųkfÎŖŋBlË+ĪJ¸ĸ/ei}L˙ōäU$Ŋ:į‘ Ÿœ#Ŗ˙\!=7ɔ[ˇô„TIm8î*•ĻōÔîG+*ë2•ę /Kit(›Íũ<Ą“šžĩŗÕĮĸ‡KÃÚŠúË­*_ĶŖųŖa–.1˙bĄ ˇōĐ1*/L§ŦĻëÅĻáh}.aeā͞Šû‚–nŸ‡#kn(”ļRŌF_ šâRב%$ÍŊ3âLÜšķŨ}Męį֑zî¤yö/n mžíŸ!`T s‡ē(Q#ž‡Ũĩ%j*_}­_Ãę'‹'}Mæ,îŅŠÎKÜĮ¸˙S&œˇoß>>/$ģī‡ķz&š7^yå˙y,wŧ ËK,1†ųŅ7 'Ģ/‘|Ę%Ō?yŦČiy|˙*R?åËŌ/YzMœG*•ŦŅđšā¸Øš ŲÆž35×jgĢŽŅ×­Ŗé ķ­´DŽĸōT–•X—%g[8˛Ļ†]-U-<÷ædH[@֊y ]2QÚˇ.\eÂPüÍ7 ÚƒDEŋßV­Ju^Jt_ õ̌tļ× p[oXúeÉKŽēʐ¯˛đ×Ey5qŠ•dĮŪ6^\āûnėKÃĘ>ą…ƒÉÎk ģˇ9iŽŗ–AČ<)+m^xžá>߁ËĘtŋ`_$s&L“ņŸ —å3ÆÉņnŋLxķ*-nž!`Ô"˜ønZušš6/aĩTË%ˍæV"Pį‘ZIÖ`ō˜Ryyīžņ…jŒ+ĸ­Ž–XnÜĮš1ÃØ‰> Ž^Âb CĀH›—RĮj]ÍY•ķH­$kt4 ąޝ8ķ 6_`Öĩëuu ˜ŪUƒ7Q6ínė~1‚§m#jUƒŗI5Öwl^ĒŊ# Ēį‘ZKÖ€ĮË|ŖL7-ÖŪĄb-[+FŌÖA+kŠ `ķR*(­›yĒrŠÕdMģģ*Ô:Ė7 CĀ0REĀæĨT‘˛| úĮĐ /CĀ0 CĀ0 jGĀČZĩCn†€!`†€!:FÖRĮĘr†€!`†€!PíYĢvČ­BCĀ0 CĀ0RG Ō^0xøá‡S¯Õr†€!`†€!P‹8ķĖ3+­u•FÖø1ô=÷ÜŗŌ3A†€!`†€!`ÔĻNęŋÅÉ'Áø&'>?gÉ÷ķ8p|ĪĩČũčôW_}UŠjÛ2hĨÂi CĀ0 C\ŌBÖžūúëĘmE9ŌĒģžDę´ׯ­iĒģžĩi[˛˛kۆdr-ŪX[ Ŋõ×VåU–ú•!Ķd†@í@ ÚÉÚ_ũ%įœsNĨ WPPPޜƍočĐĄrĖ1ĮČōåËW̝Ŧ´0s׎]姟~ Ŗüųšļamë[MĩŗÍZįŖžyæ4h‹ŲŲŲë|{Öåđķd .”.]ēȄ VkĘ)§œ"ūųįjņeE”'ŗŦ˛–fĩj'kwŪy§\pÁk*V—mˇŨļ\9•Qßūûī/cƌIHÖĘJ •ģöÚkeŗÍ6 Ŗüēöšļamę[Ĩō2ĩŗ2šˇÎ&zčĄÂ8;vlÂą¸Î6lTŧ}ûöŌ˛eKiĶĻl´ŅFņŒ=Z;ė0™>}ē 2Dūū÷ŋĮĶÔbÖˇo_lkX3$“Šéæ†Āú‹@ĩ’5žD‡ &Į|ņīžûNvŲeiŨēĩlšå–ōŋ˙ũΧŨsĪ=Ō­[7yūųįe÷Ũw—]wŨU^|ņEŸqēᆠĐu×]į7Ūx#.SOĸõåįįK¯^Ŋ¤GūŠâà ÷ūûī÷EXjäE nžûíˇŸŒ7ÎĮ7kÖL6l(īŊ÷ž‰}^zéĨrĶČ0bÄ˙ôžšššž ˙*چ˛tAn˛ú4ūōË/÷¤qģíļ“DKĢë*f^xĄĮųđÃ9捪|ø€đaŦš;īŧŗ4jÔHļŪzkŲgŸ}düøņ>møđá˛īžû “(ãR”ŠK6v)›L&ũîŨģˇäääŦ3×_}šU6oŪÜ_#ŒE~Ē&teé2mÚ4o‘cl_sÍ5ūZ:īŧķÂâ•v^ũĀuxå•WŽv|üņĮ^īdX—ĨKĒ×C2`îŊ÷^ß7ß|ŗĐ/ę}ôQŲc=äÃ?”O>ųDޏâ M’3Î8C(‹/–ĶN;MvÚi§x'ÉdޒɆ€!°~"°téŌXx,Y˛$æ&ėØÜšsc§Üų{l§K~‹qßä˜[,ķp7&÷DŲÎMHą˙ū÷ŋņLsæĖ‰9ĶĖ-īÄVŦXs7ߘ{R9áķôéĶ'ÆņîģīÆž~úéXģvíbŋũö[Ė-;ÄÁŠ9ĸ{衇üņŲgŸÅåęI´>âa‹uîÜ9ļÛnģÅÜM>æHSĖ= û"ŖFŠũüķĪąâââØ}÷ŨsšŠŠ9 Xlûíˇ÷e^yå•XĮŽcnņéeĨ‘aŲ˛e1Gđb'NŒË[›6T¤>*v¯Į鍚§~š#%q}ôd]Ō~ŨtĶMcô!Ė;uęä}Æ3ãęöÛo÷ãÚû˜{‹'öÅ_øŧôĢ[˛ōįŒĩ<П—õ¯ŧą[–Lęg\/Z´(ŪW]uUĖYŠËĒn•4G´cÔ¯Ž<]œĨ'võÕWĮ~üņĮØŠ§žso1­Q}ZO*~Uôƒ{Ë_ī\ķáņũ÷ß{•’a]–.LåzHĨÍa0fŦwÜqņûX˜ūæ›oƚ6męûûŒ9CĀXw˜2eŠŸ?áGÜŋáEpˇÉßSš;‹šƒ•Į›H‡_Áŗā[Čež‚‡…ŧŒķJûtGyTĢV˛~ø!ž+VŽO<ŅĮņÔyėąĮzĢV^…ŊņÆŊ•‹ ŗf͒įž{ÎĮą¤xÛmˇI˛ī˜$Ēŧn‹ÜĮ\ØG:ŦčxöŲgû×qCKųÜÄ* đE؏ōėŗĪ OÖåĨ5iŌD˛˛˛|>ũ‡5Ĩĸm¨H}”ácÚæH¯Į9|ę'}]ƌ~e,ŧđ ŪröÚk¯ÉG!`īČĩoķ%—\B3ŊåŒ8,\8GœäôĶO÷–5Æc ˙üķ=Ą~â‰'d¯ŊöōåĘú—Hf8v˓ŲĒU+˙āžstīRYõ&J+KH™{ō‹“.Æ[*õ‘ĪYŽV;Üž”•†~•Ũ ,đ/į°”,īâĘÂ:™.ž ûWÖõ yÖÄį%-ZČe—]&,Ķ>ōČ#ņâ 4đx,2N;tčOŗCĀ0ĘD jj̊ePĖ‚n?Ú*K7>ŨžĄXãÆũŌ&aL€Îâso<ôKî-˘ģYĮ0?˛ÜņÎ;īø4ūšŊ;ŪÉšÛtûå—_8õfČDõųD÷ĪYÔür¨†ņgΜsOšŪ”é&Ŗ˜{öKUš‡ĨGˇ×Λ'…Ī/'Ūu×]>šŦ4-ßŋ˙U–‡ąĨWIDATA5ž"m¨h}î-ÜØ[oŊĨUĮ܆æøy˛>Ō ëfčę,ŗ~šĶíASÕc,Ŗ1Ît،1īČYė?ūđyœ5$FŸâ0iŗŒ…yē,WŪØ-K&Ke΂įĮ’ŗûqĩ6Ë åéâ,<1g9ôÛ Xe ¸Ē]uõí( kŌéB|Y×éqÜwØ^āöŪÆœŌã^9VÆ0jé\•ę kîŀ˜[~Kˆü̝žsŋ|ā'/öâ„{Ú %nC|l‹-ļˆuīŪ=vë­ˇúĩaÄ~ö)9+™'Vēo-Y}LÖ={öô“ōÜŦ߃ĻōÜS¸ßį´ņÆĮÜōEĖY?ŧ˙ØcÅÜSqĖ-[ø=vnIÆīũÔ••†\ˇŲØ×CÚA!aZĶ6T´ž‘#GúöPŋŗÄÄ.ŊôԘ[Šũë_˙ōͯ ˜Ņ÷Õhß.öž…ÎŊâûÎŊ\ÛjĢ­<‡ âčgöˇAdØ[č–˙ÂĸIĪËģÉdēåؘ{IďCöTŨtĶM1gũŠ9+`Ōz4úąČC c™~ŕĨ `nķzĖYcÎr¸ IWŲ•íWg?$ÃZ۔H—ōŽ-ģĻūG}s[,bÎĘs[6Ę%ũk*ßō†@úH'YˀŦ…Ļ7ƒ_ūcŠäōįɸ™ÅŌģc}šķ䕯§‡ųõüÛoŋMúsSėęׯŸđjz2į&”UŪĒ"o,ž˙ūûūMŅdå܄'áōj*õ%“Į›ZΠ㗨åaI Wŋ~ũՒËJ[-sQŅ6T´ž ęøimĀL3yōä„{X7oŪ*ŸZ  ŸQ ĪgĪží—FŖû Un2?ŅØ][™Éę*/>‘.aöZ: ĩ8+v]%įÕÕŠ`L—Ēh8úėŊ÷ŪōÍ7ßT…x“iiB€mXl!bŋŦúė}eģ‰îVÅĪMą'šûMĘr‰Hšæ/+Mķ$ō+چŠÖ—H‡Ú€™ļ+ŲĻm.Ļđ›Xš_‰>į+âĸck+ŗ"zP&‘.ÄŗŅũq|NB7ŧ_•Žēú!Ŧ“éRíįe>)dÎ0 ĘB ZČZE”eŊÛæ‹ō-4s†@u"ą9ų䓓Vé>ˇá_FIšĄ†%đÆ5?|g‡sU‡|ĮΜ!`•…@%knO™p˜3ԁ?ũ㞉•ŽĒ̤N>ˆËaÎ0 C`ŨC Ú>ŨąîAc†€!`†€!~ŒŦĨŋLCĀ0 CĀ0’"`d-)4–`†€!`†@ú0˛–ū>0 CĀ0 CĀHŠ€‘ĩ¤ĐX‚!`†€!`éGĀČZúûĀ40 CĀ0 C )F֒Bc †€!`†€!`¤#kéīĶĀ0 CĀ0 ¤YK %†€!`†€!~ŒŦĨŋLCĀ0 CĀ0’"`d-)4–`†€!`†@ú0˛–ū>0 CĀ0 CĀHŠ€‘ĩ¤ĐX‚!`†€!`éGĀČZúûĀ40 CĀ0 C )F֒Bc †€!`†€!`¤#kéīĶĀ0 CĀ0 ¤YK %†€!`†€!~ŒŦĨŋLCĀ0 CĀ0’"`d-)4–`†€!`†@ú0˛–ū>0 CĀ0 CĀHŠ€‘ĩ¤ĐX‚!`†€!`éGĀČZúûĀ40 CĀ0 C )F֒Bc †€!`†€!`¤#kéīĶĀ0 CĀ0 ¤YK %†€!`†€!~ŒŦĨŋLCĀ0 CĀ0’"`d-)4–`†€!`†@ú0˛–ū>0 CĀ0 CĀHŠ€‘ĩ¤ĐX‚!`†€!`éGĀČZúûĀ40 CĀ0 C )F֒Bc †€!`†€!`¤#kéīĶĀ0 CĀ0 ¤YK %†€!`†€!~ŒŦĨŋLCĀ0 CĀ0’"`d-)4–`†€!`†@ú0˛–ū>0 CĀ0 CĀHŠ€‘ĩ¤ĐX‚!`†€!`éGĀČZúûĀ40 CĀ0 C )F֒Bc †€!`†€!`¤#kéīĶĀ0 CĀ0 ¤YK %†€!`†€!~ŒŦĨŋLCĀ0 CĀ0’"`d-)4–`†€!`†@ú0˛–ū>0 CĀ0 CĀHŠ€‘ĩ¤ĐX‚!`†€!`éGĀČZúûĀ40 CĀ0 C )F֒Bc †€!`†€!`¤#kéīĶĀ0 CĀ0 ¤YK %†€!`†€!~ŒŦĨŋLCĀ0 CĀ0’"`d-)4–`†€!`ü{įcUĩõņÅĖ0tDԇú@҈/ō *Øķž%–÷ЉŸŊŘHlQŖ>{ŒąäŠą—XbīËg÷‰QcīČ{jėXШ…†ōæˇ/kXÜŲwæ‚wf`î'wΞk¯Ũ~į įĪÚûœč|k4(I@b­$ˆ€ˆ€ˆ€ˆ@įXëüs ˆ€ˆ€ˆ€ˆ@Ik%ҍ@D@D@D@:Ÿ@]%‡0qâÄJ6§ļD@D@D@D ę TLŦ;ļęa €ˆ€ˆ€ˆ€Tš€–A+MT퉀ˆ€ˆ€ˆ@ HŦUϚJXĢ4Qĩ'" " " $ ąVA˜jJD@D@D@*M@b­ŌD՞ˆ€ˆ€ˆ€T€ÄZaĒ)¨4‰ĩJU{" " " "PAk„ŠĻD@D@D@D ŌĘz)î”)SėŸ˙ŧŊŌ}Ģ=¨ZSvhšûā6į_–X0`€ßvŧuëÖmŠ-ZÔÂļ”CĶ÷ņc,ĪŲb9y÷ņc,ĪŲbšę‹Ÿ_#~Œ×GÎËuũčúņkďņúČŲbšŽ]?~ø1^9[,×õS×Χ/÷ŗiŋŸų–ßËkĩĩĩÖ§OŸ–ĩƒĨœ /¸ˇČĒ~Û¡´`?ņ+ūĪT¸<ÚĖęúŅõŖëgé`D›ŋ4ÁAŋ?úũYŪßôU9ŠLąVcũúõKíŋŌķ~ÄÁķ~ŒļRųœoÎĻúKøF9V9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖ×Ö6ōĩÍT–XĢŠŠĩ^ŊzĨ%ĪâAЃ+J/ãč‰2˙îųč¯úâ¯ŋFtũDžŧôûŖßŸx=ø5ĸßũūøŋ ē˙ôˆ˙nÄßgÄąŗôKMÍÂĻŪ0„VSYb|‚~Œ6īÁËüXl/ŽSƝ”]õ—œ‡bņģø-Ŋœy”ʋߒk+2Š\ZËĮ2Õ×õĮõā)^Ĩōøz™Uŋ@ ō(•ŋ•˙úņëŊÔQ¯î(EFvXHŦ„wß}×nšåkhh(*鸯sįÎ5^—2gΜ?ÔéoŋũfĖgÚ´i¨Ž\ųûīŋOŒæĪŸŋĖĶßeFĻ " " ËA ėeĐåhģ"UXGŪu×]›Û2dˆmˇŨvvØa‡5Û*™™jÛlŗ›V¸#ŧh÷ßŋŨpà ļķÎ;ÛĶO?mguVķƒ)í9hÎ/ŒVYe•6ģYųļ9)9ˆ€ˆ€ŦđVøČš$˛ĩŪzëĨHĶoŧa3gÎLE¯žúj{ûíˇ­oßžvä‘GšG‘<܈YR$2uķÍ7'!væ™gĻčĶgœaŋüō‹tŌIļĪ>û$AčũqŧíļÛlúôéöæ›oÚ1Į“úaé õÁ¤ļ:č õb忉.}øá‡ļíļÛÚĻ›nšĸym´Qš âå­ˇŪ˛1cÆ$1FdqęÔŠIȍ7ÎÔGč#ęxūųįcEøM˜0!Õũæ›oėškŽąO?ũ4ąÚe—]l˙ũ÷7Ķ…^˜üéá´Î:ëØi§fŧšŊæėlčąDdkøđáöÕW_ŲË/ŋœÂH#įâ×_MlˆÆņŪŋ?ūØnŊõVûä“OŌ÷ŗĪ>Û6ÜpC›5k–ŨtĶM‰QŅ-ļØ"E~øa{ėąĮėĀ´;īŧĶN<ņDûüķĪ“sĘëiˆču4_į Ŗˆ€ˆ@×'0{ölëŨģ÷2MtĨˆŦ1ŖīžûÎîšįģëŽģläȑFԈÄÍ‘sã7ÚÖ[om—_~yÚoÆMúēëŽŗĄC‡&šGˏéû>.–YüņĮėĩ}÷Ũ7‰–åˆz‘üq{å•WėĒĢŽJâoėØąÉūG Pßæ›oŪE#šÆwėIdŦO=õT˛?Ū ˆ™QŖF%.ŦĩÖZI¸á?oŪŧ”?įœs’8%Bš×^{ŲwÜaO>ųd:<ˆâ!^öÛoŋĔvIí5į￉Ͼ‹Ø„7sö}{—^zi­œcöā=ōČ#Š~˛‡zČđaÎ$–’¸ˆVö"ÄIü‚8ŋC9ÄÖ^{íf›G.ŊîÅ7 N?D@D@ē<îClĩZִԈ5ĸ' D1ĸ1¤_|1EDžxâ‰Tƞ""HDâ¸yŋđ vÅW,ĩĖ…āCŠųd?|īW=šëmÔa īŧķŽ Üößô M–Ė"VH>¯RŽôM4mˇŨvŗ#Ž8"ímcõõõéC}ĸaūVdŸ'bhQŖ5×\ĶöÜsOëŪŊģĨô´úę̧hK‘ÔûųįŸSQ{ÍŲû->"ØHœÃ×^{-‰Möķqūųß׉Hë?üĸf”û‹›‰0Žŋūú‰KŦ#FŒHūˉ¸vÚÉ ÔâüSŪŅ|ĶāôCD@D K`ÕĄÆŊ{YĶJ#ֈr1B„ø2˘DExđ€%ŧSO=Õ$–üˆŽ!byëë¯ŋnæãâhÁ‚ļ_FG%÷Gė°ėŠHcéđ’K.inķd† –ĒŗÜËģ$/'ĪXxzŅE Ëŋ1ųXŖ F\đrXÆų#øhĶŖL^ŋŊæėí]@"ƈ‚2næČ9>捪RT:G}tj\Įwœ=ķĖ3inŒŸyˆš·ö˜ˇs(î{Gō-î_ßE@D@ē„Úƒ>˜„Zŧī–;ËVÅZĶ=m…ILŽ(ÉÁœö"ąČM—ũHDWØķ´ãŽ;Ļ=KˆBŸ}öYړÅ("äÛoŋMķ!ōIJ*{ž^­%DËq.ŒhËnė)ã‰ËJ$–uų ÖXŽ$AzõÕWS”(.ˇ˛$Š@™8qb^Ƹˆ0QVœ{ė #RÅ>?Žŧ"„%ĮļR{ÍŲûåܲüøŪ{ī%ņûūûī§Ŋ{l°mļŲfɍsĮRīV[m•"‡Ų§Įw–ģ9įpášĀv,WĶ6KĨ1•iîĶŅ|Ŋ_E@D@ēö}GĄ†>ņ´pņ|ZŧXčæĮV0čÛŗ ÖĻĪ^ÜZ‹ękā&Ë+5ž}öŲôd({×x­ĸÃ÷¤áIB–¸XĒDdq#ßa‡’ Ũwß=‰-^kA8ŌŖWšŲ°o=Pėņbo{ĄXŽc‰ŅĮæũJ$ÆÅSŸDO9åcé•y!FN8á„Ĩē`Nįw^$DŲ_Ebų’‡!؏E9˜žˆšŅ>{īx(‚ȝDņũ\î—;ļלŊ/â8ôĐCĶy"zÆC<@D ‘I´”sƒœKÄ)K™m–ŧ™ÛÆolœ+ŌņĮŸö ōū<´ĀRxšŠŖų–;.ų‰€ˆ€Ŧ\ °Ī­AđĀ÷ŦqĪ#M›UĐWûļ;ŗnMQ–Ĩ”ĸš™ß:qĻ=üvŖÕ4iļ;&ôˇ^õjcŸ7P>$ö2Aá!Ƌ°ĄŒīDØ9Øņûũ÷ßĶ͜›6íIä}Š ?nö”1gWžøōá;Kk”Ņ7íō0ę/ŗĨN–ķcaDšxįũŅãäÃ^5^c‚€cL°až$Æ "gĖÄ‘rÎ)ûŲhŸ‹‡§)ųîL¨įLŠ™ˇįœéž$Ÿ#cõsrÆÍ~EöĨ1NÆÍÜ8âËxåøs=Đs…ķāãį–ļŖ­ŗø2%ŽE X¨Ąú¸pcļ˙wå klڍĩ÷Ũí°ŋöO:ƒ{÷ą˜ZŦmô§‚Ō#L7iĘ|ŗū’HMl¤ŊķņæJ_܄crąÂ :ūåōLš6OžwA€8ō„ÍíØŧ.Bäe.’ą‚?\<उôšÅ.ؙ[,ĮÆæ2˛ÃF9)Ιļc;|õÚsÎÅũŌwqâp.g>|ü:Čq ].vΛ÷AŨXŸ6rļŽæË8”D@D@ēr„Ú—?5&K“A} âŦX¤9‘ŦXsįCęŦg÷š6§) õ¯æušXķÁVĶÁPœ8/ŧiŸhRå ˆoå™ĒE¨6ŦņZ1 å"j0ynRaĩÕËŅÃ˛rŦ]ÉERn\Ŋęklëáĩ÷ÖķmōˇK"PÍ-(ĶĄXæõWŠthĮUŌ™øVɉÖ4E@D  ĖĘjßO[`/ū§ ÖF˙ŲlPŋ–KŸqxYą†PķĪžŖj­G]!Ęsõŗ 6knˈOlPųö%‹¸ĩoÕÕēøV×ųÖlE@D RŠ#hÅßŊtԅÎNĢ–Mģĩm—‘ĄæēËũâ1û€7,ö ąŠŊBOŋß`ˇŋVĐuCÔØ?ūŪÛū4 °)<6Ļŧˆ€ˆ€ˆ€ˆ@ž+”ž~œQø{ß˙;jĄíģe¯´bÆ~s¸áSVŦá€Xcķ5›¸l×ūkžŊųUA õlÚ2õ×õöˇ‘õ6lu‰ļTyp ķĨ‡4ŲûĪ–2Oc†Îˇ ãē'ĄÆtėGGŦ‘Úk8YãÉAž$ēæ‚í‘wØ˙ObsûÅ×ŊŠ]Ū2 OˇôŠę+‰€ˆ€ˆ€ˆ@ĩā=ĩS§/4ų-<ØZļ×˙ĖĩqŠkjŧĨˇđJ­bĄF‘5Œˆ5_ %ēÆĢl|áMü¤Î&OíŪÔųŅF=%–zÔ.´Ņë6ÚÎ#m­õéuTDÔjU+ĩo­äŗĸT@áĄôˆ˛ņAĀũemŗ ĪŗŸk°˙PgŋÎęfĶjl朚Ĩ”cËaĘ"" " " ÕA€pVīúE6¸ī[oĐ>xĄõéÉËõë“@cš‹´R5'URŦáB-ÚÖ¨mlzÔtA“ˆ+üAl/ONú!" " " UNĀ#eėEĢ­-üB1¨ 5TYąF㈯(ÖhÄŋĶ0ą§-FŨđ‘hƒ‚’ˆ€ˆ€ˆ@ĩ@/‘ĸnrí„@CCåĸj^¯˜[VŦył-vę†Ib­Šž‹€ˆ€ˆ€T;4“ë&ßVVˆ°Õ6?L—?K 58–kR1 6ī”Î\¤ų^6üUƒš’ˆ€ˆ€ˆ@ĩ@3ųQVüņ28‘o-ĩ*ÖŧlŪ0ē8‹ĮÖ:R™ˆ€ˆ€ˆ€T×MšŖshK¨á×ĻXÃÉŠĸŧ§˜oÍæe:Š€ˆ€ˆ€ˆ@W$āšÉįæßũXl÷ī­ËkŪ@qGmŲŊ\G¨vĨtT[\–IŦÅÆ–ˇÃ؆ō" " " " ­(üuöÖ}T*" " " "ĐI$Ö: ŧērHŦ•CI>" " " "ĐI$Ö: ŧērHŦ•CI>" " " "ĐI$Ö: ŧērHŦ•CI>" " " "ĐI$Ö: ŧērü!•(ZŲã&IENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Log.workflow/Contents/document.wflow000066400000000000000000000160651445560650400306030ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx log --vcs=svn "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{170, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Mark Resolved.workflow/000077500000000000000000000000001445560650400260155ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Mark Resolved.workflow/Contents/000077500000000000000000000000001445560650400276125ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Mark Resolved.workflow/Contents/Info.plist000066400000000000000000000011761445560650400315670ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Mark Resolved NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Mark Resolved.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400315135ustar00rootroot00000000000000Thumbnail.png000066400000000000000000001111451445560650400340700ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Mark Resolved.workflow/Contents/QuickLook‰PNG  IHDRkĄ_ëUiCCPICC ProfilexÕYy8U]Û_ûĖŽs Į<ķ,ķ˜yžįšpĖķŒáˆ‚^'øÛ9ūeŗæíŖ÷—đ 00ūmƒ DīöÅĪ9_P˜éîāžŠĀ"á:H3  ôūĒ%/ ĀšXX‚ĀŒCāap›0“˙˛Ķũ‰Á¯v~pģ÷H^°mĖß}ūî ÷ųĮgđ†ņ9îcWˇ;ē(÷€Ôúücąëī×h¤kĨßIoũJ%‹R@é ÔQ(@F1ŖØ$JĨŒŌFiĸÔ` 0¯aĪ~Ƹë?¤Ņ7ölXŧǃ?ŦŨũīž´Āá—uĀßŋ˙c `hšeųĪˆö9ŋ膅ĮGøųG“ĩá7×G‚lę%%A–•–‘ŲU˙ŋ)ģkÖīÁŽÚüZ‹ æádūj¨-€E˙# ˜ öŧ˙Č:āđ fÔ+&2öˇ?Ôî ¯„´p„˛nĀDāį, áĩQ č` ė€3pƒãĮŽÁHA HŲā$8Š@)¸Ē@h- tƒ{`Œ€ 0fÁ°VĀ:؄  !ˆ â!qHR†4 }Č ˛œ!Č …b Dč” åAEPT ]‡Ú nč4 MBsĐ;č ôDŒ.„bBĄ0EØ!ö#üˆDââ,ĸqҌčF &ŗˆ%ÄW$@R#™‘ŧHI¤2Ri‰tAú"#‘‡YČd9˛ŲŽėGŽ!g‘ËČī( ŠEFIÂqj„˛GyĄ"P‡P9¨"TĒՋCÍĄVP?ŅD4'Z­Š6F;ĄũĐqčttú ē Ũ‡ž@ŋA¯c0fŒ0F c„qÆbbr0%˜Lf3ųŠÅbŲ°âXuŦ%–‚ÆĻcĪa¯bī`cß`7pÔ8œ,Îį‚ ÅĨâ p5¸NÜcÜ[Ü&• •*•%•7Uü4~•šššZ…Úš:€ú0õYękÔ÷Šį¨ŋH1‚.a!†p‚PIč"LV‰DĸQ‹čBŒ&ž Vī_7hh¤hŒiŧi’iŠišiĶ|¤Ĩĸ¤ÕĻuŖM - ŊA;LģLGE'D§KGĄ;DWL×F÷”î+=Ŋ Ŋ%}}} ũúE–$DŌ'y“ŌH—HwIķ H~]/†#  } o1ŒÂŒÆŒŒŲŒuŒCŒ+L$&y&ĻLÅLˇ™f™‘ĖBĖÆĖÁĖšĖĖO˜°pąhŗø°d˛ÔŗÆžĮÖaŸCĩÃ7G=Į<ĮY§=NINÎėÎέ.X—+._]õ]ΏžŲ§°/}ߓũÂûėāÆîėv۝֝â~ÃíáčQãąEऔSžz{ž÷\ņŌõ*ôZōÖōÎ÷~įŖî“įķÖWŨ7ĪwŅOŨī´ß;M˙˙åŨ€ĸ€ĪFĨß‚,ƒ*ƒv‚ƒBp!!mĄ¤Đ ĐŪ0î°aŖáâáéáŗĒg"V"M#¯DAQûŖZŖáäp0F$æhĖ\ŦFlqėFœC܍ôB ƋÅgÆŋM0H¸|uĐë`O"obJâ\’vRŲ!čįĄždūä´ä7‡ WĨāS‚RĨJ§æĨŽq<ŌžÆ•v8mū¨áŅÚtšôČô§jĨĮPĮŽ eĘežËü™åõ0[:ģ {+Į+įáq™ãgīœđ=1”Ģ˜{á$ædčÉ'§4OUåŅį%ä͟6?ŨœOÎĪĘ_;ã~æA|Ai!ž0ĻpöŦŲŲÖsįNžÛ*ō/š(Ö)n8Īy>ķüˇī’Į´.ԗr•f—ū¸pņY™aYsšPyÁ%ĖĨØK ũ—•/W_aŋ’}eģ2´rļĘĻǎZŠē熺&ˇQSûîęžĢ#uzu­õ’õe Ė Ų×Āĩ˜kī¯{\ŌhÚØsCųFũMÁ›į›š˛šĄæøæ•˙–ŲVįÖŅ6“ļžvĩöĻ[Rˇ*;x;Šo3ŨÎíÄwĻuîÜI¸ķĩ+ŧkšÛ¯{žĮŊgęŽĶŨņ^ëŪĄ>Ķžû÷ îŨí×îŋs_ũ~ĮÕm•ļ (4* 6=RxÔ4¤8Ô<Ŧ4Ü:ĸ2Ō>ēw´ķąæãî1Ŋą{ãÆãŖOėŸ<{ēīéė3īg‹“Á“ŸŸĮ>ߜ:<žÎzA÷ĸā%įËōŅ™†YÅŲÛszsƒ¯l_MÍ{Í/ŊŽzŊõ&m¸Pđ–įmõĸėbĮ;ƒw#ī]ßŋY _Ú\N˙@˙áüG‘7?i}\qZyķ9ōķǜUļÕĘ5ųĩž¯V__އŦo~ËÚ`Û¨úŽüŊ˙‡ãˇ›q[Ø­ŗÛĸÛí?MNī„ėė„S")ŋr$\#|}øR sg˜;Œ€īúÍ)~YĀt‚m`Œ„ķ_!`į§×Ā7HJƒ&jˆjxŊ€AuŖŨ0Ķ‚=„ŗ âĸÚĀĪP?& Ō<ĸ§["á$͙R˜¯˛ŧ`ceˇāČæâĻį1'įđNđķ ø Ö}Qģ+AÔ—JÜĶ%Ŋ-k('Uგ ˛ĩJ˛jŊڜ:Ŗ†ŧĻ•V’vĩN‡îŪŠĩ!‹¯ą¤‰’ŠŽ™ĩšŗ…ŸeĒÕ9ë:x%xiˇâ™D•]l\#ö%ī?áVåŪé1J™õüâō!ų øÉûëX:y„Ä…&†e„gEäEæFŒ>“›WxātüɄôƒÉ‰1I҇“)‡R SÕČ§IåN§MßÉX=ļœ95Ũ–SwŧųÄėI–S†yņ§KōĪėJŸu;—VTWüĒ„xAŽÔãbNYSųdâ˛ČķʘĒãÕ 5CĩęhëeLŽy^oĖŊQuŗ¯i´yąågm;ī-éÛæwŧģÂēôš›×{ž¯ö^KĪũ;†N , ž~46ty8fD”4:ũ¸aėā¸ÁibæIũ̓ĪL&Ų&_?oĘ˜ļ{!đbķe˙Ė…Ųˆ9ŊW,¯>Í÷ž.}“°`˙Vf‘~ņĮģ'ī;–Ē—OHųû)hÅ˙sĀ— Õøĩœ¯ÕëĪ7ž{ūŨ ūéļŗŗ'0{f‚`/p‡@5˜‚3;Kč4…FœBü@† ßŖbŅt5Æ‹Įā Š‚ņ&Ô{"DfZ.: z5’-CcS%ķ}–u62ģGgW3÷ 2¯Ÿ+Ļ@›āŧ0^DZÔ\,Dü´Ä-ÉįR_ĨeTdåÂå‹šģ•ž)oŠ2¨ņī•S7ŌđԌƒŖáŒN™n•Ū ũ;ƒ†SF‹ÆĢ&ßMˇĖļ-P–´VŦÖÜ6ŧļ"vōöĘŠŽN&ÎĻ.&Žvû÷[šŲ¸ÛxØQ\=ŧėŊ},}ÍüLüu4Ղä‚ÅBøC9ØÃIt‘Ø(DÔVôZĖĮØˇq3&ã'<FĖĪ2ČöÉÉ>~íÄpî‡Sø<…ĶųQgŠ ē įĪĄŠÄ‹-ÎĮ””^č/ũXÆXŽrÉ­"įr˕é*DĩTGmÎÕļē…ēk×Ŗ/ܸųŖyO‹_kA[ī-¨Cęv@g靑nLöŨ”ŪŽžĩ~ūûĘö>ÔPT|¤8¤8Ŧ8"3*öX|Lxœ{‚ũ ãSÂ3ĒIhrûų§Š÷Ķī^ŧ{97ķfvfnîÕėü‹×ķo>,lŧŨy‡{Īž$ĩŦũÁöcø§Ŧ•ĒĪ_>¯ņ|5[OøVˇąđƒs˙Véöâß_ķô0ߒæ0ˎÁGˆr…ķö„â b )ƒĖGnŖBP¯ŅžčEL8f›‹Æ=  Åŗā{¨Ŗ „%b=M4­œGŽŅWŦ…™ Ļ9æ>–JÖ ļ@v;]N!.,×:÷žAr#o1_:¨€ĩ ĻŸ0ZxCdB´YŦDü°„줁YjkĪ3éz™#˛.rbōXų§ W(™+ +ī¨L¨VŠ%ėĩP×@iLi^Ķ:ĻíŖŖ¤K¯ģĸ7¨Ų ŅĐÕHŘɸ“É}Ķ2ŗxs[ KŦå+Ģë›h[c;Aģûg×3ŧœ]č\\Û÷åî÷sĶvgw˙čŅM)ô ķŌ÷æô^õšī[ėė¯ĀīõŊAį‚cC BšC×á}Ŋ>âh¤W”f4o ˆ™í‰+?ī P,‘>q#éåĄŪäēÃįSޤFqKŗ>Ē‘.™Á{Œ!ų#ëSö|ÎŗãŖpüôŸė<Ք×pē1ŋáĖՂŠÂËg/ž+-*/.>_^rņBeéPĒ\ūĨâÄåÎ+KUôÕ*5^ĩĮ¯ļ×-6°^3ųCãMÄf–ČÖúļOˇd;Üžs‡ÔÜ}ë.worßĮ~īûĶĻæš÷8f\˙‰ø3†į‚͆/“g?ΟX}—÷Áúķđ†Ķîü˙>[ÚŨ0ŠœuĀ™ kCrö Ô +"v*!Å ¯=ŌÉũ{˙`ĒđʑJ`ž8Ą ˜†Cų0ߛA`R{Dâ2bņɏ´F&!k“(|‚ā3ą!4­ŒA_BOa˜0V˜lL?‡5ÄÅöãˆ8\nžJ’*šĒĪ„÷Æß ÆRģSˇÂĖ'„pŸ(HĖ&ŽŌ8Ō´ÃlĻ„Ž@wn…>”ū)„´ÂÍđņé$3 s‹K;Ģ)ë [,;žŊ‚C›c’3œ‹ĢÛ™{‹§‚lIūÉ[ÃˇŸŸÄß'įú߄ڄ“E DŠE'Å*Äã%L$E¤ĐR3{ú¤Ģd˛dãä|ä÷)Ø*Z*é+¨ĢZ¨yė PĶHÕ,ĶjĶžÖų¨GŌW1đ3Ė3Ē1žlrŌ4Å,Á<Ü"Ö2Â*ÂÚĮ&Ô6Ė.Ų>Įá¸cĄSŊsË¨ëž7nwuGJĒgš×¤¯ŒŸˇQĀXÖ 9:ÎŲõ3Æ#ļų1>4a$Q!éR2ũáC);G‚Ķ>¤‡d,gúg}Ę ?ž‘›vJ$¯1ßôĖDáĄs†Åv%ÁĨGËZ. _AU)×D\Ŋ\?í†oĶ…–ˇí{;ĸ:‡ģ‰w)}-÷Ą‡ÎƒĨCKŖęc™ˇž‘ž[O§ŧėũ2ĪōÆč­ÍģØĨC’>Å|vYåY[X?ˇ!ņŊr“jËfÛíįá_ë‡ |žUúĀgˆ2†ĸĄRč!´Ž #Ė`_‰G"‘˛H 2Ų3rI”ĒõE렓ĐčL<æ6`õ°™ØĮ8Nœ?Ž•ŠŠĘ…Ē–ę'Ūæž>ÔŨAB áŅ”ØNCĻÉ Y§  }AgM×G¯J›¤@jbPcčf4bereZ`ŽaÁ˛\`Uf}ÂÎNÍ^ÃaÎąÆYÄĨÁĩÄ}Į”gƒ|7‡oŠŋLĀSPXpYčšđaKQ.ŅobCâW$ŽIúJf—ÁČŦÉÎË=–ŋĢĐĨxS NCUUÛÔ:÷ŪS‡YŌ{m”Ž°ž†ū>ƒÃBŖ:ãF“ĶZŗķ6‹~ËQ̧Ö36Ÿí {nIGe'{įh—L×ō}wöĪšc<¸)Ļž^ĮŊoøLûaũ|Īõ  ķ /‰xĸÕbbc¯Į}‰WNˆ8X—øífrúáTâ‹´˛Ŗ_2¤Žee>ÍæÎ‰<>K>uĒį4mžį™žBŪŗEEZÅK%EĨîeLåc9WĖĢĒßÖ6Ôå4x\WēÁys­yēĩ­ũfGIgJ—wkīŪ{ō÷ɉ6†gFûƚ'ĒžfOO™ŧИažũōjüuŨBęĸÃ{îĨĨˇ>e|6_ĨY{¸~fÃüqŗc;ô×ü̧HM` ’ƒ" Fh Ą€8€¸D ‘Į‘OP<¨`T+ƒvDWŖ71˜Ë˜ŦöŽ…{L%OU‚Įâ#áŦŌŽē— Nh%JoĐČĶ´ĐęŌĐšŅ­Ōg‘$Hƒ ąŒŦŒ™’˜Ĩ™įX YmØŲž˛ŸápæäįüÂÕÎ}ŠĮ‹,ĮKÍģĖwŋB C0LČUØLDCTJL\œO‚_’[Jd¤´’Œ‘ŦĢ\˜|ŽBĨâ°Ō7UCĩ¨Ŋuę šÜZû´‹ufô$ô“ ƍ؍ŖMÆĖÍOX,[ŲX_ĩeŗK˛_t4vjsásÍۏsKp_Ĩøz>÷ļõöŗđŋ¨ÔĸÚŽŅī ũąqcņî īã“6’3R8RĶ gxûžu>Göøxnä)B^{žÍ™íÂķįHEąÅS%Vē/*–U_âŽ(ŋ"TYį 7Ž*Õu4h]ëk4ž1×ŲŧۚĐļ}ëômÁÎĒ.ąîĢwĨzîI÷_}@ķ0gúQäĐüˆõčĩ1šņā‰OŸž|2Å:íôâė˧ŗLs6¯2æë_ß}3ĩ°ŗČôŽ˙=ßī2ĪŽlˇ?Ŋ\éü\ōÅUfuuíúאuōúġ˜ ÂFÅwųīw~˜ūx¸Š˛YĩŞ•¸u›iÛsģ~{ķ§áĪ“?'wøw‚wšwį?ĘWNvw÷A>~|šŗŗ*Ÿ_æ°}jggŗ|ggûL2āo ]ÁŋŋWėcā3÷ķ™ģčîõĒŨÛŋ•˙A4zXąî8” IDATxėœEöĮßî’3"˜ÅTĖÁœõĖķŠg:ŗŪũÍgē;ãŠgā8Ž€#ā8Ž@=FĀÉZ=ž8^5GĀpGĀp9Ž€#Pw$ Ѝ¨_ũU~˙ũw™3gŽ4nÜXˆįĀåååŠīᕏGo-‚‚e{îÍ MíĐŠšėŌw-9âŒ.ŌŦYã%ú‚ęāŸ÷GŋߖwŧY™ú{ÜB+Lež˙ÜÔ ÃŪ nĀņ‚¨ 4Hš6m*{īŊˇ4iŌDIZAAAn}Ãn×ÖŽ/ū áŗ¤s§Ö’H7ŧ;üWž¨äā1Å\!ŸHyøWVžŠįËķ–ŲŋĪ—īÚ.ô‘Ęgg›L+sÕÎĢoļũŅäĶ•Nzŧžņpēŧŋr!Āĩļū€ŋ2ô÷• áėjģlƒŲét)G`•F :°9R-kûîģoŌĸƄY9ąWNęLr^ŒÅʂיk9­D¤¨B¤°<‰|) d­(Ł­q.Äi ƒ_T‘ŌķĨŚmäˆķvymšÉs˙šÄ„X›7PMúcA~žäG*ë/×fāûīĘc=–$kÄ!o‡÷įÅX€ICĀceéīĩyīÔ']ž ZŸŽ†×ĨÁ ĀĀVVV&ĩ-ˇÜRĘËËõ`r///͉r÷W.¸†v}šŽŗ&dva™ä)šŠ×´’¸`KÃÎöŅ;¯Ęn{¨ĄpÉÁKëZ°°ŋ¨4OzíÕU^đs9æ”ŽŌ¨Q#íĩ}#X}Ģ돔[ZZ&ŋOšŦĀMĨ‚ kÍ%˛Y¸pŧķÎ{rÄQĮČ´i3B?Æ|ÚS^!íÚĩ ËÁ•cī× įž^û;ũ¸Ą9'kĩpEįΝ+………˛ÖZkՂ6WąŦ0M:U^|ņE9ëŦŗ4;“E]:Ɯ2eŠŧôŌK)Ë$Ŋ´´T-/:u Ä­\'xˆZIiI°˛5ŅI™pūüųōĖ3ĪČĐĄCåôĶO—Í7ß<Ų†›nēIõˇmÛ6IđŦ]6!Öe8Sũ°ŧĐN>õ‰Ö7Zŋɓ'Ë˙û_9īŧķTž´h:‘+K˜ļ‚ dœk<ŋ4!…%Á´Ö)ōQK„uOë~?};HŽščLšņūöŌk띧 Š$¨40ļE!oێmdÜô|ÕŲ‡ÚvÕõĮF'ņŸ7ož|3ĒH6īšžIŖÆÍĨ´¤Hšĩh! |WŽ;ádéĶ{s™ˇ°T—I˖-døđáJÔZ´hžŦz´šŧןūšLŸ>]:č ĨpZ^ũžŋ’`‚3ÎđXû{e Ö_­Áõ¤ķÚqîšįĘ1ĮŖ“lßž}“ņ¤/Ģ3ø ĐÉÍâ–UW]É[}đ7Ųd™0aB˛ÍuUf:ŊVŌ§M›&?ūxR4š–ŒĖpÂ䛍‹ęeԈ—‰“Y¸pĄžc})++­:ʤ,X.Ęyc˛§Ü|P~øáŊæėmkĶĻĢ%îîģī֗*‚åų¤….„9'ŋúĩNW?HŖ•gõŅvT•­o´~ĩ‡z(Yߨ~Ķ•§Ŋõ5L{š†øĩĸ˛„‡ëš¨ŦB ų*>qķËŊ7_ĨŨęž[Ž”9 Ф0Ä#SX*AN$đYâ Ú4— $ûN´/Z2dˆlŋũöIâŗq–?S4ŧÁœcÜĖ|ųuZžŒœT*oŧöŠü>Ŗą|öŨ8)š3Ezlļš úü'ųæëÁŌ´Yķ`! ĩČkō-îŸv}ŅĩÚjĢÉf›nĻæŪŊ{ËÃ?,ß˙ŊlļŲfZ–öŖ€_ēëM˙æ›oä­ˇŪ’x}-\W÷ÃĒŦ?×ũ=›>Ŋ*ʸem¯zt€üúë¯eĈaYāÕRTT´„6dy:Љû×ŋūĨ{œ,īōč2ËëGێ.ÎÖ­['Õ֗:f‹šĩgܸqrØa‡ébÉF‡åOÕn&ž’’]ÖŌÉ&„Ã,Ģ<ņeabÑ÷ãO>‘ãŽ=VzöėŠq#G “ËQĨš^ō–˛—ŦV)•ŦüĮ”]›a–žLõû$ÔīØĒúQ‡Ō@R؃cÎĘG–#^_ôi´)4$Š}–?ޝž†ËAŽׄ6Ņžâ˛&RŦdyaYŗ"?,‘–‡ĨĀĪÛĪ=*Ķ&—&M›‚ŧūÜÃ˛ßąįH¤5,†Ŗ°´BJ+ÂžĻæeŅĸEJX’×9fæčīŊ÷žÕ'=*ŋDb$Š?Ōú#ē ;‹B˙2|N°Ī•’…ŗǻŸIãÕöo?zSū°ĮĻ2§PdÄČņ2wÎ,Ųp“må2}Ö"YŊ}~åžĖPŽîŅ í˛ú?ķė3ŌĨK—Ę…k~~øaeŋąÚ›Â-īäˇūÁšēāGīŌSõĮʆĻŋ*ÂÃUxg‰G.ûģ]3÷—FĀ-kKc’U f~,K?˙üŗr͚5ĶÁ‰´;î¸CvŨuW9ūøãeđāÁÉøūũûë’×N;í¤–Ōu@ yx˛Ū˙ũu’ŋúęĢu`&O>0YnŊõÖ˛Ë.ģČ_|ĄyŪ˙}ÁšĮ’ËqĻ'ę?ũôĶ‚Ž?ūņrÔQGeĖ÷ÛoŋŠ•0^ÎíˇßŽåžp ōã?&ˁā°üxÎ9įČĮŦ¸Q6DķÉ'ŸT9ËĮáūûī×ļŌž>ú(Š3Z÷t2Ļ“úDąĨ–lvß}÷Ĩ°xėąĮjĄāú°|}Ųe—ÉŒ3dŸ}ö‘—_~YÛaeÄëÍdšÃ;(îfUŗ25c¤L,ėA‚œ-ZÖ´GŧXĸžūę+šîēë„žŅ¯_?éęĀUŸķŅŖGkw ˜Ũ|ķÍÉÉ}`h+ũ†>uË-ˇ$å­ ō“÷C‘>}úČN;î(ācéģ}O<ņ„ö/âąú}UU?ŦČÔcė¯ŋĒŽ­ļÚJËü äaÂG_´žožųĻ–ˇs¨×#<ĸ×FË ˛oŋũļæķÂō(zI;˙üķåū{ī•=÷ÜSūöˇŋŠŪŗCßúåėŲŗ“íƒXpX}WT¸$đO–3‹ÂRhqI°ŦÆŅ÷đ3䞷GÉŨUĮîGœ,iå˛0Č,ōŗ‹ÃË ķKeÂŧ€[ kږp˙¤s\ÓN:)ŲĮéĮ<(îĩ×^Š%÷`ŧ/ĸËâŽēūh×gáÜ"™3ģ(ĸF˛ũ^įIņÂBŠ(/]ģm!ͧ–ČVÛî&ģīyˆĖ ĖMÛ^( }á:ŌßTOU?ĸ–fúyČeL#Œ<÷âoŧĄ÷Õ6á:8°2-\ß[CŸŪb‹-´Đ!ÎúËmˇŨ&;kã‘G)ß}÷æųyØ09ā€äŸ˙ü§ôčŅCŠ‚…Ûä)oBO8â- ėž˙öÛd:ãŅsaK÷8}Ž~Jũ†Uéŧįž{dķ`dėaé×ę¯~=éu}?äĒŋĶoÜ-FĀ-k‹ą¨öŒAgƒ&ũOĢyĮ¯d‹‰Ŧe˖rß}÷É/ŋüĸKŠ–PYbŗe Ž;ęrY‹°oDÄ00\uÕUJŌ°nõ ¤mŋũöĶOChAU˙æÍ›'Ī?˙ŧæŨ1LŌLņ|ŧŠČ'%R•Ã÷Á°ĸmaŽļP6H!.Ø@b Šō‚Čŋ˙ũīōå—_ę‰áZUeõâ26‘3f‰ú°GОIĮĄ‹ķŋüå/K`cmŧøâ‹•¸rŨcĐ7Ū(øÃ„k‚KWoŌ.ŋürŞ{÷îōĀĨeęIø§–Pë#zâŠÃŪƒzI° ,Đo­UČqĮ¯.¤pĪ=÷r%ašh ŨĮļhQąęY°`Ąųn¸!LÖdī0ÁœvúiúI­ļÚZ˜°N=õÔ0iīô'BŪUÎÔŖŌŠšÛf›mÂÂÁpVRôÉ'ė|}`ĸņÅ‚Ĩ´­æĮžAŦ~LNԏũL7]Ûnģm `˛üŖęĒ$ë•yŦž—\r‰÷îŨēË#>ĸxĪ;O­(āøÜsΆ{ ĩėÛŽģíú`c™4i˛|&O°]{íĩBŋ{O~ {ų^{íĩPWôËíŖūj•ҤWYíę0L%*†Ō@ÄËdâ‚FŌvV°å5’2ŦkaßZxߗ˝tÔ[GđËa,ŽķÃk¤S‹ÃåjŪ(ÄUâ‡wÄay ŸZR9Ōš˙x(zꊧti‡îAōfq‹ęMÕKÃÃĂ0æp?đĸĀ‚@nJ‚_ÚzĢ4jŨRĻN›"ë¯ÕRÖīŧļĖ_°ØÂĨ˝•a¯xéĀöĢaAÄ=účŖá^o>OŌL—ûųŪ ēôŦb<Bč|đ!y?<ņͧOo;ö7;ŲīˆŪ̝žF‰û<Į+¯ŋū†ŧōō+2lø0šæškÂ[ĒËŦYŗÕęßŋŋ`ŽQ¸NHVö:FžĘŌŋxāĄ°,ûˆüíĻŋĖ*´ß}÷ŊnAųōË/äOú“|õåWúĀV…ƒ:8Ôī}šķŽ;åú믓{īŊ?Ų˙B3‚ŽēīÚĩë°Įõ‡FåŧŋĶgÜ-‰€“ĩ%ņČ:ÄČāvá…ĘvÛm§ÖžúūķŸ˙„äu,™\‘cšK –7ܟ˙üg%jœcb ēōĘ+•t@ėĐkú!-% ųIc 4XąpV„Ėƒ&„<=˛×…ŧL„ÔÅōY—Tå0Iĸ;ÚęÄŪ*ųąę@x€Ų‹Ō­[7Yc5äŽģîJ™—v`•9î¸ãÔĸ‰ Œčä—ÁĒ‚L:lI〠Q‡xÁ‹:ķ2{ q”GũɃÃ'.]›!qčāĘâ)ō‰›UQøgõá¸BŌqÄķÖ`å5 {ÕG¸*åUBå*˙鰩ċ‰še#öŗ}ķÍ׊õgŸ}ĻÖĻŨҁœŌæC=Tŗ–Č‹ÅŒŊ>¨ĩ‹v@´¸î8úq›6mĩ^QÅĸõŖ"ĨáåĶ•Ū$ĨŽÁē'Iķ†jcm&žW¯^ĩķÎ;ëC“uũ÷ŋĐō >\3ú(駜rŠŦŗÎ:š¯{÷n2sæL%„<âŖm‹žk†üĶkŞg eˆ&áú–†I:4#PŽY^xÛŋŌņÁÕ—ž˙!-š THy^4-o†âZŸA*ę,G3wíĩ×JûöíĨk׎JˆI…‰éHÕŨú§éæPˆXA beė,*ž/SF—'éÎ+h"ģėļđ™>‹Ø•†ƒvsũė^¨ŦKeM;tč œ<FëWų6iĨ +̝ŪAēnŌUâņ —,öiŋāa}ŧY…÷öÛl?IČ-ˇŪĸa,kôĪŧpMN>ųˇōЇŽ6mÛ¨ĖįŸ!ŖFÔū… é¸'Đņš˙=B[Ž’ĄÃ†ę4u8âˆÃUæđÃ×{­ĸĸ|‰í*Ņö¨`ø§}'‡ũŊ@V'Mp˛VXĩ톛Ū|&™W_ ¯į‡I“}lŧ%Ȥ‚Ĩ ‡Ig!ųŒ0šBZ°ÎaĨÚtĶM—’Ck›åGˏ͛7O–aÚxãĩN¤ã§,+ËKŨâų6ÜpC-›rĖMņļP:M !Oô¯ŧōŠZ{Ž>úhm_đ ­8k‹ųÄĨĢ7ËÄ´•˛ė@žstĸ#î¸nL^öId,l“y8ˇ#6}d,}ûö6ųƒåę̝Žy°čBа°AⰐR†9ęĮ2ØĘ„HAâ,Œ<‡…ÉmÕ Üč§Q]LĀ芿ĮjŌĒU+ՇˏĪË XˆéK„š†m´Q˛ė¨ÚČC–6îú{ˇÁ‘ßôkDøW×ađÄQx4ož™Ž@m$PsĩĒ%ÂÄ˙ã{ĪɰA¯(}CžËÖũĨΧ¨…­"ėį ĘÛŖ …œ-š ’ÖQ–V>´Ÿ:DĶ ?âHēx$ y{ 5Š;äÅâVž×ŦY+éØiCiŌëųtd°ėÍú@ö?čø°ü>[2sē´ÖҞ°ė›,‹ö`BšĻ%[Žą]7ķ‘Ąž8ģ75ū‘íGÄg>ũˆą€~„ãž0Ŋø&oņČąJĀC1(XČšgLŽtœ…ņy@âū‹ÆsÎXĀ}„3ũČĮq_ŲÃv iGŽúģ‚ę˙–@`ņˆžD´˛A€Á‚›˜NĖ„ÅģöÚkĢÅ ä‰ĨR1ëôøtü QZsÍ5ÕÚÆž2âHC'>ûw°Ŧą÷‰8|,ŗfÍR9Î9xÂ&Ÿåĩs|ôrPËgu#õĮ/m åD‰ŖÕŌÉRoŦ‘‡x,OŅŧ”GŪââbmO90XRGsœ3ųĶΨ :Ņ• l­ŨŅú€Oŧ<ˇk×.i2ˤ,#ŗ_2DūtõƂĘS=K6äcšhũ‰#ĖŽ\{ęi“įFžAŪ&˜h˜x}Ŗ.,‘5J—3ą4ÚäGŊÁåÎ;īT,M¯•AûØŋĮR%ē&Nœ¨Ö„JKÖâÉĪęhųŦŪVÂļäŽ.ę˲ũ lŗēŗ4Vkœ-1#CŨɃ>Ŧǐ2ôYYø„šŋ¸vė+Ä:G˙˛öqoØAœã×eØđąrZ4.d­‘´ ŋ@ĐĒęh,e[í~ Ėž0J~˙qLũ“lÕ˙0iâÛ4mdK‹ Û˛IA8ōĨQØŗf}F‹üŗže>}”ū‡ŗs|œé0YŒÄW×i¸—„ũwEŋdȧ˙‘oŪŋ[FyO?9ĶŦYĶ@NÉĮáeƒG¸Iū÷ĖũáÍåĸ@ւE+\ŗT}ˆ: Ķú>a‹ˇsģöÆį^dģ–Xúšõady8f|á­tëGŒÁŅüœSÖ\úį5Æ+Č?81ÎXŖN<Ôf_„Œû GųôwŌ>ũôSéׯ_˛ŊčÍU˙ŗ~—ĢōrŨßl˙ˇnY[ ’ę#¸Y9¸éŲ „Uƒ=ėƒ‚xq@2˜@ą”ą<Čž,"8P휍ßl įÉ0>čÆúÄ&~'ŦbL\lF˙Į?ūĄßāZoŊõÔÚÁĄž}ûĸV•õYŽˆæÃârŅEi]y ī”Y9—^zŠ–ÃFāLmaâ`s;ídylˆŖ.q ƒ`E|įΝu2žūúë—Âëäuũõ×W–{Āņú°oĮ2´‘=q´lŦ ü,˛œÆFa!ûųį§ Øt ´?^oŽ¤á‚ .P9,C|pg+ŧÍ1y0s€ iœ3‚aâ™Tė /2ŅI^z`oä /ŧ u€AvŲO†,m§DķZ]ČG?âE‚qãÆ)ÔÁœ•mõ$}”Ëa:9g}ÜŅÅH&+ ]ôu–ûŲ Č„GĮ‘ŸīÎŅtØõĄ¯ģÉXÛ? /Ÿ°/‘žB}˜dŠK´žčĖĨ3Ŧh/ᐴaŋ]"?XĨÃŌpX Gž´nŅQŽ<īfyäęr蟮rë„åĪ€kČĮ&ųŌ(((“V%¤u+~t‘6Ãp$`įøvÆˇ°ÉÅÄō‘īÄ%׏ūˆ.Â%%aßZX ]ŋ×qR2v˜\<ˏÂō=Ĉû”‡ˆrÄą*›ž{î9Uez(—˛°ĖBTŲ#Ė}NæĄq”=ÃaųG7åDåŦ= Áˇ6Ō8¯ËūŪđĒĢ6øoƒ.˛6čá31¸ņäĪĶ˞tdéXn°Ø0Č⏙S9ĶO‹Æ“—7ᰂQiԁƒx, ’6hDĶ97]vN>ŦÔÍęMų”C<åpnō<}FÛ­Ģéļü6˛dyŅizŠ7#ʡz[šMėW‚$YŧÕĮt’?îLŸ2hŖ•‹,ņKģ.&OKw†G´ ō›ãšƒĩMJÔ=zŧXĒfPįĨk'ņä§lÚHáāz⍋9+Ķâ˧MX¸l)’xöâĩœfVrŧ¸ž´ŅôSõˇ6YųÔÉęČšÉ[=¸6ÖO,žĨ#oXĄgu2úšYÕ w“3YęÁÃ(Îņ6ÄëWWaÄk áō×ļŌyĩIĐÆüđĸ@ kÖŽæ+˙žU<íRø[¸ÎĩpÃXXE o–ɘ‰sdĘĐ!rA˙Ļē׊ky;XŲũ@˜gZ;)Ķđ!ÎđÉĻ?˛‹2hĪ´é3äøĢ•ĩÖév¤IX˛nęĶDũķæĪ”FĶž–‹/ēJ C?.,\>šÛ$öŅŌwÛzčG”M=­īQ_Ģį8ęĪaí!ŽzĮÛE:ã÷ĻĨ!kŽöŅ?čG†žaaågu‚đŅ^Č+ēņÁœˇGŲ“I_‹Ū?ũô“>üaQCž{ ykĢ••ĒūVgĢÛĘÎeˇkęūŌ,~´^:ÍcĒA€› “§~nĀčAVnf#vŖĪ9‡É—Ę™ŒĨĄËôDox##&g~´œ¸. næL/a+ĮĘĀO×Ōĸē-z,ŪōŽ–ÃD#é҈Č?d,=­õąüQVž•eØDeŧ-ŪĘŇÄX~ühŊ)ÄsÍÍY9Qũ‡”Až €É€r9˜ĀHŗA0įĻßę`eļƒ8,ˇĻ‹7‚ëШ‰|3~°ŧöÂ?aiĢ}ƒˇx!ŽÍwûC’ôpĐgX‘׎1õã Ųy´ÎgíA.:&‘u[{Ȳ<”eũ„8‹§>œ#^ŦĀQúûÔĖQžõc|;#låāŖĮęgeŽėaģ†šėī†Ŋû‹X<2/Žķŗ,°ŅčyqQˇ˛…ik´ÎšęīQĖü\‡‡![ŦÚŒ˛ÕãrĢôöaąˇ‹hōÖŖíŊŠN4҉Áú™ŒųČŲÜ–náTč’F~›$‘ąrņíœxĶĮšåŗ¸¨Ī9é8ËM'ŪœãLŪâ Ûa:,Œōv 9ęÅälõŗŧ„ŖqĻ‹|Ņz“—<æHGÖâđ‰ŗø¨Ķeu0YęȲl´ŽĻ?W>XbMâZ˛$†å”-ŧåŒ%ŠúŅĒsāC_ā-lŪnÆĸ)°kU]ūlĶŗí/–JŲÅŌ í#l¤Œk`es h/ÖcöL˛į“pĻLdŖ}€ëk.Ū‡ˆˇž@>ŌqQ9˙ŦŸDëby- ßō™Nô¯Õ+ǟsäp´üæ'rĸxrŽ–eyŠŋ˛õ÷†‚{ŧNÖâˆxØXNčĀČ9˜Ä™ĀؐĪ䯄ˤÆĪā2mI&›´áÜōāÛšå'Ũœ›oņ–Įüxŧ…ŗÉ—ąŧøņ4ÂŅ297|;ęČÕ9“6“7û!mpŽŠ‘´øD¯má`$o…ĄFÖĐ_[.Ûūh˜ŖŠĘ% IDATS7Ęg’6CÎ|Îí:˜~ú<įĻ št.ĒĢ:“­îēGĶŖį–Ÿr8‡ãņäį'ÅãÛũ•K׎•9~eëī+3֙ęî{Ö2ĄãiŽ@ °É€ ËŽev?Îíi<[˛VƒĒ4ø,ŅI7Wĩk%36yYŠŽ^¤[ß0Ëaë;ĩŲĶ™Ž?OŊĢ돊HIĒvš\Ē´ÚlW}ĶÕPÛģ˛õ÷úÖ/jĢ>NÖj I×ãD°§Q&t›ŧ˜ÍgOæNÖ •eķWääHŲ\gģ–\cģŪéZ͋8‰,2äĩƒâ9ĮíŗĪ>rėąĮę÷– [æ,ŨÂÕų&o~uō+*Ũęg~6õ@–ƒŸˇyꊧ’8fĢÃäˎ2 øá‡Jä8§›\:ßō,Žtē=ŪpG`ÕFĀ-kËqũYŪIJ9 ŋŪ~øxņO⠖4›Ä!l„탓VŦĨļ´–-[ĒČÃ?ü Ë…üVßV[mĨŋ'ˆü /ŧ VŠÁƒëG5ûôé#ë¯ŋ~’h˜î?ūXˇzbÅbīŽŸ<úėŗĪdöėؚ—]vŅ/ëŗ„Ęōdŧ<ä˜1cô'”vÜqĮä̞ĒŠd ¨ƒ Ōe`Ŧ†´ßA´ö™˙ûīŋË7ß|Ŗ ŨlŗÍô÷Q;qâDųōË/“äøĐCU}XÉ^zé%aišK—.ōŨwßĨŦ÷oŋũ&_|ņ…’āN:iM­L\d(Ō¤IÚÆ8@Û­÷Ö[o­õĻ.äŲnģíTׁĨgĪž*×aå īÎpG NÖj€0äŠ/ŗtY^PžQd YōØnŒ¤MžZķXQ?.c8AüøEʁXūōË/˛Å[(&C؟ūšxāúûˆ˙ûß˙¤sįÎJ°>ųä%™=zôĐö`Ą„,žūúëBÛqéęMÚ§Ÿ~*ũû÷W †š,—4Hu€äŽŗÎ:˛æšk å¯÷ˆ#¤wīŪz@ųn~ëä#O\‡“4Pvį8Ž€#°<8YĢ!zF2ėw3ŠA‡ŦåŗIœ0D7~üx™5k–’…:h<–,džúę+õ§NĒäâ‡ÃĸÃ8öÄĄsÚ´iúÂiĻ ŲôéĶ2Č{â!ãƍĶĨWûŠō¤*Ëåa•zë­ˇd‡vH’“h;Đ•ÁŠFYč$ 2Fųü°9Ö0k7>õ†ėũøãTCķM™2EķAˆ°ĸ ‡<õĮ™Å2]Ŋ!q” žäį79GŽŠ: }ÄŅ|;ĐO\ŧŪÔcË-ˇÔëØ¯_?yįw”XB0ÉcųÍ× ††‘…ŨwGĀp–'k˂VL–I"¤ĪÁ¤Ÿ˜‘ÁADĩ0q6Š3ŅãXĸ„`!ÃBɂܰ,Š• ˇAxë”|–ÂbzÍz‡,iXæŪ~ûm%GĢ­ļŅ*O}ČCŊMiŠĘŗ2öØcũL Ë~,švīŪ,I‡Üž{îŠdŦP,^$ Ū%œ•iuĻū”KŨ­ømÛļÕŊiČ#ksĢŗų ,X 'Ōh?$™s;¨ƒå‹ÖÅôŒ×›ëgu?Ž5ųņ‰'ŋé@ŋĨQž;GĀpG Ļø 5DŽIĮō$ƒRĀ„=,Žtdq–×Î-ŒhŖ6ŌŊdV§Ö­[kŸ ÁiĀĮųĖ™3ĩČAĐŁu Ōiĸ^¤a)ƒHŦˇŪzÂŌ城<Čy(‡%T–0ŲÛeõļvßd žXōĐK°ėąKûđ­Žäåœx,nvNėđЎYÎЏ iÔ rK8NÔëÖ5^H /KŧV_ķ +Ž }ČFë îVoęÉŌ*ä•8ö°‘‡ƒˇoM‡éÕũŸ#ā8Ž€#PC .ēčĸkj˜w•Íf“0d}d$#b„čH„Ų éÂZŅ0‡.&yž×ļņÆk{ĄXĒc/q ČéįŸÖũUö_ĄÂ5lØ0ĩvĄGbÕŽ];̓>ö¸!ĩ‰=V8ä8HgĶ?ŊTåAPŪxã ]Ē…bYC}8ځū×^{MeĀRĮž8Ÿ-aĪ>ËŊXÎ 5lČīÖ­›2ęÎR)„Š cQäcÂ"í'/z!`ԝz@Ŧâõ†ŒBž ĻägÖEČûԈ7Gũš.,ÃRwōBĐR՛—2¨e‚#/U@Æ!nôĶąA°&šuÍp˛ōÜwGĀp˛EĀ?Š›-R9ŗŧ@Ļ QlNgâÎä°2ALvŪyg%6yŖ ’ÁÁš9Ō™č!8“ƒ XŪįŸ^_6 Ų(ų ÉĄb Ą@“Á:ed“4,KÔ R„â‘%ޞ ŒŅ4ŗzAL!IæL'u@>ž†œÉāƒk´\ĶcņQyęCģЋŖ}”cų52ü#Î0B–ē[ũ)“|†1íĻŽV§hŊ­K3ũoúš7ožD™&ëž#ā8Ž€#°,øžĩeA+&Ëäõ kÖ-&éTŽ œÉ?jÍąIy΍hĄƒpܑn„*š†2vn~4_ôÜŌņíÜô#‡ŖÎFʐątģŽČXᏍ>ÂŅôxaÃÆ|âÜ9Ž€#ā85A`ąIĻ&šWņ<6)ŗg O*˛Dqr`°ŲN:ΜCĖqMŗxörá, ßÎM&J*,ÎdĖ7VŽ•×GØd,Í|ĶA[âeš>“!OÔYēų&•‰ÆEëayˎ<Ņz‘M§Ž–­‹]tÄķ˜ŧéę#.ĒĮd͡<î;Ž€#ā85AĀÉZMP y˜ˆãÄÄÂQ•6a“fqæL~œX?š‡°č!-z˜nü¨œÅGuÅ㐏ēT˛¤O{,ßâR•™J'ōŅōĸįV†å#ÍƊ§Ž.¯éąŧVwĢ7ų­ Ķežå–oqŠ|Ķ™­|*į8Ž€#āNÖ ‰eđ™čq,ĨEßė\ RÔpiķF9Ž€#ā8+Åß.XAđbGĀpGĀpŌ#ād-=6žâ8Ž€#ā8ŽĀ GĀÉÚ ŋ^GĀpGĀpŌ#ād-=6žâ8Ž€#ā8ŽĀ GĀÉÚ ŋ^GĀpGĀpŌ#ād-=6žâ8Ž€#ā8ŽĀ G Ņ<°Â+ápG üâGßž}eà 7T‘Úø~}CoėØąōŅGéīāĻ+ßãGĀXŅäũôĶO ~x›ÉæŦm[ŅķōGŌŌR}’ Ô„´EĮˇīŋ˙^†.Ŋ{÷öī%&QõG0žņ ĘīŠķŗ’ˆāāƒĻ$¤ûɤúPy¯ƒ#āŦz06mšå–2bÄ™={ļėļÛn:VAŧ–…°QãĄô“O>Q]5~*nYôŦzWĀ[ė8šF€qÃ8Z^x˛L,Z´H­jüˇ;GĀpęĢ聅môčŅÂxĩ÷Ū{ ŋɋˆhQ+,,”wŪyG Z—.]Ôĸ– Ģ\ëCÛŊŽ€#āđ+IŅôräȑ –@!jXÕlPs˜GĀXŅØ˜ÄødcԄ düøņ˛×^{IĮŽĩŠ™›iͧO—wß}WÖ[o=YwŨuõŠ•Áƒü<ÅēsG > `cãKĄyãÆK0Ú~5ØęCeŊŽ€#°ę"ĀXYã`|˛qĒ´´\ĻMŸ!ŖFū,;īŧŗl´ŅF R*Âfã/ 4HēnŌC:u\=XÔ*ŸXíÉ5ēä°ę"î-wú‚ã–5} œDƒeĐ9 É䙋¤qA…ä•-Q#†JĪž=%ūâųĖŲ‹]ģo&‰F­¤´<_ÖęĐTÚĩjĒË  †68Ļ"}ĻË}GĀpr@t™†%…Y…ų2bJc™]T Ĩ‰Frúždĩ6MÔ˛æ{ÖR]s€’ĩyķæ-^/XŅ5ōōGBĀ,ūøˇŧ4C~\,mš•K˙MJdƒeÉĸ°Āq„-ÂË6^$ā%‚ĩÖZk‰åMŊq3ÉĀ‘Md^qlŧV3šėĐՓV5'lŪũG >"ā¯?ÕĮĢâur%YĀ0ä÷ųrt™Ė ˗뮖;%”\éĶfÕ[œ,@Ėēví*ožųĻúFÔĸrœ“=čC/úqžWMađŽ€#Pp˛V/ŠWÉp*€\=ķŲ) Ÿ€ŦHäIŋŽåKXÁâDŦ}ûö˛Ã;>iņtqčAzŅOœ;GĀpę+>BÕ×+ãõrVaėe§9 ËečīaÉ3`ąŨ†eŌ˛YĨ, 3"FšĨGãė=čC/ú)gåjĀ˙9Ž€#POp˛VO.„WÃp–FāˑEÁF|øÉŠuĄV•Έ—‘˛8A˔n:*õåĢ~Ęqį8Ž@}E Q}­˜×ËpVm°r›^Ē 4)H„— *$?/ĢđÂBf‡ŊŒĩŒYš:ÍTõ8ôĄˇ¤ŽĀJŒ@BÆĪ,Ķúˇk^*¨âQ-#l$B°ˆƒlĨ"kq†,}mƒŪé ōäÃaÅ2zĘ ´iš˙sG`y(ƒĖęmōĨS›FŌŠmlÛĨYÔHí2“ĩŠsĘäŲ°!÷ƒĄ…RTâėŦF¨{&GĀX&Z5[rŦIEØ eq˛/ĈšÅˇz§/°g-ŽJ+žĨšī8Ž@m"ĀâŽŨšËaÛĩ’Í;7MĒŽŽ[ÉČØIĩdОLßønÜ˙îœ%HĢk´i͜'ܘv:Ž€#P ŦŋZ~ė6Ž*ja‹§ÅÃqĸFúƝDW; Æ5yØpę`ĩqNĄČėpTžŅ.ōéˆ"=NŪŊ­ˇk›¤’ę[^uÅ5˛vĶ‹3eāOĄÄ*ˇåú"ģm"Ō}-‘æMœĨ.î;Ž€#ā8Ž€#E⎙ ųø‘ĪG‹WņûoŪBŽ8ŦÃR[8ĸųėŧZ˛†ā3Ÿ.G?œĢy:+ÚŠģ@Ԝ ˆî;Ž€#ā8Ž€#PSæ&äÎ÷D&WR*šđ€ö˛oīÕe“Œd ŗÜOá%‚‹gã­ČZmEūīā(3fĖ,mŌ¨QŖäw•‡gįeee˛ÚjĢÉ駟ž$zŠtgSž*Žú—‡S•‘mūŌŌR;vŦ^Pęnēŋûî;yíĩ×dË-ˇ”C9$Ē.)´|Ņ8Îüq3fŒwÜqúŖÖéôĻË˙Ûoŋ)î:u’ƍƒY5¸T˛ŠâT8"?iŌ$ųå—_´ãvīŪŨ’ÕĪ&ŋeH%›*.|*ŲTqžŋ86ņ0RŠâ?Į/UßHÕWRÅy˙ņūŗ˛ôŸ)SĻČĪ?˙ŦdÍú-ūüųķõ7nœL˜0AzôčĄķ_T†ķžŨķYĢ´ŽąålÛŽáŗi\Z˛â›j¸ÆánŦž›_Ļ‚ A2öØc%kƒ ’éͧ+i# GŨ87Ÿs~¸ŲŌ3 'œp‚|ņÅLJl°ėˇß~rôŅGËÚk¯Œ¯ĢØ÷M7Ũ$Ÿ|ō‰2pĘiŌ¤‰|úé§J8G-O=õ”ÉĄ‡Zãjŧ˙ūûÚÎ~ũúÉ&›l"Ųęũį?˙)¯ŋūēüū{ ûÁå 7Ü GuTëÂ5üË_ū"‡v˜Üzë­5ÖãGĀpú€sų÷߯†ĨLõÁęÆ|žÕV[-EØzރŦ"p~Ŗx‘l>š›Žŋd$kĶæU’ŖöaU1‚L•ŦIV2öžÍž=[Î:ë,Yc5”Ü´hŅB-<¤™E ?ę˛!k֎ž}ûĘ… å‡~{īŊW‡DÕĩƒŦŧųæ›ŌĢW/9ūøãÕâôŪ{īi›ŦnԁķhxYëÍ?†ŖzßyįÅĸmÛļrÅWčŪÁwß}WIpē<ŅüéÎģuë&'Ÿ|˛ląÅËÔ&žJžxâ iĶĻœūųéÔ{ŧ#ā8Ž€#3 _XÔXÄmļŲf2tčĐĨʡxäĮ¨Ä’¨šaīښáSkŧƝĩĀiŌÍĩK‘5#@ø3įW‘ĩKŽĶR M1+—ę<ūAĘh~+“8ŗ˜ņĸĀ]wŨĨVļÃ?\ׅąˆ’9ˆeŗfŒŧÕ#UųV†å=ķĖ3eÛmˇ•Ęgœ!,H,ģf“?]ũ­KëúōË/U˙ÕW_­KČ]yå•É2õ$ö/Ē˒,Î|âŖį&gņҰÅŲõŗ:ũõ×*ö‡?üA—”‰?å”SRęĩ˛ĖęŒŸķDҧOÕm˙,Ÿųņ<Äc üĪū#ģîēĢeKú–ĪüTų­]QS`qæ{ū%ûO:\ŋJ ķŊ˙x˙ÉĻ/øũĶ0îŦeļú!cå ˙ŲgŸĩKŦĢu›nēŠ†!rČŗ•.ë+ømŋš>įÁOvڜ…OZÔĨ\ÛDŖŧęĮ>ų‰2F”†0ą„÷Á(ņÁŸC˛ĸy9ˇüæ›.ŗœ=÷Üsōę̝ {ģÖ\sMéØącō-Q¤mΜ9z°>ĖËFôĸúSkááiX{p………Zq”ŊīžûĘ#<ĸ2¤_zéĨē\úã?je˛|ĘRåÔŠS•ÜlŗÍ6 Ãb‡CWŧ|6âžũöÛĨԈ7yÎ!’t°”IL>ëāĖŪŊ{Ë.ģė"ˇÜrKŌÕaįæG˰8|{1ƒŽÅŪA‹ˇ<„yB ʤsîŗĪ>ōá‡Ē,Ö80áz_~ųåjö ,‰Äß~ûíIQYČ*ØíšįžōŅGŠĖĉåÚk¯ĨhŊüŸ}öY2ŋÕÉ|ę–ÍyŧMŲä‰Ęxū%ût›lÎ?Į/z¯fĶgĸ2Ūŧ˙ԇūÃ>lsĖ—Ã† ˆÛŠpø„‰ZÜȡTũĢUTņ.#lUŅIo)˚ĨTļĒPYŗ´¨%ŠMãC† ‰F/qŪŗgĪd—Hˆ(ĶŦcŧŠĩ Rr˙ũ÷''¤ŒY#vĻ&NÖ,>ü“O>ŠÉ;í´“°ÔŠã6ÄŗW΀…Š#Žō ŗß뤓NŌ°đĄÅūŦTîĀT‹!KŽ#GŽÔåFŪ‰;đÄÚˇņÆ ˁĀ8@Zˇn-áW'T?DÂÆRî< „ö´ĶN[Buĩ6XB5Ŧ!Xd˛q42ƒ(Aŗ‰TÖĢ’ŒpniäáöŠ ââÎôcšã“'^6Šgõ4roq–:g€“2E¤‡NË/Ÿ0/N`mŧųæ›ÕzwŪyįŠeŒĪu@Zp20EYŪ°PĻ#ā†.ä5‡ĩĘʍ××ô‚ĢÉXž¨5‹Mũ7ŪxŖ`a{ėąĮôZ\xá…Ér!RāwV&oÜrmŦœTe›l˙ūũ“XnžųæJÖ Ĩ`ae kēâezØpGĀČ% ˜įŖ.jQŗ%ҏe|ņšŦŧĸYPÃ^ųş%‹ęĩķ”{Ö,ąŠĢ%ƒ™N -ņO_° ÆōVļ˛ÅAc` FšČOŧ5›čM/ņěŒĨĨķ˙ô§?ÉwÜĄßģīžûtŠ1l]ÄīļÛnōĖ3Īč7ĐhÛÛoŋu1Čã°\Ač8  Gyää5k…1AŽÛŋūõ¯¤•Ž=g”iä‰k]ŽīéáŦœē(Ãu:Ž€#ā8˃€fLG”¨AĐ0¨a3üxžhšņ­t&%YK'ŧ„â>ŗaä ÉU—ÕA¸âKĄQV7|#-¤[ØŌŖyŌŗīę˜cŽQkÖ5×\“´ęŲō/āXšãÍÄÚv\8öĘáXöĖÖm´ŅF*ŠÅ Ō=âoŨfĢ3.‡Ķ–rųŒ –Ä 7ÜPŰ|Յŗ˜,{âĖB‚Š‹˛]§#ā8Ž€# lī2Į^l{™Ā,iQÂFēšh>‹ËÖOģ š­‚¨$‡ũLˆPĒuר|üōŦaUŗeĪ8CŽÃâā‘7JāâúS…ؐåĸĀō*–āpŧՊ‰ˇĀĨŌą,ql gŸŗ˜6mšîũ"?K‹Ųē#Ž8B7.ÂŪy“’ĨDˆ%māMM#ĖŲę39^ä`ßáÖ[o­üíå ž Į›ĸ|Bk /\pÁfī–8ŪæŦ‰ÃljEįŌoĀ›— p\Â,÷by7–ÕŨ9Ž€#ā8+ æ!žÁ‡qÍČ`žÕ ÂQŗxō,ĪüUĢdJb-ęŌĨKō3Vņl|ˆD f… )ƒ˜E­f^Îí 8_ 9÷ÜsË›ëų$ä„}lX r—\r‰ž 0xđāeQRâÁ^0~R Į{HfÔl{Ø 9lĖįQD9ŠQļú‡˙/‚ IDATLâõōË/ë‹ Äaåå ~Æ ‡åôž{îŅũlŧĀ1üķŸ˙\c˛ÆÛŽ—]v™.{ĶwxŲÂLÅXg!Ķtz~ëěˇîGĀp…{ŪYáâ Ŧ<!‹×Įâá'ČÛīžĮå˛ į…Ī@,~í3ä`˛7KÕåO͖á“*¤KĮrš _æ ˛)Ŧ:Čo=bMtÅ-sFDĖâféÄŗüĮ^'6НžúęÕ•U:V&ŪlŦ­ĨE+tÖŦYÂoŠÁ˛šˆËãXž¤ŗ@¤jÃúĮ~Ažhŗ-{ĻĒ–<–'!t5Á‡—,žųæšķÎ;eģíļ͎[iƒ]Ķh™\_Ŧ”•*=*ëįŽ€#ā8Ž@.āķ^Ŧ41gĻsĖķĩtK w|ĐLFO/žkįËÍĮĩWà sy|ŽĢuËZē gqÁŌ„u-^Ņxūx::ÖĨå%?ŅrĖÂĢsŪBå¨ ĮKö‰ŒÚЇ5 kWuŽīŊqԆãēņáãtŽk ‘sį8Ž€#āÔ `t˜Ÿ nx0x0ÂH‡Ŧ-EÍÚZ¯Čl2ūFŠUÔũ†…KÍöų”†Õ2o#ā8ŽĀĒ‚ķØáĨuéęYĢˆēîú…Ë îGĀpG zR~ēŖúl.á8Ž€#ā8Ž€# œŦåe/ÃpGĀp"ād­†Āy6GĀpGĀpr@V{ÖfΜ>Ūúa.ęãe8Ž€#ā8Ž€#°J 0ŗh÷ĐÎęí)+˛ÆĪ˙\rō%ĢpŪHGĀpGĀprĀ…N•Ųŋ-Ēļ(_­"pGĀpG`Å!ādmÅaī%;Ž€#ā8Ž€#P-NÖĒ…ČGĀpGĀXq8Y[qØ{Ɏ€#ā8Ž€#āT‹€“ĩj!rGĀpGĀpVNÖVö^˛#ā8Ž€#ā8Õ"ād­Zˆ\ĀpGĀp‡€“ĩ‡Ŋ—ė8Ž€#ā8Ž@ĩ8YĢ"pGĀpG`Å!Õ/Ŧ¸ę-_É2bÄ9r¤đ“Y7–D"Ąšķōō´â<Ü0đxä–|)(Xļgŧpų;ŽŲRúīÕYN8o3iÖŦąö˙į8Ž@m#āķRũŸwëã<Ō`É7ÄÛoŋ-ųųųrČ!‡HĶĻMkûžs}õMv˜.ŦŅFō‡‹‡˙ZËDĨ'3\ ė´‹”‡eå ™:qž<˙ø`šāÔäÎGú‡ūŌ`oJüŋ#ā䟗ry ŦķȲ™ jÔė“iذa˛hŅ"Ųoŋũ¤I“&Z ,i•“8yåááÅX4|Ļ•ˆ%ōĨ°"O ņY+ Gq`k„ ņCÚÂāUä‡ô|iąf9âŧdV‹FōøŋZ1ÖKu€ĪK+Įŧ[į‘i>(//—!C†Čæ›o.œÛ2g~>%_ÃâŨoX8ĖZ˜ŲEåz]ÃåVŋrôĮ¤–'ŊķĒėļׁÁŽŦká_EE"Xׂ…-øEĨyŌk¯ŽōÂÃ_Ę)įô ËŠ zâđÆ9Ž@îđyiå™oëã}úČžûî+Bûíi™á†îׯŸĘkyHNœ8QößmķŋB&īŊ÷Ę>{ī-;밃\yå•Éú1(ĘŲi§äÖ[nIĘsķ÷Í7Ōˇo_Ųf›mäÃ?L´ŧ4ímČé%Á:VTÂRh…úŁ€qô=ü šįíQrwÕąûgÉÂŌō —Áē6ģ¸BĻÍ/• ķĶ d͝#āÔ |BŠG2jÔ(-āŒ3ΐŨvÛMĮą'Ÿ|2Y(+Ä3?0âģN?ũtŲyįĨW¯^2wîܤŧđŠĻÃ?܂˛ŨvÛÉë¯ŋŽc(y 8ÆđŊØK9]ģv•Ŗ>ZãHûę̝–ĐqÛmˇŠ[tnŧņF8p ÖaôčŅōÉ'ŸČņĮOļj]6ķŌ9a{ ÆÆü§Ÿ~:9Ž3'ŋ}hx¤ĮŲŗW$¯Íģ랋€-sÅ!/¸rĘ)ē%įĐđĩ„ŖŽ:J ŌČßæĸüãIũĮ…•2æ\ŌØÎôh SĖ×Ėį<ōˆ<˙ėŗē’ļ×^{éüÆŧ:oŪ<ŊNXPĪ?÷\™4i’æO7o2/Ūæ7æąūģīŽ}Ŗ+YũÃĘJŽ$…:ØŧĒũÖ^›WkŽķH­YÖļŨv[9ķĖ3e×]w•Ë.ģL.ēč"ũlŊröë¯ŋĘ7\°÷ėŲpq/žøbŊ ÜD<aēūŋ˙û?ŊŠ2õøë¯ŋ>š.“ŸėĀ*R\\HÛ"=W‰ZJølģ×DƎ+kŦą†’ē’@ė°˛ Û4X`>øÜqįrŨu×É}÷Ũ/ͧO×´ųķįÉŦYŗåëО^[l,soČW\)O…‹ÎÅŗúßxã ÅyÂt>ŠüãīRTT,ĮsŒvÂ=ē+I;âđ#ÂÆŅÁåÄO’ĩÖ\Sūū÷ŋËi§*{ėą—Zõ,X úiûã(rŗŧûî;rįwJŸŪ}4ŋ•_Ų^$ˇˇō‘Ĩá†'.–ąiĨĄī…Ö‡G˛T†ąĀsõiXÖŗom~Q…L-yš×ÚmøîG  &qÆÅûīŋ_'sĸĪ?˙|]åaũä°zņ)**’n¸AūW_}uč‘… :TÉCĒÕdX͈~ûí7'_~ųe%$Œ•ķė3ŌĒUĢđųŦwÂÜy¯<účŖō§?“qŪ<ûėŗÂĘÜr÷]wë<öŪ{īęuyãõ7ĨC+Âv–Pŋh{m¯íy­>Î#ĩfYŖŖūõ¯•^xAo ˜7ė‚đ`mëŪŊģ^pâŲÃÅ wÕUWéĻ~Ø;7I&×­[7i:[uާ7Ŧ}Üøz^ÎĪ'œ/ųá€ÉīąĮÉ0¯cĮŽá)ë(iŪĸšqÄōŲgŸ…zō’BåË ä‡ wųå—K˖­ôÉ ’Gy¤ĶąxräéÃĘ#?úÖYg]éŌĨ‹’˛Aƒi:ቓ&ę`B]§M ēBũx˛ŧęĒŋČ̝ž"7ŠčŔ:tëÖ]I$ōVžĩoU 7 ؕb\Zž§~įaiĶŽE᜸2õ%ÄįK0ÂÉĸp”įH͐?Ī?Š[ŨíåéŽ@Ā*i`%Á^:Û$ ˆČHVķæÍu|ä™<Ė3ŽáO!'žxĸZqSŗqXŠ+ąčA8Ė17Ą "Id>°m*&SßĻMĄ Ų¸læĨ.]ģ(!ĨŨFÆuæNVpN>y€ü0øŨæcķJtÜīJŪaC3ōÚ<@ŨؗŨŽ][Õ÷Î;īȁUKĄŧ 6Ø Ėo•Îsöq›GHãގŪza9ģŗÖà ø7kÖLÕyįë¯ŋNÛÂZŨŧIųčˇöôčŅS?fŪųįéüVPĐ(ŲĢĩ¯ļÃõqŠuä‚}kܐ/Ø5Ô\ôæĸ3ąáøƒ&cēļ›ŌäkęcnF—5+×|ôBš9ŲŦ­ÁŋsįÎƌ Ô¸Īú;Ëĸ÷ŨwŸ’–xzĒ0ˀváSĨ[“‹íd¤ŅŠ8pŦÛc _gu4ĖEGž7ą’AÂōF#ílŅKš…édûėŗO2L”;fĖՃ™Ÿ§I,Ž,¯˛–ĪāDûx˛c­rx –Á R ™5ũčãÜt#ŗöŅžU-Üĸqp›U*f6­v?P>}æī˛`æiÖ˛uŲŋ¤u° Qixš ,ŧœŸ_!-›„kč{Ö´ßø?G Ž`eĢÖ–$ûX‘ą=G§žzĒNÆXã˛ÆøČ.ãæ¸qãtI.˛–Žč?~ŧZ…lĖFvĩ°Ôˆ1÷Ë/ŋŸ]b‰Į cĖæ¨3+BŊę\uķKŒŦ˛°ŸŒ­Ačf^ąU*â cÁ"ˆŗqŪō‚oÚZ^äqĖĖČŗŋŒíHX*؟GYŦ†‘ŪĄCŖķW^yEø/sat؜Š>ņ8Ō8ŗĖLXâ69Æa;Į'ls*a–ģg˘‘ÔĮ–$âXbfOې!Cd‹°íČÚ[—ķ\}œGjŦą9ņ/ų‹îÁ‚Áū1‹ō›œél™Ī}`…ãÛcŗfÍԟˆJ'O<ųŲW@gČäxj°N…΁ŗ Ė9DČ:qœC4yrcŖ*Ļ\ž‰ˇÎČ9úĐ•ĒŖĸŗ/Ëģ–Nų!ĩÜd?ūøŖZ!´8ÚÃ~?ž&ؔI1Uŗņ“|ˇ+ޏ"ŠĪĘFŋĩ-Z–*]˙ĩlZ,kMŗpyÂ5 GĀĄu‹Žräy7Ë#WC˙ÄžĮužĘŊjŧá a+((“V%¤uĢŖāUBo˛#3x ŊõÖ[uŪ€tq0n2@(6Úh#Ũ?śŖ8ÆDæâyályĢ2Á‹/ž¨ę¨D"ÉËĖUæ02đK^Nx8lļg/ đŌAuŽēy ÛúŦJōw~]&kw †îļĒ3ŸŽūĘŋo•OģTĶÃũ_IØÂÖĘđbhx{´LÆLœ#3F —[Žß@/ÃŽR“˙wē@€˜Đ™ XĸkŲ˛ĨÃX‰ˆ:&näą°-ÃšÄËXŽĐĮXŋß­^ŠĘÁ ”íœĩ,힔Ë\ĖĢāAŨĀĢÎęŸ˜/Ā’9,íË éäą`a4ĀĀ9EņĖQqũËfÎãzEą­.?+MāJ}ÉK{¸Öéę_žš¤įršđŅŠ2äˇEŌsí|šų¸öJHÔFû]­ŌTžĸûĸe:‡LeÛé3é! JĮfs?ODÔÉLĪvąÍĮĸ‡ËÂvQí–[M'žĨĮåãa–.1˙bĄ‹æęŖŽq}ŅtōZēŨlŽ—įáJV>í[‡_!höy˛ēB%aĢ"m\‹W\.d%I īŒ„“pü0ŽIĶĸFŌ$œ´]đcčC›&û…^D˙į8u†äĮ\Āa.NԈįawy‰šé7ßʡ°ųéâI_–9‹1:Ûy‰qŒņŸ<Ņy€đē뮛œŌûŅy„zϚ7ūûß˙ęį9°Üņ&,/ °Ä•§žŅpēōRé'_ĒúgŖ9ˏoķ_MĘ'ĻúĨK¯ķH­’5^7;74ûÃØwfæZģØVĮøëÖņôš†ųVZ*WS}ĻËķGXW%gÛ˛f†]ˁU-zŽædH[„ŦUđ:w”ŦÛąl‰ Ãđwßpû~[.Z•íŧ”j\‹Ö¯6ŌŲ^Ķ/lŊaé—%_,9æjCŋéÂ_õÕĮy¤A’5:{Ûxqīģą/ +[ô‰-ڙüŧá Đŧex›“æk„LIYUķĸįyá폂üđ %å2uäxņŅ@Y8q¸öËD¯Ēėî9Ž@B€ų€īĻåĘÕˇy ĢĨY.Yntˇú84H˛“Į”ĘË |÷/T{g\Üũli°Ä2pú }'ū4¸tqG {|^ĘĢ•U˛.į‘IָЀÆū9žâĖ+Ø|ŲÖŽW֎āõŽDŲ´ģføÅžļ¨Õ ÎŽÕXÕđyŠáö€ēžG,YŖK/đ2Û´Øp슎ly ¯8I[=¯#ādƒ€ĪKŲ ´rĘÔå<Ԡɚ]îēĐĘpßpGĀČŸ—˛EĘå@ ûĄ9^Ž€#ā8Ž€#ā89GĀÉZÎ!÷GĀpGĀČ'kŲc咎€#ā8Ž€#āä'k9‡Ü tGĀpG {jíƒ˙ûßŲ—ę’Ž€#ā8Ž€#ā4`Î<ķĖZk]­‘5~ }÷Ũw¯ĩŠš"GĀpGĀpę ãÆĶoqōI0žÉ‰ĪĪYōũ<ßs-?:ũŲgŸÕjĩ}´VáteŽ€#ā8Ž€#āÔ.+„Ŧ}ūųįĩۊj´åēŧTՁi/[Ö6äēŧåi[ēŧËۆtz=Ūȁ˛˛23?›<Õɘ.ķĢ“÷tGĀp@ įdí÷ß—sÎ9§VĐ/--­VOm”÷ÜsĪÉQG% .\ĒŧLiQáM6ŲDž˙ūûh”ž/k–ˇŧĨ*"ĸ!`–ĸYC€ūxÄGČ˙ûßXƊ >ūøãZîĩ Ôz%.šäŊŗÕÍOÍš5Kēví*#GŽ\Ē>§œrŠüöÛoKÅgЍNgĻŧžæ8Ģ.9'kˇß~ģ\pÁˍ8V—­ļÚĒZ=ĩQŪžûî+C‡MIÖ2ĨE+wÍ5×ȆnŌuíemÃō”ˇDá ŗ Íķ¤*6Ûl3ŲnģíäģīžĢ˜|đÁÂ}2lذ”÷ÚōV’ß >|xÖDpŨuוöíÛK§Nd5ÖH?dČ9äCd„ 2`Āųã˙˜L3‹YŸ>}´ ›@:–îž#ā8ŠČ)Yã)õíˇß–c=6Y—¯ŋūZvÜqGéØąŖlēéĻōŋ˙ũOĶîēë.éÖ­›<õÔS˛Ë.ģČN;í$Ī<ķŒĻAœŽŋūzÁtíĩ×ęņōË/'uÚIŧŧ’’Ų|ķÍĨGúD ņa0ū×ŋūĨYXjäE æ}öŲGvÚ´i#͛7—7ß|S_ĸ >Ī>ûŦæÉ”†Ā AƒôɜúiūÕ´ 5-Īęqųå—+iÜzë­%ÕŌęƊ1C=T1>üđÃ5ŧß~ûi+Ō;ė -Z´-ļØBöÚk/1b„Ļ 8PöŪ{oa‚Ĩ@˛qéú.yĶéä:Đ¯{õę%………‚u†z_wŨu‹äéÛˇ¯ŦžúęÚÆŨvÛMõüđÚ/]ßÍÔįŲģöÚkëoĸΟ?_ëDŨ~üņGɔŦ÷%ųÉķ /$럮ídÂŦmÛļ:p¯ņS<æĒģļ™ę9;蠃¤wīŪōĐCIĶĻM—Đme¤ōīžûn•ũÛßū&ÔÍ܃>(ģîēĢŧûîģōÁČW\aIrÆgH˙ūũeΜ9rÚi§ÉöÛoŸLã$Î%„<ā8Ž@yķæ%ĸĮÜšsaÂNL›6-qĘíŋ$ļŋäįÄ÷ŒI„%ŒG´ÂK™]˜˙üį?“BS§NM„eDXūH,Z´(ņūûī'ÂSl"L<*ØĮoŧ‘xėąĮëŦŗNâįŸN„%‰D X‰@´÷ßŋ}ôQR¯ÄË#>LB‰.]ē$vŪyįD˜T4%“˛f ƒ~"L~‰ŠŠŠÄ=÷ܓ8÷ÜsMU"XĀÛlŗæ ËF‰Î;'ÂD é™Ōa"ŧĨQŖ’ú–§ 5)‚Ãkĉ@zÁ" ˜R’ŦŦŦ˜q]×[oŊ׿l°úôgúÕ­ˇŪĒũ:ûD *‰O>ųDešŽa9KĪékûīŋŋžgúW]ßͤ“ōé×ŗgĪN€÷UW]•–âLÅ%ÉI’Š÷f w‰@ū÷Ũw_"Xĸ4_Ļž›ŠĪ‡‡ĄD đ‰'žx"kbėØąÉz¤ËĮHZ",ÉkŊ);™D yš7]ÛĢÃĖ  dÍeēļÕÕŦ¸îŦ'N<ņÄD˙SĻL1Õ5ōƒ%RûĶ1Į“ĢĸŠ^yå•DëÖ­õÚ2–¸s†ã#ķ'üˆņ^w ۙt,dÖtƒUĮ›H‡_Áŗā[čežb\‹ō2ÎkíĶqcUÂJöíˇß&“°˛aå:á„4Ž'ŌŖ>Z­VXAxö†nP+“'O–'Ÿ|RãXRŧå–[$ŨwLR•‡^ˇEīÃ?,ė#‹:žæŠãŲgŸ­¯ãF-aȅ‰Uúõë§YØĢ&8áŠģē´V­ZIAAĘŲ?Ŧ)5mCMĘ#¯Ķļ@zį¨E€ô•3Ž+}á駟VËŲ‹/ž(‡v˜€={˛h3{–pXΈÃ"„Ãęrúé§Ģe~G¨ÎU×w3é¤üp“ĒՅeČđ R]qÚ6Úh#ĩ‡‡ „R°†}ú駚7SßÍÔįÉ Vėûõ×_ĨYŗfÉē¤Ë­Zœ°l‡‡/•/j5Įb˜ŽíÕa–,8v’éÚfĒ cųŗë~īŊ÷Ē0Lą–-ˆö§Ÿ~’G}T­œ]tQ˛Œââbšøâ‹ÕęvÜqĮ ×͝#ā8˃@ūōd^–ŧ llffō49`Y'ęGIËŖæØ;ÂwNĖeڜŸĒ<ˇß?Æ~üņĮËļÛnĢ˝˙øĮ?tOY4Oŧ. Øæ2Ĩ™L*ŋĻm¨iyá‰_ĢÁ]j"reĮŒe'HX°fi>ëŦŗ´­ŠúKcô'×úŧķÎSBôČ#Č{ėĄņ™ūĨŌíģÕéėĐĄƒ>8°ėßהŠ\Kc9ōM[ŗéģä‹÷yĶų;đĀukÅEũx>6čĶØ,oK•Gy¤fK×öę0‹–?Owm3Õ%X˛•¤›.–W­˙[\M|ˆmģvíä˛Ë.“° <đ@R d—‡jãm˙§IDAT8–?é‹ë¯ŋ~2ÍOG)9!kŧ ĀSmXV\ĸžėÁa°ŗŊCͧOׁ.:YŪvÛmúF$-,ûHXzPLTė áĀą7…ŋ¸tåibšaiD­QkL\+B0G ˛h=3ĨÅõXxyÚP“ōŦÜT~CŒŊ†XĒ LʐûģØĶeV],RįŸžŒ3&™Î‹XqŸūyŨ É~˛LŽēžK™ét˛ŽŊ–|4‘Iũ¤“NRŌ•ŠŧLiŲôŨLųą†…eųę̝ôūË$K?^÷o˛įîä“OVëQXĐŦéÚ^f™ĘMwm3ÕBŽ5ũĄZŦé`ĩŧ.,Ģ*1eŸ/ãÄ?NpXā¸ĮŨ9Ž€#°ÜÄ×EëbĪZx1 –ßÂxš´ ^" v‰°ü”`¯J !I!öfąŸfã7NtīŪ=qķÍ7ëÚ° °ß‡}JáÉ_÷Ųžĩtå}ķÍ7‰ž={ę~%ô…%XŨƒfúÂĶģîsZsÍ5ai#ŦꇍɉđĜKēĮ.lROœzęŠZ—Lič ‘ĩōĐĘ|õÕW­HŨײ,m¨iy_~ųĨļ‡ōƒ…#qéĨ—&ÂD’øë_˙Ēui˜Ņ@€´]ė=‹ēđBˆ^;ö}…ˇ aiL÷ Ãuf[xÃO÷†ĨíhÖ´į™ún:aÉ1^Ņ~Č^Ŧoŧ1–åÁ ˜ļŌ}PäŸļĐ#Xvĩîôët}7SŸäUīŸ@RĩlęÂ^>öbeʇp ĩŠ{ š_ƒ‹î˙$-]ÛI˄íĸr¯ą×Œ{•~k.ŨĩÍT—đPĨãu ÖCmoxųÄTÖČīŊ÷ø%‚%5ļe辔)ōLŽ€#°R!°"÷ŦåAÖĸŒ/ §–)–f.jļ ŸT!Ŋ:7•ÛO^üęzTŪÎy*?aZ{€xÚæĩõt.Ä%Ū¸BŽ7ßzë-}S4]ž0áé›kŅåÕlĘK§K]˖-u‰*•LØL¨Ņ,CÅ]Ļ´¸l4\Ķ6Ô´ŧhŲvŪ0ŗļ`1KĩOˆ%CŦˇŅĪ0‡Ĩ4Ž9V–Fãû Mo:?Uß]^éĘĘ_]ß͔ˇĻiā‰3ē×-›ļ§Â,›:¤ģļäMUâšîXÄYēŦ-G÷ÜsOųâ‹/jKĨëqzŽ+|l!âMzķąžŗžgŠ•ŗ˛gjօN•!ŋ-’žkįËÍĮĩWkE@D@D@D  ‰ĩ‚ ä&" " " ĩ ąV ęęSD@D@D@ X+Jn" " " "P kĩ Ž>E@D@D@D  B/ŝrļXŽë§s\?ŸŊŌ×ĻūZ~æ›īkõõõÖģwīæĩƒĨȅܛeUŋuáÛ Z0ˆŸø•˙g*\­fuũčúŅõŗl0ĸÕ/MpĐ÷Gߟũū ¯Š¤‚b­Îúöí›Ú‹Ĩį}‹ƒį}m•ō9ߜMõ—ō,rŦrļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜¯¯ŸĪnĢŠXĢĢ̎ž={Ļ)Īōƒ W”^ÆÖežīųč¯úâ¯ŋFtũ”DžŧôũŅ÷'^~čûŖī˙Û ûoIøw#~_œÛZé—ēēEŊ/äZL…Ä-ø}mۃ—ųļÜ^^§’_%ģę/=å,âžø-;yTʋßŌk+2Š\ZĘĮ2Õ×õĮõā)^•ōøz™oUŋD ō¨”ŋU˙úņëŊŌV¯î¨DFvX HŦ•„÷Ū{Īnģí6›={vYIõvįΝkŧ.eΜ9ĒĶß˙ŨĪÔŠS˙T;šō?ü-X°`š‡)žËLD@D@V€@áiĐhģMĒ0ŧûîģ7ĩ5xđ`Ûa‡ėˆ#Žh˛ĩefŌ¤IöāƒÚžûî›ÖéŅ6ĸŠGmŲMļ­éͧÛõ×_o/ŋü˛uíÚտΟo[oŊĩüņļÆkdë”™Ŧ/$}ųå—væ™gĻĪŽ;îXîēRėŸzęŠöņĮ7ËZk­eŖF˛#<Ōúõë×do¯Ė /ŧ`÷ÜsŨwß}ļúę̎ÚÍĒÆˇÕÉAD@D`Ĩ'°JDÖęęęl¯Ŋö˛oŧŅÖ_}ģ˙ūûí̝žj¸ô×tĐAvÅW´K_å^tŅEöÆoØĨ—^jĪ?˙ŧ]}õÕ6qâD;˙üķmŅ"!ļœ.šä’$rÜkŗÍ6ŗĮ{ĖļÛn;7­t[x0ĀxāģéĻ›l×]wĩgžyÆÎ9įœĻSÚķ 9ŋ0ZmĩÕZífUäÛę ä " "°ŌXé#kNČÖl"MožųĻ͘1#ąŊöÚkíwŪą>}úØŅGmEBđp#fJ‘ČÔ­ˇŪš„ØŲgŸĸOgu–ũúë¯vĘ)§Ø~ûí—Ą÷ĮöŽ;î°iĶĻŲ[oŊeĮw\ꇩ/Dԇ~˜Ú:äCšÕ‹mÍ]účŖlûíˇˇÍ7ßûėŗÄjˇŨvŗ<ĐL_|qō§„Ķzë­ggœq†ņBäöŗŗĄÄ‘­aÆŲ×_m¯ŧōJb "œ‹ß~û-ą!Į{˙>ųäģũöÛíĶO?Mûįž{ŽmŧņÆ6sæLģå–[ĸĸ[mĩUŠ.>ōČ#öøãÛÁlwŨu—|ōÉöÅ_$į”×ĶŅĢ6_į ­ˆ€ˆ@Į'0kÖ,ëÕĢ×r t•ˆŦ1ĸīŋ˙ŪîŊ÷^ģûîģmĈFԈÄÍ‘sķÍ7ÛļÛnkW^yeZoÆMú†n°!C†$šGˏéû:.ĻYúé§ėĩũ÷ß?‰Ļåˆz‘žxâ {õÕWíškŽIâo˘1Éūg˙ P8ž-ˇÜ˛)ŠF4}ėIäXŸ~úéd7nœ!@3#GŽL\0Xgu’pÃŪŧy)Ūyį%qJ„rŸ}öą;īŧĶžzęŠtč𠊇x9ā€SÚ%ĩטSãKūp/bیŲ×í]~ųåI´rŽYƒ÷čŖĻZ¸ŸūŲ~øaÇ1“˜JFā"ZYˆ'ņq~‡v˜­ģîēM6\z9ÜĢÅ7œūˆ€ˆ€tx܇Xjĩŧi•kDOˆ "bDcH/ŊôRŠˆ<ų䓩Œ5EDˆÄqķ~ņÅíĒĢŽZfš !‡ķÉūøÚ¯îŨģ7ÕŌ(ū¨Ã1ŧûîģ6hPëŋéšŦ˜EŦ|\•é›hÚ{ėaGuTZÛÆq444¤õ‰†ų[‘}œˆAĸqDÖ^{mÛ{īŊ­[ˇnF”Ō͚kŽ™ĸiLERī—_~IEí5fīˇ|‹`#q_ũõ$6YĪĮųį#\ $"­?ūøcŠšQî/n&¸á†&FLą><ų3&>DāvŲe8p`ŗķOyĩųσ́M€Y„÷îåM̌X#ĘAÄâkČ8LcáÁĻđN?ũtCt˜ō#ēB„ˆé­ožųω‹Ŗ… [•ÜąÃ´+"ŠÃË.ģŦŠÍ?“:thĒÎtgLLī’ŧœ<ĮÂĶ‹.j˜ūÉ5Ú`„áÁ/‡e?‚6=ĘäõÛkĖŪ~ųÖ$bŒ((ĮÍ9ĮĮsLŠ RįØcMBkā„N°gŸ}6ãgœ0bŦåãĄ=ÆíĘûĮ^Mžåũk_D@D c@¨=ôĐCI¨ÅûnŅQļ(Öīi+MbpDI=ôĐ´‰Š@nēŦG"ēš§wŪ9­YB„jüüķĪ͚,Ļ@!ß}÷]‘'ĻUYķ„đj)!ʘŽsaD›Ø˜vcMO\ļEbZ—béH¤×^{-E‰ât+Sĸ” &$Qáe&ĘĘb5aDĒXįĮ–W„0åØZj¯1{ŋœ[Ļß˙ũ$~?øāƒ´voŖ6˛-ļØ"šqî˜ęŨf›mRä#ëôØgē›sŽ ü`Įt5m3US%‘æ>Õæëũj+" "Đņ°î; 5ô‰§EK~điÉdĄ››m[|Ā O’Z›6kIkÍĒW×ĀM–Wj<÷ÜséÉPÖŽņZ D‡¯I#ӄLq1U‰ČâFžĶN;%@{îšg[ŧւp¤G¯rŖaŨk XãÅÚ(ÖB1Į)ĸÅûm‘8.žú$zxÚi§S¯Œ 1rŌI'-Ķcēā‚ ’ !šČú*Ķ—< Áz,ʙæôDԌöY{ĮCDŽx%НįrŋÜļŊÆė}ņĮᇞÎŅ3zā!"bˆLĸĨœ¤ā\"N™ĘDh3åÍØ6ŨtSã\‘N<ņÄ´‘‡,đįĄĻ‹Ļjķ-z\ōXĩ@a5Zƒā¯YãžGš:ŗ¤¯ôi1vf]Ŗ,Ë(1D r3ŋ} {äųVרŲîßĪz6Ô&ÔÆ:%n |HŦe"‚ÂC/†2ö‰°!r°ã÷Į¤›97mړČûT~Üė)cĖ>Ž|ņåÃ>Sk”Ņ7íō0ę•OŗĨNVđĮÂqiâcôG'ÖĒņĮÆKâ¸`A䌱“ØRÎ9e=ísņđ4%û΄zΔz‘y{Ž™~áKō1rŦ~ŽąSÎqŗ^‘ui'ĮÍØØâËņ:'Ęņįz -Æ ÆÁĮĪ-mG[­ørJ" " ‹@šPC7ôqáÆh˙ëęé6ŋq5Öž[uŗ#ūŪ/é îyÜĮbj1˛ļÉ_JJ0ŨÄÉ lô†K#5ą‘öÎĮ›+}qŽÉÅ 7čøËä47l>ž<ī‚qä ›Ûąy]„ÉË\ $cūqņĔ&"ĐĮģ@T`glą;l86‘6ĘHqĖ´Ûa?ÖkĪ1—÷Kßå‰sĀšDœųąāã×AŽírąsŪŧęÆú´‘ŗU›/ĮĄ$" "Đqj_ũܘX"Mö)‰ŗr‘æD˛b͝‡îj=ēÍĩ9­}<¯fbÍļ3m å‰ķ›ö‰)ĩ=ņm{ĻjQD@:fx­˜GĐr5˜ąAåۗ@.âÖž=vŽÖŎsoVD@ڊ@y­|ßûAG]üØŦ4kŲ¸ZÛvQjŽģÜ/nŗpÃbë§X+ôĖŗíŸ¯—tŨāūuöß˙ŅËūŌŋ´(<6Ļŧˆ€ˆ€ˆ€ˆ@ž3”ž~š^úŊī˙šČößēgš1cŊš?\€p‹)+Öp@ŦบEÜļë˙ĩĀŪúē$Đz4.™úûđû÷ 6tM‰ļTypŗį-Ni˛öŸ%ežFY`ãĮvKBčXŽX#ĩ*Öp"˛Æ“ƒ<1HtÍÛŖī-´˙™ČâöĨН[cģŧ¤ī.éÔWÎN€÷ÔN™ļČüåˇđ`iŲ>˙6ׯū­k“Pã- ŧŊ€Wj• 5ę4‹ŦaDŦųT(Ņ5^}€`ãCo§]mŌ”n/mÔShN {ũ"ĩū|Ûuø|[g@Cz5„šGÕ*­[ĢøŦ(Px(=ĸl|p[×lŖAķė—ßgÛ˙ūØÕ~›ŲÅĻÎŽŗsę–QŽÍSčgõjXlƒú,´ .´aƒYīŧ\ŋ! 4Ö¨šHĢQsRÅQ°!Ôĸm­úųš.lqĨÄöōä¤?" " " "ĐÉ x¤ŒĩhõõĨ_ŅA !Ôøķ‡ ZB•k4ŽøŠbF|Ÿ†éŒ5m1ꆏD”D@D@D@:+ô)ę&×N44T.ĒæõĘšeŚwP.Øb§ū3LkåHĩ/" " "ĐŲ  ™\7ų˛˛R„­žéa‚8ũYI¨ÁąĸXŖŠQ°y§tæ"Íײ᧨ԔD@D@D@:;4“eå/ƒų–R‹bÍpÁæ ĶĄ‹ŗ¸mŠ#•‰€ˆ€ˆ€ˆ@g"āē)ˇu­ 5üZk8yCQ´‘÷ķ-ŲŧL[čˆ\3ųØ|ߡåvßoi[HŦyåĩf÷rmE@D@D@D ŗ¨¤ŖZã˛\b-6ļĸÆ6”h™@é×Ų[öQŠˆ€ˆ€ˆ€ˆ@HŦÕŧē"$֊P’ˆ€ˆ€ˆ€Ԉ€ÄZĀĢ[(B@b­%ųˆ€ˆ€ˆ€ˆ@HŦÕŧē"$֊P’ˆ€ˆ€ˆ€Ԉ€ÄZĀĢ[(Bā˙`éCI‰î:IENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Mark Resolved.workflow/Contents/document.wflow000066400000000000000000000160641445560650400325170ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx markresolved "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{209, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Merge....workflow/000077500000000000000000000000001445560650400246305ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Merge....workflow/Contents/000077500000000000000000000000001445560650400264255ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Merge....workflow/Contents/Info.plist000066400000000000000000000011711445560650400303750ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Merge... NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Merge....workflow/Contents/QuickLook/000077500000000000000000000000001445560650400303265ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Merge....workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001112251445560650400327610ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëViCCPICC ProfilexÕYy8U]Û_ûĖį8ĮpĖķ1Ī2™įyž Į<ĪCD"‘Ą”D‘D*C(eLB¤"’(¤¤¨I!ßVĪķŧī{}×ûß÷Ύ¯k¯ũÛ÷ē×ŊîŊ×Ŋ×ēkĀžLˆAĐek¤KqvqĨ`§pČ@„ęĄcmmßũ—cũ€vĢFĨvmũĨ˙&fđņö˛†ŧ|ĸŊCa| „ŽwDT Č Xū$>&ƨ0fŠ‚„ņô.ö˙ƒWvą×oŒFũÖąˇÕÍŽHĨFų@„å”8oØI 9Ė'0 FgkzP}`? ëH†††īâ^‹zũ›˙ÃTĒ×?6ŠT˙đŸg[ÂëFG„P~ßü_Ą!ąđûú}á’bš;6,đščCÕ7ƒ¯\đų+"ä÷˜Á:‡o˜ƒ,ÛŒa^–VaMŋ(C[Ãm!ëˆŨ] ŋ3Č/"ÆÚū/ųĄÄ=Kayo´Áßv.QMwĮŒ–7FÅÚ:ĀXÆ]Ņqv0†# z“`īô—ʏ¯ū_rÂ/ĐĐ䏂c˛Û<æüÁáfģ>Ā}!”€ž DÁeæ@č˙UJ?@…kâāēh ` ˇ‡Û„Øō—žŪ˙’ūnįˇûO‹ā ëÆūĶįŸŪ(pŸÛ >0ū[N…ûØ­Ûõ.Ú#0í_}ū­ąkīˇ72ĩ2īeļūö %Œ’C)ĸtQ(M”*  XP@ Ĩ€RAé ´Pęp*0o`Ëūû¸k?´Ņ/îlx‚šc\ģûė^×Įßځ˙Ü˙/@āĐrËōßã{ūĐ Hˆ ôˆĄčĀ_ޝ$Å$Ė[Z’"'#+ģ[ũ˙æØŗū8ģjû{.‚X†˙% P@},ú_˛Āj?Āįø/™`ūâԌxĮFÅũą‡ÚŊ ĐÁĘx€…ßŗPę@S`ė p‡ã'ŽÁ(’@*Č9ā$8ŠA¸Ē@h- tƒû`<ã` Ė‚ˇ` Ŧ€u° A"AŒ;Ä A¤iB9d š@ž?ÅBIĐ(ʇŠĄr¨ēĩAŨĐChš„æ ÷ĐWč'‰ "˜ÜaÄ„ Ba†°GėGø#"‰ˆtÄ ÄYDâĸŅ@Œ#fKˆoH€¤A˛ ųRH¤Ō éŠôCF!!ŗ‘…Č d=˛ŲEÎ"—‘?P#Š‚’‚ãÔå€ōFEĸĄrQŨ*T3Ē5ŠšC­ ~ĄIh.´Z m‚vFûŖãŅčBôtē=Ž~‹^Į`0,Œ2Æ゠ÂÄäbJ1 ˜.Ėfķ ‹Å˛c%°X+,ƒÍĀžÃ^ÃŪÅ>ÅžÅnāhpŧ89œ!ΆKÃâjp¸§¸w¸M<=^¯†ˇÂûāđyøJ|;~˙ŋI` ˆ4ö„ B*á,ĄžĐG˜&ŦŌĐĐđ͍ԨĐŌĻ9KsæÍÍ"™(NÔ#î#ÆO¯ģˆ“ÄU‰$LŌ&š’bH'HÕ¤{¤W¤ ZFZiZZÚÚÚfÚ§´ŸčđtBt:tît‰t…t7é†é–éņôÂôzôTúCô%ômôôßdŦBrj2,’ąda˛Ų‡œNžDžGžgD2 0ę1z3aŦdėc|˄aa2a bĘaĒcbZa&3+0;2`.ažÃ<˂df1a aÉcidyÆō“•›U‡Õ—5‹ĩžõ)ëw6N6m6_ļlļļqļŸėvö`öSė-ė/9Pâ6ņ8ú8–9™8Õ9Ŋ9ŗ99_p!¸Äšlšr]âäúÆÍÃmÄÁ}Žû÷2 6OOO'Ī{^F^MŪ@ŪŪģŧ(ĖJå,Ĩ—˛ÂĮÅgĖËWÎ7ġÉ/ÂīŸÆßĀ˙R€  "ā'P Đ#°"Č+h!˜$X+øB/¤" T$Ô/ô]XDØI8S¸ExQ„MÄD$Q¤VdZ”$Ē%)Z!:&†S +{"ŽW/–@H(IJ”JŒHĸ%U%Ã$+$'¤ˆR:RqRĩRsŌ,ŌæŌiŌ-ԟöîqŨsjO˙ž_2Š2!2•2S˛dYSŲ4ŲvŲ¯rârŪr%rcō$yCųųVų/  ž ž+2*Z(f*ö(n+)+E)Õ+ŊWTöT>¯<ĄÂ¤b­’Ģō@­Ē̚ĸÚĄúCMI-F­Qíŗē”z°zúâ^‘Ŋž{+÷ÎkđkP5Ę5f5)šžš5gĩø´¨ZZ¯ĩ´}´¯hŋĶĶ ŌšĻķIWF7JˇI÷ģžš^˛^—>RßH?[Ȁlā`PlđʐßĐß°ÖpÅHŅč Q—1ÚØĖø”ņ„ ˇ‰ˇIĩɊОi˛i¯ŅĖÎŦØėĩš¸y”yģÂÂÔâ´Å´Ĩe˜e‹°2ą:mõŌZÄ:Ōúļ ÆÆÚĻÄfÁVÖ6ÉļߎŅÎÃŽÆnŨ^×>Ī~ĘAÔ!ÖĄĮ‘ÎqŸcĩãw'}§|§Yį=ÎÉÎ...­ŽXWG×+ŽßÜ ÜθŊŨ§¸/cßŗũ"ûėčÎáâ~ĮƒÎƒęqĶíéäYãšEĩĸVPŋy™x÷ZņÖķ.ō^ōŅö)đyīĢá›īûÎOÃ/ßoŅ_Ã˙´˙û­€Â€å@ŊĀâĀ/AÆAeA߃­‚¯ī„8…4„âB=CÛÂČaÁaŊá<áÂG"$"2"f#Õ"ĪDŽD™E]‰†ĸ÷GˇÆ0ÁÉá`ŦhėŅØš8͸’¸xĮø›„LOČJx—h˜xų ę ÷Áž$ž¤Ô¤šdäōCĐ!¯C=))é)oŽJ%¤§>N“IËO[;ât¤=;ũpúüQŖŖĩ´Q™ę™eĮPĮ eÉgËú•í“ũ(G&§0g+×;÷ŅqŲãgīœđ;1”§”wá$ædØÉg§´NUå3ä'æĪŸļ8Ũ\@)Č.X;ãqæaĄBaYĄ(ļhöŦųŲÖs‚įNžÛ*(/Ņ-i8Īu>ëü÷RŸŌ§´/ԗq—å”ũŧxņyšQys…pEá%ĖĨ¸K •Ž•ũ—U.W_ḒseûjØÕŲ*ÛĒŪjåęęޚŧZDmlíûkûŽ=ŠĶ¯k­—Ē/o`iČšŽĮ^˙pÃķÆŗFŗÆž›*7ëo Ũ:ßÄØ”Ũ 5'4¯´´Ėļē´Ž´™ļõ´Ģˇ7Ũ–ž}ĩƒ¯ŖäķŧNBgzįÎŨÄģßē"ē–ģũģį{÷yž82ųåE܋ͩÃĶčéė—ô/ _qŊǘ›i˜UšŊ3§?7øÚîõÔŧ÷üŌ›č7[oĶH …īxßU/Ę-vŧ7|˙äƒÛ‡ˇKK›Ë>ž˙$úéÖgí΃+Î+oŋD}ŲųšģĘžzuMa­į›õˇWëĄë›ßŗ7Ø7Ē~¨üč˙éôķŨfüvëėļØvû/ŗ_Ķ;Ą;;Ô(ęī\ —??ž^…9„ Ėž@ ũÃ)~kĀt‚u`Œ„ķ_a` į§×ÁwH J‡&ęˆjxŊ€EuŖŨ1Ķ‚=„ŗÄsã734O‰¤G´éÆč—Č8F)& æT–kŦ/ŲŲ8,9s¸†xx-(š|ã|‚ūB5Â_DÕÅâÄīIĨ ¤“ötÉlËÉĮ+\Sü¨,¤bŖšĸV¯>§Á¤Š e­ŦS­ÛĄ7¤ŋbHcÄjĖg"eĒlĻgncábéo•f}ÎĻž ^Ų¯8'g1W[ˇČ})ûO¸WytzŽPgŊžú |É~‚ū z–AÎÁž!ĄņaIá™Ų‘ųQyŅ'cÎÄæĮÄ8p21ã`JRlrĖĄ ęaįTŖ4# éRGy2č2v2W-gMgä´åÖo>1{’õ”Q~ÂéŌ‚Á3;E2gŨĪĨוŧ.%]/ķŧ˜[ŪT1Y‰¸,zÅâjlÕņꆚĄÚutõ˛ Ļ×Ŋn$4æŨŦēÕ×4ŌŧØōĢŽīļL‡æ‹NĮģ>]áŨzŽÜËī=ßW{ŋĨŋįÁŨ‡CÆß<ē<ûÄ`„<2ũ´aôā˜á8y|æYũÄÁįĻ“ė“o^´NeNÛŋ|šųĒæÂläœūkÖןį{ߔŊM\px'ģȰøķũŗKÕ˧?Ļ~Šûŧđ%đkđjÂZîˇęõŒ?ŧ~Žl…ürßŲŲ€ƒķE!°¸‚C LÁ™t šBČ N!~"C‘Pqh"ēc‡%`pEø‚)Íĸ(‰—–…Ž›^’AlĮɔË|•åë:;…Ø3˜+Ÿģ™į%ΧĖī&%Ø&4/B•ŗ•8-y[ę…ô7&YU9ų…bÅ&Ĩnåį*[jŒę{å5Œ5Ŋ´âáh8Ŗ[ŽWĨĶāŽá Ņ”ņĸÉĒéŗ-ķmK”5› -Ÿ¨Ŋ‚ƒŠŖ’“ĻŗŠ‹™ĢŠ›ũ>§ũÖîļļžöT7/Go'_+?sĶŨ@Í õ`ųņP0Žp–r$}6Ŋŗû)î]üˁɄ§‰ŪOęIn;Ԟrķp}ęÕ´ō#ĶĢŽöe,#eIdæøææŋ~b8īã)BžâiĮ‚č3Ņ]EķįPÅ%–įcKË.ô—}*gĒPŊä^™{šåĘtĸZ篺6÷Z[ŨBũuÍŅnÜúŲŧ§Åŋĩ°­÷6Ô!}'°ŗėî“nLÎŊÔŪŽžĩ~*÷>ŌPTzŦ4¤4ŦôDvDüŠÄ¨ČĪ8Į3Ļ âsü$4šũâķԇé÷/ßŋš›y;;37÷zvūå›ųˇ6ŪíŧĮ}āX’^Öųh÷)âsöJ՗¯_Öxŋ™¯'~¯ÛXø)°šĢl{q‡˙¯ņĮ˜o) ˜æƒ;āÄšÁyû Bq1Š”E ˇQĄ¨7h/ô"&ŗÍÉāâÃŦ„šĸ$q‰TOC§ᑪ •äDFk&fˆyŽĨõ*[&{‡=§—07–{į-ī Ĩ‘¯„?C LĐFHK˜_-˛!:.Ö,^*qXŌCĘPš"ŊĩįšLŊė9WyqŦ„âĨĘ*"*;ĒãjUę‰{-5$4QšSZ×ĩéøę*ë1č­č\6L2r3V5a6ųlúĀŦÜ<ÁÂÎRÖ kõÚēÃĻĐ6ÆÎÄ^Č~Įášãu§,go%Wzסö}yûũŨu<8<>yvS‹ŧÂŊ |¸|V}ø•ø‡hrĀk}o𚐸PÃ0ž°ux]¯<å­Ã bgãzâ+¤&ø$ObHÚH~u¨7ĨîđųÔ#iQGÜĶmŽjfHeōcĖBgũĖūœ3Ÿûüø?ũ';O5å7œn,h8s­°˛čōŲ‹įƊ+JJÎW”^ŧpĩl¨UĄp‰Zyârį•Ĩ*†jÕīÚã×ÚëØŽ›ūŽĄą&RŗnKTk}ÛįÛrîÜŊKî éž}§7ĨīSŋ΃éGÎĶķ<š˙4vĖā™ÄsÆBĶF¯Rf?͟X{Ÿ˙ŅæËđ†ķîø˙Ų[Ú]0JœõĀ…#r÷ Ü+köĒ!Í o=ŌÍûgũ`jđĖ‘Jaž8Ą Q˜F@0ߛA`ŌD2â2â âRiƒLFÖ 'Q8x!fbCh$ZŠž„žÂ0cŦ19˜~,k„=ŠíĮ‘pޏbÜ<^ ƒī%0|7i°44­0ķ %> ‘rHĢ´N´í0›)Ĩ'Ō¤_acøH%¯0Æ0ū`:ÂLd>ÉÂĘRÉ*ÍÚÎfÆ6ÃĮAā¨äÔáœäŠāfänãqáŲâ­¤XQ~ņÕđī ô &Úūwá6‘QC1ąIņJ‰IS)Qi´ôĖž>™*Ųlšxy_…}ŠvJVĘ*†Ē&j–ęž{5â5Ķ´ĘĩÛtĻu?é“ T ũōkL.›ž4K5O´ˆ°ŒŗŠ´Ž´ņĩ ŗ ˇOqČu<îTä\īŌã:âļ°oĮĮCÃ͉šæUáũĐé'ëīP8 BtC…=‰āŒ ŒjŠūë×|€”–ø$I1ųR ÃáCŠ;GBŌ?f„f.gd΍8ž‘—~J4ŋąĀėĖxŅĄsF%öĨ!eGË[. _AUŠÔD^ģ\?ƒũĻ_Ķ…–wí{;ĸ;‡ģI÷¨}- G.ƒeCK#ŖYãˇŸ“_ØL§žęũ:ĪúÖøíû¸ĨC“?Į~q]å][X?ˇ!ųãę&~ËvÛũ×áßķ‡,ŧŋUúĀˆ2b 2č´Ž  Ėa1†D"åTd>˛fäR(OT!ę1‹ÖE'Ŗ;Đ?1ǘĖ,Āęcŗ°Oq\¸\+wÅ×âœ7`îëKĶM"Ļ_“ĖHí´ÚLÚuē@ē—ô6ô} j wȊä&FuÆn&cĻf7æ–XV,ë6ļgė45œœk\ÅܚÜK<xÍx7(×ų‚øyų§ĘŊ„D„–…¯‹ĩãû.>$qEō˜”Ÿ´ŅYŒėšÜŧüS…{Š]Jˇ”á4TĩQ­MŊsī}1˜%}ĐAéŌę‰čkė3L4*2Ž3i4­1Ģ5o°hŗėˇąž°™ąũb9đ8J9Š8;¸Ä¸fšUėģģÎãÉC5ķ ō>îsĶwÚ čt.¸'äk˜x¸wDiäãhŖw#ūk‚JbäÁē¤ī‡´R2¤‘ŽXĻ—ũš)},;k"‡'7ęø@ådôŠžĶt^gzŠøÎk—,•—y”3WŒVæ^ą¨Ŧ~WÛP—ÛāyCų&×­ĩæéÖļö[ĨŠ]>=nŊ{ī+< Ÿ+w|,/ę1ŋŊĀöĖvŅųsä⸒ŠRë Ũ•ĘĢ/ņTV\žZį 7¯)×u4h_īk4š9×ÕŧۚØļ}ûôĄÎĒ.ņîk÷¤{îËô_{Hû(wæqÔĐü›‘ëŖ´c!ã'„žž|6Å6íüōė̉Yæ9ÛיķõoîŊZØYd~/đ‰o™÷#÷'öO۟_­t~)ũ°*ģēēvã[č:e}ü{ėqŖō‡Âģ?Í~>ÚTŨŦÚbŨJÚz°Íŧíĩ]ŋŊųËč×É_“;;!;Íģãí'/ˇģzˆ¨ o?žÚŲY†÷/ķØ>ĩŗŗYąŗŗ} &đ?Ž?˙+v•1đžûųŦ]tīFÕîå?Ž˙Sßy‡x>a IDATxė|UEöĮOzGņ¤¨(Ø+öŽk/ģØW]]]{ŲŋŊnąŽēÖĩ—]{/ذWD@”Ū‘–öūķ=Éy\.ī%/!呜ÉįfîræĖoæÎü÷åL›6-!îGĀpGĀp˛ÜŦÔʕrGĀpGĀPœŦyGpGĀpG ‹p˛–ōãĒ9Ž€#ā8Ž€#ādÍû€#ā8Ž€#ā8YŒ€“ĩ,nWÍpGĀp'kŪGĀpGĀČbœŦeqã¸jŽ€#ā8Ž€#ā8Yķ>ā8Ž€#ā8Ž@#ād-‹ĮUsGĀpG ‰Cā8ĩ‡@"‘ŌŌRųųįŸå×_• HĶĻM…p\NNŽú~Ŋzâņđ-y’—WĩįۜPÕN]ZĘŽģʧu—-šŽĐôĸūyôûmUĮ›ÕŠŋ×Â-To"süįĻę {/¸#`Ä ĸ6lØ0iŪŧšėŊ÷ŪŌŦY3%iyyy ¸ö ģj´­ĩ/ū°Ņķ¤[—ļ’H7ŧ;üWž(ãā1Å\!ŸHIøW\’™SÉŗ—ųŋ.’ëīØ>ô‘˛gg›LËrÕĖĶ7ĶūhéĶ•N|\Īøuēŧžz!@[[Ā_úûę…pfÚVíq03™žĘhÔDļącĮĒemß}÷MZԘ0Ë&ö˛IIί—cąēāA;Ķ–ŗ EōKE––„#‘+KYËGA`k\/ÅqK‚Ÿ_šâsĨÕÚíäˆsv”…íZČ3˙ģ„X“7Puúc^nŽäFrë/m3ôŨˇå‘GI’5ÂHo‡÷įåX€ICĀcuéī5yīd“,_ÍĻÖp]  lÅÅÅYÛjĢ­¤¤¤D&÷’’bIÃ@îūę…mhíKģÎ[’ųK‹%GÉMihĶ2â‚- ;ÛoŊ,ö:P¯B“‚—Öĩ`a ~~QŽôŨ̇ŧú§rĖI=¤I“&Ú'júF0}+돔[TT,ŋN›ŦĀÍĨ…Us „,O–,Y,oŊõŽqÔ12k֜Џ1†ú””J‡íÃrp™ÅØûuÚ¯WĮūN?nhÎÉZ ´čoŋũ&K—.•Ž]ģր4QU˜ˆfΜ)Ī?˙ŧœqÆšÉĸ6eΘ1C^xᅔe_TT¤–—.]ēâVĸúDõę7}útųī˙+įœsŽĻ'.OāęrM]Á2N/*JČŌÂ`Z 뚁¨%Âē§uŋž&Wē\oGéģÍ.ŠSHŠ$¨(X▅ŧí;ˇ“IŗrUdjÚUÖ›4išÄáÂEōÕ¸|ŲĸĪú˛´ _š4m)E…ųŌĸU+yočÛrÜ 'J˙~[ČÂ%E˛Ŧ XZˇn%ŖGVĸÖĒUˤęŅūAāĒļ/2>ũôS™={ļtĐA+á´Ēō=Ágœáą:ö÷˛4Ŧ˙ž Zö¤ķÚqöŲgË1ĮŖ“끓áÄWՙLü!C†čäfaU•U[éMüM7ŨTĻL™’Ŧsm•™NŽéBüŦYŗäŅGM&Æ%+8aōÍÄEå2iÄËD†ĨY˛d‰žc})..*?ŠĨ8X.Jyc˛§Üûīŋ_žûî;msöļĩk×N ō ÔwįwęK ĨÁrAú¤….\sN~õkø:~F+ĪôŅz”—Õ7ĒdíHę•oōĸéŠoļ^S_Ú˛–_œ‚ОˊKei _Á'lá’šûĻËĩ[Ũsķe˛`qž, á¤YZ$!]BߑÅÁĪk×R/^œė;ŅžhũiĈ˛Ã;$Ķž‰ŗüõGÃĖ9&Í͕ŸgåČØiEōÚ+/ɯsšĘ'ßL’ü3¤÷æ[ȰO¯ž.Í[´  EN‹oy˙´öEÖkŦ!›oļšZ˜ûõë'>ø |ûíˇ˛ųæ›kYڏ~éÚ;˙ÕW_Éoŧ!q}íēļî‡Æ,ŋŽû{&}ē1ĻqËZ[=:@~ųå—2f˘°,đ–JÉĪĪ_Aiy:ŠŽû×ŋūĨ{œ,īĒČ2ĢęGëŽ,ÎļmÛ&Åf‹Ž™bnõ™4i’vØa:Xe2‘aųS՛‰§°°P—ĩt˛ ×a–Õ žđâ0ąáČûáGÉqĮ+}úôҰąãƅɏå¨"/y‹ŲKę„UJS–ũcĘŽÉk–žLú}ô;ļ\?t( $…=8æŦ|ŌrÄõEGBE’ō‘gųãō˛õē$äŌĐ&ԉú7“Â°Ž™–5KsÃiIX đŧųĖÃ2kÚdiÖŧEđ§ČĢĪ<(û{–„´†ĨÃp,-*•ĸŌ°§ŠeSYļl™–d;ĀĖũãwŪąKõ‰Ļ_!2rQQ¤ôGdAv–…ū9bô‚`ūM —Ė—/†~"MרCžūāuųŨ›É‚Ĩ"cÆN–ßĖ“6Ũ6āP"ŗį-“5;æ–íË åę­P/Ķ˙ЧŸ’îŨģ—iÚüŪ˙ũ˛~Bĩ7…[$ŪČoũƒs%tÁŪħęe… M~y€_—ã!uŲß­ÍÜ_ˇŦ­ŒIF! ˜ųą,ũøã:ČĩhŅB'ânģí6ŲmˇŨäøã—áÇ'ÃŦK^;īŧŗZˆ×)äáÉz˙ũ÷×IūĘ+¯Ô™8>ųĀdšÍ6ÛČŽģî*Ÿ}ö™æy÷ŨwkK,Į™œ¨˙ä“O ˛ūøĮ?ĘQGUaž_~ųE­„ņrnŊõV-÷„Nīŋ˙>Y‡åĮŗÎ:K>üđCō˛!š?ū¸ĻŗŧqîŊ÷^­+õųāƒ’2Ŗē§Kc2Ņ'Š- X~°Ų}÷ŨWÂâąĮ{¨…‚öaųúâ‹/–9sæČ>ûė#/žøĸÖÃʈëÍdšãŽ;*îfUŗ25cD&ö AΖ-  kZ#Ü,Q_~ņ…\sÍ5Bß4h zApĨÁį|üøņĒ ŲM7Ũ”œÜ‡†ēŌočS7ß|s2Ŋ•A~ōrČ!ŌŋŲy§|,~ˇ īąĮĶūEx"ĻßåúaEF‰?˙Ŧ˛ļŪzk-ķŊ‡ yQ}_ũu-o— ×C=¤mŖe†´ožųĻæķįÂō(r‰ûķŸ˙,÷Ū}ˇėšįžrà 7¨Ü3Cßúåüųķ“õƒXp˜žõu]ø'˙ųa)´ 0XÖãxøirכãäÎōc÷#Ζ´YŌ,éį„—ɔ…ˇ@Ö´.áūIįhÃ?üáÉ>N?æAq¯ŊöR,šã}Yž•õGkŸ%ŋå˂ųų5‘ö:G –,•ŌĨ“ĨGĪ-eöĖBŲzģ˛ûž‡ČŧĀÜ´îáŌڑūĻrĘû:XœÉį!—1kŌs/žöÚkz_mÚyčĐĄeqĄ}o }zË-ˇÔ>@_L„0ë/ûÛßdĮ`m<ōČ#å›ožŅŪT䓊Ęáû` XŅē°ŋ G]Ѕ RȀ 6ČcĒŧā€ōī˙ģ|ūųįēDb¸–ĢŦ^<Md&LXAöHQ6ņ8dq~ÅWŦ€Õņ‚ .PâJģ‘Ž=B×_ŊüîwŋÚ—Noâ.šäŞW¯^rß}÷¤eęIø§– ƒõ=aaīŽAŊ0XPëˇÖJå¸ãŽ× R¸įž{„t…ašhKŨĮļlYĘYŧx‰ųëŽģ.LÖCdī0Áœrę)úI­ˇŪF˜°N>ųä0iīä'BŪÅåÎčQfłÜmģíļááÁ@¸‡+)úč#vŽ> 0Ņ?˙üsÁRÚ^ķcĪ Ļ“úąŸéÆ kģíļ ėÁ@–ŋWYedŊ,é{á…*qīÕŗ—<ôđCŠ÷oŋ-T+ 8>ķĖĶáh+ûÂļۀĄ6•iĶĻË×aōÛuÖéúŨ;ōCØË÷Ę+¯]‘/+ÔũÕ*Ŗ˙ˆ/ˇÚÕâ5J”& EˆËÔÅM¤ũŧ`-Ęi"ÅXמĩđž/͝tč­ŖGø‡ek,Ž‹Âk¤3 BsĩlÂĘđÏ;°ŧ…O-i:âš˙x(zâ‰'ti‡îAéÍâ•›Ē?…‡‰ÅaĖá~āEÅÜŋ Ô-ôViŌļĩ˜5C6čÚZ6čļŽ,ZŧÜÂĨ˝ye×6^ņԁíWˆ{øá‡ÃŊŪ1|ž¤….÷ķŊAtéXÅx …Đß˙ōnx â!Ļ˙~2qâ/:v˛ßšW^y•?öyNš4Q^}õ5yéŗdÔčQrÕUW…ˇT•yķæĢÕđāAÁ*<,´Qh§@$Ëú#GĶŌŋîģ,ûÜpã ŗRÕã›ožÕ-(Ÿū™üéO’/>˙BØĒpĐAũŪ•Ûī¸]ŽŊöšûî{“ũ/T#Ȩũū§]ģûw\~¨T÷wúŒģp˛ļ"_12¸wŪy˛ũöÛĢu†§ž˙üį?ayUK&WŌą\ˆĨËî/ų‹5ÎąN1]vŲeJ: vČ5ųČ„„üÄ1šLŦX8+Bf„A#Â?žŲëB^&Btą|†Å%U9L’Ȯ֝Ø[…#?V0{Qzöė)k­ĩ–ÜqĮ)ķRŦ2ĮwœZ” ”\âi°Ē&ļÄq@†Đ!^GđBg^a!ŽōП<8|ÂŌÕ‡ ^ ,žÂ!ŸČ°IP…ĻĀ…#œˇËÚ( ėåá*K¯)4]Ų?6•x1QŗlÄ~ļ¯žúRąūä“OÔÚ4 Č)u>ôĐC5ĢaÉyą˜ą×§I“<ĩvQˆíŽŖˇk×^õŌ€ržÕEŠÂË&+7ŧHū2YÃuO’æ jcm&ŧoßž´Ë.ģčC“ēūûß÷iyڌ>JüI'$ëŽģŽæëÕĢ§Ė;W !đhŨĸįšĄūi[ąėHĸYhßĸ0I‡jjC›å„ˇ=ņˏ´~hzū‡¸@æBâ BJrō¤y^xƒ4|×ú ŠĸÎÂņqô7sW_}ĩtėØQzô衄ˆ4Š01Šú# [˙4Ųŧ Ë DŦ8e‹dÆøŅōX Ũ9yÍd×ûŸé#ŧˆ]Q8¨7íg÷B™.ešvęÔI8y(ŒęWö6iYVÖ\ŗ“ôØ´‡<úØŖ!]n°Ø ũ‚‡Uäņf5Fܛo˛ũ$!7ßrŗ^cYŖæ„6aü9ņē4ÜĘC2Úĩo§i>ũô37nŦö/râŸŪ#Ôår9j¤>@ŖÃGŽi?üpŊ×JKKVØŽ­&l˙´īÔaoÕJœŦUVíŧáĻ7ŸIæå—ÃëųaŌdo 2Š`éÂa’ĮŲ@H>#LސŦsXŠ6Ûlŗ•Ō‘k›åGˏ-[ļL–aÚd“MT'âq¤§,+ˋnņ|m´‘–M9 æ–ņēP2- >Bžč_zé%ĩö}ôŅZŋx^p°ēCj!:§Ÿ~ē`í2E™8äō-'Ŧx§všĻA.Õ×[o=­7˛ ã¨>éęŲĸ~āA]qVķ K§7ËÄԕ˛ė =įČDFÜŅnL^öIŌØĩM"äá܎čĩɃ cš8p °É,×\sM̓ER„… ‡…”2ĖĄËP`+"‰ŗkŌsØ5yŖõ1ŨĀ~•ÅŒŦh~Ŧ&mÚ´QyČąüøŧ ‚…˜žÄ5m¸ņÆ'ˎʡމŠ?:Dã ?ˆēx$ŽôöjRvȋŭ8|ŽE‹6ŌšËFŌŦīYōņØ`Ų›÷žėĐņaų3|ļdîliŦŖÅaŲ7'XíÁ„r9LKļ´ąĩ›ų¤AOœŨ›zūíG„f>ũˆą€~„ãž0šø–ŪÂIĮ*Å< `!įžątÄãėŸ$îŋh8įŒÜG8“Oú8îĢûĩĩ!õ¨ĢūŽ úŋX>ĸ¯ė™ Ā`ÁML'fÂâÆ]guÔâ‚ ōÄR)ƒ˜uz|:ūF(­ŊöÚjmcOaÄ!ŸŒũ;XÖØûD>yķæi:Î9xÂ&Ÿåĩs|är ‹å3ŨȇūXāâå@ÂĸuĄœ(q4}!,uđÆyĮōÍKyä-((Đ:@Đø”ƒ%:šãœÉŸzFĶ ŲXÉĀÖęÕ|âuäiŧC‡I+YÎ Čd™ũ‚!ō§Ķ *Oõ,ؐ=6æĸúÆ5¸Ōöči“įvMzy›`ĸׄsčua‰|ܸqēœ‰ĨŅ&?ô—Ûoŋ]ą4šVõc˙K•Čš:uĒZĘ,YË'?ĶŅō™ŪĻ×ļäŽ,ôeYŽū6¤3ŨY+Č5ƘIƒîäAVUHōŦ,|Žšŋh;öbŖYũ¸7ė ĖÎņkķÚđąrZ5Í d­‰´ŋ@ĐĻüh,e[ī~ ĖŸ2N~ũ~˜Ė˙ƒl=ø0iÂÛ5oŌ6•V!mëfyáȕ&aΚõ,ōĪú–ųôQúÎÎņq&ÃŌj`$ŧ˛ūHŨĀŊ0ėŋË/X&#>ū|õî2vÄ;úə-šrÚD> /ėÛ1GęȞ8ę6VG~– YNcŖ0„ũ|¤į§ Øt Ô?Ž7íi8÷Üs5–Ąƒ>8‰ŗ•Ūæ˜<Č9Ā…8ÎÁˆk™Tė /iĸ“ixéŊ‘Ī=÷œęƒė˛ŸŒ´Ô>Íkē~ċ“&MRĐÁœ•mzŽ<Ęå0™œŗ‡žîČb$‡•…,ú:ËũėdÂŖãČĪw፠2Ŧ}čkāniŦî„—OؗH_A&Yt‰ę‰Ėēt†õå’Ö*ėˇKäĢtXëƒáȕļ­:ˑįÜ$]9DũĶĩáAnŨ°üp ųØ$_.ōōŠĨMaiۆß]ĻÕ0š°s|;쯎kKOXËG|ŧ?–´ũY\†}ka)tƒžĮIÁo“dūoSdîėɲtÉ\i—øEæĖž,œÛ†=l=‚.ŧģliĀĸ­æĨ_Q>˛ĖY›Yģâ“ÆKŋf\aųbÄ}ĘCčt„ą*›žyæer(—˛°ĖBTŲ#Ė}NæĄq”=ÃaųG6åDĶY}‚ou¤q^›ũŊ!āU[uđß­˛6čá31¸ņäĪĶ˞tdņXn°Ø0Č⏙S9“‹†“—7ᰂQqčĀA8– I4ĸņœ›,;'Ö t3Ŋ)Ÿr§Î-=OŸŅēDu5Ų–ßŽÍ‡,Y^dš\ôÆbDųώÅŲÄÁ~%H’…›>&“üqgiđ)ƒ:Zš¤%biíbé céÎđˆ–A~s´9XÛ¤„î҃|āÅR5ƒ:/X= '?eSGúíCsVĻ…™O°pŲR$áėÅ#,j91ĖŦ Ōņâ xRG“Oyčou˛ōŅÉtäÜŌ›´õ˃oņ¤7Ŧ3, }ÍŦj†ģĨŗ´čÁÃ(Îņ:ÄõĢ­kÄļ„đ?ūséļF¸'ŠcnxQ 5Ģ ­ųŌŋo‘OšūÚ˛Ž` ̈á Ōb™0uĖ9BÎÜ\÷Z҆'¸ƒ•Ũ\sā CĢ'e>„>™ôGöcQõ™5{ŽåĪŌuŨnaGš„%ëöAŸfŌ$Č_¸hŽ4™õ¤\pūå˛4ôãĨK—„æ6 ¤}ŧ ÜŽ“ļũˆ˛ŅĶúúš>œãПÃęCzĮëE<ã÷ĻőÖõŖЏ |ÃÂĘ%Ėt‚đQ_Č+˛ņÁœˇGŲ“I_‹Ū?üđƒ>üaQ#=÷é­ŽVV*ũMgĶmuģŽËūnmęūĘ,´^9ÎC*A€› “§~nĀčAVnf#vŖÎ9‡Ĩ',•ŗ4‡,“ŊፌX:ķŖåÄeqÍāfÎärmåXøéęB\TļåAŽ…[^ŽŖå0ŅãČcr4 ō4 V},TĻ•oe6Ņ4 ŪnåâCb,?~ToĘFá´š9+'*ß°‚2Č30P.q6rÍšÉ7Ŧ Ží Ë­É"“-a6iāsMœ…qÎ2=>ÎôÄ' õeō1G:ôb2Œędų‘ez!ŋFĻ…§Jc/X}HÕ yč^¤A?t5ßdZ>+Ģ6¯­ŨĐũ:ļm-mۅ_…øBp`ŋhPæ†\zQό¤ņB¨Nh ũ Xēō›HŗpŌbŽ{%ëny͏דrãav.ŽĸūHŸĻ^¸V-[Č  ƄoŋMĐ ûĨ°Ęđš\§&ÍäĢÉÃå•įūK{íŧÅ qm9āwIŌC!ΰ"¯ĩ1úqЏė<Ēŗ…Y}H“ˆ:Č­=dYʲ~B˜…Ŗį¤G.VāhúûÔĖQžõc|;HĮĩ•ƒĶĪĘ\Ũ¯­ ë˛ŋöî/G`ųČŧ<ĖĪ2@ĀnD’FĪã×ÄEh<á øņštfyLáœ[¸ųoזÎn2+ĮĘ´tQŸssVųÍEË ĖdZŧ…á[ųĪ ˇsķ­lķ-?•iåásDĶÆķhdDVŖxŪh~ËkiRÅÆ@Že‰7#ų)2&>ʲōāq†1muŅēX˛M†åÖ×â,eX<žé‹oiČC:|‹G6陔âųŖ×¤‹įąŧø¸hšvo噄EĪ­¯Z~‹‹æ‹–mųņÍÕtŧ•mō×\“Ŋ|AoFĶp`Aã š=–sí‘áV5š˛VHNŪŦ‘˛nËÚ_âēZøÄY<žaŗ4–Îōs]Y4ŦYâ?ķĖCu–6ú,q|Ö#//Ôe“ÃˇíÂ>É]v×>ŅŗÍö`cøXß6,œk+‹:p˜ŗzYX´Ž¤‰^[ĢĢÉį:Ēį–Ÿx;ˆ‹ĘdO÷ĒåҌá/ĩđ™ÉúŅûÆäZ>|ÂĸnuģĻŽQëĒŋG1ķsZ†L°k~|0ĘTާkĐ?؇ÅŪ.> É[ļ÷*:ŅD'ë[ diĖ'M,¤ŗÃâí:ēđß&IŌXšøvN¸ÉãÜōYXÔįœxœåÆnלã,Ŋ…sm‡É°kŌ†Î¸h8ų­.„×ĨŖ\ʡŖeëĸ°\˜aAÕ YP§œ DË)˙œG^nHQX"“Gū,ßŊņĒ,˜ôŊ~<;Õxb˜¤Š‹ˆÎč´˛ūm“P•@8éũ žŧ˙ ƒpķ-Ŋ¨U =i“Bœfq„Y[YŊĸé-ž0 ˇļˇkŌāâeqî°ŧ&×ŌĄƒ…•I}ģÔä[>Z8ōâđŖu@ŽõGMЀūÕeo@°ÕxU|ĪZCę;ļO‡Ĩ!öư!™}0ėuay…%Kžˆn“˜ųāf‰–69āÛcžåáږ,ĖB–1;,­ Āø¤ˇ9¤C/&gĶĪōr 3Yä‹ęM^ō˜#ž´†O˜…Gå˜,ĶÁŌĸ#˲Q]M~]ų`‰5‰ļdI Ë)[ xËKúŅ*sāC_ā-lŪnÆĸ)°ļĒ,Ļņ™öGČKĨėĮbiúqm¤Œ6°ƒ˛ię‹õ˜=“ėųä#Ü\S&iŖ}€ö5īC„[_ ņ¸h: ˙ŦŸDuąŧ‡oųL&ōĀ×ôŠĘįœt8ęF~s¤'žrĸxrs-Ëō4uëī ÷x=œŦÅņkG`` gg į`gcC>“2“<ƒtR¨¨h›H*Jc“i8ˇ<øvnų‰7gįæ[¸å1?nי䋧ąŧøņ8ŽŖerniđí<*ŖŽÎ™´™ŧŲ‡iƒ„ĶĻFŌâ}\/ęÂÁI>Ū !B2ŒŦ!ŋĻ\ĻũŅ0G7|“—œ IDATĘg’6CÎ|έL>}žs“Eēt.*̞4–ļ˛vÆGĪ-?åpŋއ“7žŸ<Žo÷o4]ēzŦÎáĢ[_ąŽHwßŗV:įT› ˜đ8°LāXFa`gđãܞÆ3%kÕPĨÁg‰NēuUYkÃ(™ąÉÛČJezo}Ã,W\[ߊÉē˜Ėtũ‘pôŽŦ?Ļ"%ŠęiéRÅÕdŊ˛MVC­īęÖßŗ­_Ԕ>NÖj I—ãD°§Q&t›ŧ˜ÍfOæNÖ •Ēųõ99R6íĖamI[{§ĢM4/é!kôΑUޞūHŲVëéęAxûøuĒ4ĩQ¯l‘¯ļčUSzDûėęĐßkĒŪŲ$Į—AŗŠ5\GĀpGĀpbÔÎc\ŦŋtGĀpGNÖLJ›įrGĀpG Np˛V'0{!Ž€#ā8Ž€#āTÁ z¸i.6ŅōI†qãÆéoĶU$ŠŸ7ŲtĶMõ5ũ†žĩ"<ÎpGĀpdž€ŋ`P5ŧ4uô-)~û‘bn¸á†ißäâílj'ęwļļØb‹d‰ĩAÚLˇoŋũV@œī6ÕF9ÉJTķ=ų`ėøņãĨoßž*Ĩļõ¤Ė%K–čGjëĒĖjÂãŲGĀp$nYKBQõžM„emŊõÖKKÔL*iĻL™ĸß3â5yœ+Î|đAũ}=>ĸʇ2wØaũŠ8q™˜¨,ōŒ1B-y5‹ËDykĶ™.”Yãg˜Œ8Y\Ļz’>“´&—2i¯ŠĘĖT&˛Ōšš‘Nļ‡;Ž€#ā4>|ĪZ5ۜ ™/–Û7g8ˇ/˜ÛĪ‘—…Ų'IKōÚAņœãöŲg9öØcõ{K-soוų–ŪüĘŌ×Wŧég~&z–ƒŸˇyâ‰'’8f*ÃŌ™oerũūûī+‘ã<oéŌų–gUd¤“íᎀ#ā8ˇŦ­Bûŗŧ‰er~Ŋ9üđņōŸÄA,q6‰CظļNZąĪĩÅĩnŨZ-@Fžûî;].äˇúļŪzkũ=AŌ?÷Üsj•>|¸~Tŗ˙ū˛Á$‰†ÉūđÃõwûĐ+{įpüäŅ'Ÿ|"ķįĪ×üģîēĢ~YŸ%T–'ãåA 'L˜ ?Ą´ĶN;%ôX…•˙K•‚:lØ0]ÆjHøD̟ųŋūúĢ|õÕWú‘ĐÍ7ß\/ąS§N•Ī?˙š>.ÃĘ!Ŋ;GĀpG :8YĢjL+ž<ÎŌeI^I…’ k¤%Mā–ÁHÚôéĶ•l@vÛm7M Ąâú°Ã“9sæČ—_~)ûíˇŸf]´h‘†|đÁJ2 eXæĖ!—âĶącG%KX~zôčĄI eü&áᇎ‰´üsĒō zĄŖ>ZķXQ?žÆp‚øņ;Š”ąü駟dË-ˇT, eúé§rāęī#ūī˙“nŨē)ÁúčŖ”döîŨ[냅˛øę̝ uĮĨĶ›¸?ūXŦŒ92Y.q(t€äŽģîē˛öÚk å×{˘1Ō¯_?= ‰ü7ŋõ‰ ō‘'.ÃI(ģsGĀXœŦU=#öģ‰!-Ž´–Ī&qŽ!*¸É“'Ëŧyķ”,tęÔIÃąd‘æ‹/žPæĖ™J!~8,:ėcO2g͚Ĩ/<g˛ąÍž=[ ƒl°'ō8iŌ$]zĩŸš!OĒō°ŒQVŠ7ŪxCvÜqĮ$9‰Ö9Ņ4XŅ( ™ÄAÆ(Ÿ6ĮfõÆGoČŪ÷ߏšoƌšB„5Y8ŌŖ?Î,–éô†ÄQ6x’Ÿßä;vŦʀôFđí@>aqŊŅcĢ­ļŌv4hŧõÖ[J,!˜äąüæĢ‚áŸad×î;Ž€#ā8UAĀÉZUЊĨeR†0és0)Į'fŌā "¤ĩkÂlRgĸĮąD !ĀB†…’šaY+nÃđÖ)ų,>„ÅäšõŽ´Äa™{ķÍ7•­ąÆkzô!z›,âR•geėąĮú™–ũXríÕĢY’Žt{îš§’!Ō`…‚dņ"zC”pVĻéŒū”‹îVOüöíÛëŪ4Ō“ÖįĻŗų‹/^ 'â¨?$™s;ĐÁōEu1šFãzĶ~ĻøŅÖäĮ'œü&ųGyîGĀpę"ā/T9&eË{ Hzô°0âI‹ŗŧvn×øX€6ŪxcŨK!€ā`ujÛļ­Æņ™œ‘,qœĪ;Wu DYX§ }&ô"KDbũõ×–ö(‡đtåAFČC9,Ą˛„ÉŪ.ĶÛęA~KņLJ\ę€eĨXę‡o:’—sÂą¸Ų9×`‡Ūf9C>iˆC'Č-׊pBoŦ{X×x!ŧ,ņšžæV´ y¤ę îĻ7z˛´ y%Œ=läáāí[“arĩ@˙į8Ž€#āTŧķĪ?˙Ējæm´Ųl†,° ‚dD ‚=‰k6ÃCē°A4Ė!‹Ižīĩm˛É&Į^(–ęØ G$rAúņĮu†ũWȆp5J­]ČĮq ąęĐĄƒæA{ÜHĩ‰=V8ŌqĪĻ,zŠĘƒ ŧöÚkēT 1IJFzäá¨ō_yåM.:öÄA¸øl {ŪđYîÅrŠaC~Īž=•Ą;KĨ*>4ŒE‘ s@ˆ lԟŧȅ€Ą;z@ŦâzCF!OSōŗ ë"ä}i„›CڅeXt'/-•Ūŧ”” ŽŧT‡¸ŅLƆÁšhÖ5ÃÉĘsßpGĀČ˙(nĻHEŌ™å2‰bs:wE+Äd—]vQa“7˛ œ›#ž‰ŗtËûėŗĪęË„‘6J>Čc鐹„P Įˆ‰ĨÁ:ed“8,Kč)Bá¤%Œ˛ ŒŅ8ŗzAL!IæL&:>G:KƒŽŅrMŽ…GĶŖõB.ŽúQŽå×Āđ0È´čnúS&ų cꍎĻSTo+ĮâLž…ã›ŧ–-[ŽPĻĨußpG žg­*hÅŌ2ųcŊÂڃu‹I:•cgōZslR'=įF´ÁuÜo„*GzȊšx^ĶÉŌÄË!Ū ĨŎō•i:†#g:Æâ ã‡åĘŌ›O¸ÅÆaD+š&nåâ[Y&Ŋ-?aä#ÕßÂĸ˛- gq3ŊãyĘb—“b‹'´iėÜühžčšÅãÛšÉ'”‘Æâ­]Icaœãĸō¸ŽÆĮã¸6lĖ'Ė#ā8Ž€#P–›dĒ“ģ‘įąI™=SXxR‘- Š“ƒÍ&pâqvÍ9dĀįŅ8 g/ÎâđíÜŌDI……YķM†•ceĮåqmi,Î|“A]âeš• sGĀp 'k†D|&zKiŅ7;Ģ ĸA&5\dåŧRŽ€#ā8Ž@=!°üÛõ¤€ë8Ž€#ā8Ž€#'kéąņGĀpGĀpę'kõŪŽ€#ā8Ž€#ā8ép˛–qGĀpG Ūp˛VīMā 8Ž€#ā8Ž€#'kéąņGĀpGĀpę&÷Ũw_Ŋ+á 8Ž€#~ņc⁞ŅFi’šø~}CoâĉōÁčīāĻ+ßÃGor~øá‡?ŧ͏dķÖ6ˆÕˇb^ž#ā8 PTT$Ç×ßÖíßŋ”ęļčøöíˇßĘčŅŖĨ_ŋ~ūŊÄ$Ē~â8Ų€ãĒüŽ8?+Ų„>hJDēŸLĘå]GĀh|06mĩÕV2fĖ™?ž 0@Į*ˆWU›5J?úč#•Qã§âĒ"§ņĩ€×ØpęÆ=ãh9áÉ2ąlŲ2ĩĒņ#ÜîGĀČ WŅ Ûøņã…ņjīŊ÷~“— Ņ2ĸļtéRyë­ˇ” uīŪ]-jÉÁ°üÁ5ęî:8Ž€#$aDĶĘącĮ&X…¨aUŗAÍarG ž°1‰ņÉÆ¨)SĻČäɓe¯Ŋö’Ν;̊6ĶfĪž-oŋũļŦŋūú˛ŪzëéS+ƒ!ųyŠuį8Ž@6 `cãKĄ9“&MJ0Ú~5Ø˛AY×Áp/ŒE5Æ'§ŠŠJdÖė92nė˛Ë.ģČÆoŦ Ĩ"l6žņ"Á°aäĮĻŊĨKį5ƒE­ė‰Õž\ŖKq¯š#ād ŒgXÖôrúôéJÖÔėČe]GĀhœØX„Qã`tÁâe2}î2išW*9ŋeܘ‘Ō§O‰ŋx@>sö"A^›KĸI)*É•ŽšK‡6Íu”ÁÃĮT¤Īdšī8Ž@] ”Ŧ͝;7aK ŅŽ.”ņ2GĀH‡ãc5ļjL›[ Ÿ˙´PÚ4-•6ÍKĨCĢi&…ōĶOc¤C‡ÉL æÍ›'Ŋzõ )›Ë‚Ĩy˛xYŽ,.ʕzļ“u:ĩĐ%CÛĖkųŨwG >0ÂĻcĶ‚ ”ŦÕ§B^ļ#ā8а%Đy åūwæJ͜béвDz¯]$k´*Ûc ™›0a‚žxĀ>ļÖ­[˒%KtsY&Õ'Ͱ¤0oiތ™ŅTæįįIQĸ‰œēg'YŖ]3ĩŦųžĩT-āaŽ€#Pß(Y[¸páōõ‚úÖČËwG ŗøãßüÂųyz´kQ"ƒ7-” ;'_ˆÂĮļt/@Øx‘€—ēvíēÂō&ƒŪ¤šMdčØf˛° O6éÚB.>tͤUÍ ›w?GĀČFüõ§ll×Ép”dÈ_ åķņŞ0,_ގFB6é’PrĨO›åoq˛\1ëŅŖ‡ŧūúëęQ‹ĻãœüČAr‘ķŊj ƒ˙s,DĀÉZ6ŠĢä8e@Žžúdą‡O@–&rdP’Ŧ`q"ÖącGŲqĮŸ¸x<„Œ0ä šČ'Ė#ā8؊€PŲÚ2Ž—#Ј°—,)‘‘ŋ†%Ī€ÅöKëe°T$ˈq ŗs|ä šČ§œ•ĢūĪp,AĀÉZ–4„Ģá8+#đųØü`#<üäÔzPĢ2gÄËHYœ Uo2ĘäåĒ|Ęqį8Ž@ļ"Đ$[sŊG q#€•kŌė"ĄY^"ŧTP*š9\…p2;ėe„¨eĖâŒĐiĻō„!š…%9ZyÉãÎplC Úd-ŋ°4,ĘČɅ2yN‘,Ę_÷÷Jŗ­}]G`5F !“įĢūZ†— ĘyDË‘, [ŠČZœ€‘‡ŧöAîėÅ9ōū¨?cŌ4Î˙9Ž€#°Ēä…AfÍvšŌĨ]éŌ>OļëŪ"\įUKl•ÉÚĖÅōtؐûŪČĨ’_čėŦZ¨{&GmZŦ8Ö¤"l˛8Y‹bDÍÂÛšŗKØŗ–G™ĪâÜwG &āq§ž-å°íÛČŨš'EGĮ­d`ė¤R˛ÆhOϝ}ŗXî}{Á $Uƒĩڊ´kÉnLē_:Ž€#Pl°Fž~ė6.*ja‹ĮůãDøMēˆ4­tŒKōkGĀp*G€ÕÆKEæ‡Ŗėv‘Įäëqâîíå¸ŨÚ%…TFØr*û(Ž‘ĩŸŸ+C%–ģ­6°ŠH¯Ž"-›9K3\ÜwGĀpG ŠĀ/sōáO"ŸŽ)(7âŪĸ•\zX§•ļpDķŲyĨd„O}ŧX~˙7ÍĶ9XŅNŪ’æÍ@tßpGĀpĘ˜ņ[BnGdzĨ’ķč(ûökUY6АŦa–û!ŧDpÁŖlŧéÚ^ä˙ΑVnIĢXOā8Ž€#ā8Ž@Ĩaŋ˙_ŸOȜ°_–•ÉûNīĸ/ ؖŗxzŽĶîÖ°õĶžŌ‚kŅTäŧŊsĨuķÚŗ¨ņƒĖÕūš8ûWZ´hĄ?ÚŦJû?GĀpGĀp˛xÔŠrãĢĨú/mžŗ_{]MGØR’5#jŗ+–ĪÆhwî‘#kˇ_ū˛Õ›´é„Įãâ×Ȉ†-[ļL Ĩy힎$,Îüh™vn>:ŋuëÖœ*_\×x“‡‹_§Jãų—#Į+~íø­ÜĮ–ŖˇrœãˇōX“ Ã0ŋöūˇr3ėRaãøy˙ķųsEc÷Ļɓ'ËôéĶeîÜš˛xņbiĶĻtęÔI¯xũõח–-[ŽÄ'úŦ“#ũ6(•ī~ũēÆŠƒÛHËæy+Ĩŗ{2%YŗČ/Į$ŋļ{īܔ¤,Ūx–?ŋN•Âv˙ũ÷˜9sK[^^ž4iŌ$ų]%ĀáĀŲyqqąŦąÆrꊧ&‰^*Ų™”¯‚Ë˙ÅĶĮ¯S•‘iūĸĸ"™8qĸ6(ē›ėožųF^yåŲjĢ­äC‰ŠKωZžhį>ú¨L˜0AŽ;î8ũQëtrĶå˙å—_÷.]ēHĶĻÁŦ\Ē´ŠÂ4q$ũ´iĶ䧟~ŌŽÛĢW/‹V?“ü–!UÚTaéŌ§J›*Ėķ—!Į&~MĒTaŽŸã—Ēo¤ę+ŠÂŧ˙x˙Y]úΌ3äĮT˛fũŅĸEzLš4IĻL™"Ŋ{÷Öų/š†ķŊrY+ŗŽąålģáŗi\Z˛â›j¸ĻánŽY7ŋLAƒdėąĮJֆ &ŗgĪVŌFŨ87Ÿs~¸Ųâ+N8áųėŗĪT˙6ÜpCŲoŋũäčŖ–uÖY'^['°īoŧQ>úč#eā”ĶŦY3ųøã•pŽ?^žxâ ÉĪĪ—C=´ÚjŧûîģZĪAƒÉĻ›n*™Ęũį?˙)¯žúĒüúk ûÁåu×]'GuTĩuĄ ¯¸â 9ė°Ãä–[nŠļĪč8Ž€#ādĖåß~û­–*ŌĢķųÖ[oŊaëŗ.F°ŌĀeøâe˛møhn:ūR!Y›ĩ°Œu ̊éT¤duⰒą÷lūüųrÆgČZk­ĨäĻUĢVjá!Î,jøQ— Yŗz 8P–,Y"ß}÷Ü}÷Ũ 8$Ēļdåõ×_—ž}ûĘņĮ¯§wŪyGëdēĄįŅëĒęÍ?^GåžõÖ[ŠEûöíåŌK/ÕŊƒoŋũļ’ātyĸųĶ÷ėŲSN<ņDŲrË-ĢT'žJ{ė1i׎üųĪN'ŪÃGĀp:Cō…E@Üæ›o.#GŽ\Š| 'é1*ą$jŽUØģļvøÔo†ōk-pštsíJdÍūÜEåd­ÕŠë´„@ ÁІĨ:2šßĘ$Ė,fŧ(pĮw¨•íđÃ×ua,b€dâFŲŦ“ŪôHUž•ayO?ũtŲnģídčĐĄrÚi§ ¤ ËŽ™äO§ŋ•cņqYŸūšĘŋōĘ+uŠ“t—]vY˛L=‰ũ‹Ę˛( 3ŸđčšĨŗđčĩ…Yû™Î_~ųĨ&ûŨī~§KʄŸtŌI)åZYæGeÆĪyĸčßŋŋĘļ–ĪüxÂąūį?˙‘ŨvÛͲ%}Ëg~ĒüV¯h`aæ{ūûO:\ŋ2 ķŊ˙x˙ɤ/øũĶ0îŦeļú!cå ˙駟ļ&ÖÕēÍ6ÛL¯!r¤g˙+]ÖWđÛ~5=|΃Ÿė´9 Ÿ¸¨KšļIBŽ’ōûä'Č=Â5„‰%ŧ÷Ū{O‰~ü’ÍËšå7ßd™åė™gž‘—_~YØÛĩöÚkKįΝ“o‰Bč m ,Ѓõa^.0ĸ•Ÿę\ ˙ˆÃڃ[ētŠ–EeīģīžōĐCiâ/ēč"].ũūûī5Œ2Y>eŠræĖ™JnļŨv[„aąÃ!+^>q_ũõJq„[zÎ!’t°”‰N&ŸupHfŋ~ũd×]w•›ož9i‹Ę°sķŖeX>‡Ŋ˜AĮbī …[ŽyB ʤsîŗĪ>ōūûīkZŦq`B{_rÉ%jö ,‰„ßzë­I™Ņ´U°ÛsĪ=åƒ>Đ4S§N•̝žšĸ+ōōÉ'ÉüĻ“ųč–ÉyŧN™ä‰Ļņü+öé(6™œ;~Ž_ô^ͤĪDĶx˙ņū“ ũ‡}Øæ˜/G%3ļSáđš&–(61"ŧÂyŸ>}’ Žģ LŗŽņF(Ö2HÉŊ÷Ū›dœ2Ōą31q˛fáé|Ō?ūøãŊķÎ; K­8Ūč`C<{å XX1a:Â(Ÿkö›ũáаđ!ÅūŦTîĀT‹!KŽcĮŽÕåFŪ‰;đÄÚˇÉ&›ˁĀ8@Úļm+áW'T>DÂÆRî}÷Ũ§„ö”SNYAēZ,"~máûīŋŋ.ƒbaãåt¤.æ¨;ä”×­[7Á:ÉūB52yړkŽšFĪ×]w] ˙íˇß4rge[ZíŽ?˙üŗœyæ™!†ÔbŖ,ˆ:¤°k׎ÉüĻ“ûŽ€#ā8Ž@]"`˟V&5#hæCÔĸ–6Ō’Īæ@Ë+ev†Ā)Ęöã'Ãc')ÉZQ[žŦ´$ŧ­Y~ŒÉ:čĨ+î˜h!A厓oáĮƒ>X— ~øaųÛßūĻ–&,sŠäŠ2|đAyîšįÔzÆō+Ö3œ•nO>ų¤šLi|Č/%‹!„0Ahx!ã˙ûŸžũ‰œ¸ž&bdē“.ę6ÜpCų÷ŋ˙-\p’+–C˙ûßë5¤)kƒ 6ЗlÉČ´2Ųc†ĩÕÖæS•mi!úBp„ ō*ywÚi'%hŧė€é˜zZ9zâ˙GĀpz@€ĪsÄ]”°Ĩ"j¤'_|ū-ÕŨfeŒÍøÎJ„.äMIÖJĻđŸĶ°Z,Jeß[Ķ€˙Ö[o=]’ŒFąO k™L•€Lā JFĐlb§ez•‘Î-Ž<œ#Ã>5AXܙ|,w|2âÄËXņLO#øfųЉ0œ|) ­8dZžxų\ķâÖÆ›nēI­wįœsŽZÆø\¤)Sä˜å ×tÜčŅŖ…ŧæ°VYšq}M.¸ZËõąfąŠ˙úë¯,l<ōˆļÅyį—,"qgeōÆ-mcå¤*ÛŌ<8‰å[lĄd R ViMVŧLŋvGĀpę PĖķQĩ¨Ų’hܲFžø\VRÚ"ˆa¯üōĪ’EåÚyĘ=kYÎՒ—@Z⟾`Œå­Ld‹ƒĘĀ@4‘Ÿp#j6Ņ›\Â9ˇ4—Î˙͟ū$ˇŨv›~Kėž{îŅĨÆtik#|Ā€ōÔSOé7Đ¨Û›ož™q1¤Įaš‚Đq 2DŽ<ōČČkÆc iˇũë_I+{Î(ĶČm]ŽīéáŦœÚ(Ãe:Ž€#ā8Ģ‚€fLF”¨AĐ0¨aŗ4øņ|Ņ8ã[é8LJ˛–.ņ ‚S\đ™ #g0H>¨ZUáŠ/…Fe˜nøFZˆˇk‹æIwΞĢcŽ9F­YW]uUŌĒgË{ŧD€ciŽ7kÚŅpė•Ãąė™ŠÛxã5)+Hgôˆŋu›ŠĖx:Ŧ˜ļ”ËgT°$n´ŅFš ËWm8ÛˆÉ˛'Î,¤ņ'˜Ú(Ûe:Ž€#ā8™ Āö.sėÅļ— Ė’%lě‹æŗ°Lũ´Ë ™ ˆĻƒä°Ÿ bJĩîM?‡|A@ kXÕlŲ3NÄHĮaáFđČ%pqųŠŽŲåĸĀō*–āpŧՊ‰ˇĀĨ’Q•06ĐŗGŽĪY˚5K÷~‘ŸĨÅLŨGĄaīŧIÉR"Ē:đĻĻæLåY:^ä`ßá6ÛlŖüíå ž Į›ĸ|Bk /œ{îšzÍŪ9,qŧÍY‡U‹ÎĨ߀7/āhŽYîÅōn,ĢģsGĀpę æ!žÁ‡qÍČ`žéaƒ¨Y8yVeūĒQ˛†’X‹ēwīžü „)ž‰Ņ‚¨aÁáÃŦ$#eŗ¨ÕĖ‘˹ũ‚įUqŗĪ>[°ŦąšžOR@NØĮ† "wá…ęËǯŠč”i!ėã'ĩpl°‡aFÍÔą‡ ’ÃÆ|Ūå€đ@”Ŗe*ĪŌAĄ\ŗö IDATŧ^|ņE}Q0,Ŗŧ<ÁĪxᰜŪu×]ēŸ—8 †ųË_ĒMÖxÛõâ‹/Öeoú/[˜Šë,dšNĪ/ ĐNŧyëÎpG/ØķÎ _€`åÉY\ ‡ŸŪ~÷<ž.“ëœđˆå¯}†LöfŠēä‰ų2zZŠtī\"įĒøƒL Ģ, dˇąĻ@ēâ–9#"fqŗxÂYūc¯›Ô×\sÍƊĘ(+o6ÖÔŌĸ:oŪ<á7Å`Ų4âĒ8–'é,К°ūą_§ęl˞ŠôÒĮō$„Ž:øđ’ÅW_}%ˇß~ģlŋũöúv+u°6–Iûb…¤ŦTņŅ´~î8Ž€#āÔ|Ū‹•&æĖtŽyĸ–n ôļ÷ZČøŲyŌg\šé¸Žjxa.Īu5nYK§p&á,MX×âŠÆķĮã™Đą.­*ų‰–cžhXMœķ*GM8^2°OdԄ<ŦYXģ*s|īŖ&íÆ‡Ķ9Ú"įÎpGĀČ `t˜Ÿ nx0x0Âˆ‡Ŧ­ŠEÍęšUd 6ŖÔuŋa!ĀRŗ}>ĨaÕĖkã8Ž€#ĐX`Û0|Ŗ”Ŗ6]V‘ĩÚŦ¨ËÎ.Xuį8Ž€#ā8•#ōĶ•gķŽ€#ā8Ž€#ā8u€“ĩē@ŲËpGĀpG š8YĢ&pžÍpGĀpē@ Ŗ=ksįÎ o}ŋ.ôņ2GĀpGĀhĖÍß=Ôŗō_{ʈŦņķ?žxaŖÎ+é8Ž€#ā8Ž@] pŪÃ3eū/Ë*-ʗA+…Č8Ž€#ā8Ž€#P8YĢ?ėŊdGĀpGĀp*EĀÉZĨyGĀpGĀpę'kõ‡Ŋ—ė8Ž€#ā8Ž@Ĩ8YĢ"Oā8Ž€#ā8Ž@ũ!ād­ū°÷’GĀpG'k•Bä GĀpG?œŦÕö^˛#ā8Ž€#ā8•"ād­Rˆ<#ā8Ž€#ā8õ‡@Fŋ`Pę­ZÉĨĨĨ2fĖ;vŦđ“YM›6•D"Ą’srr´ÂüēaāņĐÍš’—WĩgœĐü×n-ƒ÷ę&'œŗš´hŅTûƒ˙sG Ļđy)ûįŨlœG,Yã†xķÍ7%77W9äiŪŧyMßs./ ØtĮŲ˛áZí$7q¸xø¯Z&Ę<˜áe¤]¤$ü+.IČĖŠ‹äŲG‡Ëš'ŋ'ˇ?48ô—{k”ā˙G ÎđyŠÎ!¯VŲ8TÍQ­j×OĻQŖFɲeËdŋũö“f͚ŠXŌĘ&q&ō˛Ã¯—cŅđ™U(’ŸČ•ĨĨ9˛?ĩüpļÆÁõRüˇ$øųĨš!>WZ­ŨNŽ8gG™×lj<úīę§ĶzŠŽ€#Đ đyiõ˜wŗqiæƒ’’1b„ląÅš-sææŌQrõbB¸û ‡yK2?ŋDÛ54ˇúeŖ?&ĩųā­—eĀ^ģZ°Ž…ĨĨ‰`] ļāįåHßŊzČs}.'Õ7,§æ5č‰Ã+į8u‡€ĪKĢĪ|›ķH“ĩ ČŌĨKeuÖŅģ`úôéōĖ3ĪČšįž›ņ]Īsà 7ČYg%íÛˇĪH7EQQ‘téŌEŠ‹™¸KÃ˛2yķWNÔLXôzƌōėŗĪĘ9įœcŅĻ'Q4E×O=õ”ôéĶGļÚjĢ$Ŧ(=q¸TōÁäĖ3ĪTLRÅAM—ŋĄÆ/*JȒ`]cŊ37´u"øå+ ōÃ×ÃäĒķO—ëīí(}ˇŲEÛ 4$- Ŧ­¨DdYČÛžs;™0WędÎãÎpjU™—PĀĮų2Â5Fm⑍ķH.ƒžrĘ)rĐAÉąĮ+Ûlŗb:sæLš˙ūû ߌüxž;î¸C-Z”Q^A!#Ü%%Åz0ų&‚õ¤´¤TÚ&žë>ø@ūō—ŋčõôiĶUßhŧĻ éŅãŒ3ÎX)ŋśŧč5˰@äŊđ 2jä¨*åOĨ/ōīŧķN§‹OĨ*ũZūüâ„, GAqčę‹Yđ.)ģoē\ûĐ=7_& įküŌ@ЖIHH^đ?¯]KY˛dIÆũÍ:Ž@åtčĐAVyßa‡äģīžĢ\6ÛlŗjäĖ< ãkU]UįĨč<ŌĐÆétõ).fž.›—ëŗūŲ8Ô˜eíŗĪ>“ŅŖG˧Ÿ~Ē}˜ŽY’Fƒ7iŌD}ÎķÂKQK’éUļ0&ōúë¯Ëž{î6šrWZļlJ>‹ˇôCN<1žR•KX<>~=?)öÍuėØQķ( ō‘Iū¸ŧøu ē2j.߯!]ÁJÆ&VĩđOáy홇eÖ´ÉŌŦy‹āO‘WŸyPö;ö, žl)4ųĨEĨRöēåļlšl/žŪÜ9Ž@Í đĘ+¯Čl +ˇŨv›<ōČ#5#8"…í/Ÿūy$¤fO}ôQy÷Ũw?SWyÉd7–qü‰'ž÷Ū{OxđÁäjÔGũŗqŠ1Ëû{~ũõW%lÜĒU+ŧ¤ãĻäigđāÁ2eʔdøM7Ũ$ũúõ“Ã;LžũöÛdxē“#ā‘jgkĖ^‘ŧ6ėēëŽļĖī…ŧāvŌI'閜CÃ׎:ę(H“ūž0ũã˙HĘ?.Ŧ”1įĮvχ™bžf>衇äŲ§ŸÖ•´ŊöÚKį7æÕ… j;aAũķŲgË´iĶ4ēy“yņæ0ŋ1 Ū}wí5XÉæPVęt%)č`ķvĒú[}m^­îu6Î#5fYÛnģíäôĶO—ŨvÛM.žøb9˙üķõŗô^ČŲĪ?˙,_rÁŪŗ§Cã^pÁÚ ÜD<aēūŋ˙û?ŊŠ*ęņ×^{mr?\EéødV‘‚‚ü@ږéšÚHÔRÂgØŊ&2qŌDYk­ĩ”Ôb‡EeØæÁķŪĐ÷äļÛo“kŽšFîšį^™={ļÆ-Z´PæÍ›/_†úôŨrË`™{M.Ŋô2y"ÜXt.ž˙Úk¯)&¤įšÎĮ@ņü]ōķ ä˜cŽŅNØģw/%iG~Dؘ :¸üū÷Žk¯-˙ûßå”SN–=öØK­z‹/VųÔũŅ@šYŪ~û-šũöÛĨŋūšßĘ/Ģ/)—סė‘Ĩá^O],cŗŠBß ĩdŠ cįęĶ˙°ŦqÍžĩEųĨ2ŗ äiYcˇāģsr˜ÄīŊ÷^Ė ūķŸ˙ŦËŖ<ŦŸV/ >ųųųrŨu×éÃ˙škŽŠ=i!F#GŽTōjĩ„4ŦfD ŋüō‹Ž“/žøĸÆJĸI÷Í7ßČqĮ'?üđƒ’°Ģ¯žZį§‚‚˜™›?~øūb éÚĩĢÎol1Ë{Ŗ™ģ2q™ĖKCū0D6횊ž$wŪyįÉūûí/Ë ”Ė|øáGŌi5ÂxUļ•Í+Ņqū!oĪMCŪFy÷ y‰Įōá‡ĘķĪŋ íÚļUâļxņ"yã7eF¨įé<=|‹tN Y‹dÖŦY:š|ˆõįšsæqļ6M:E˜§ Ûoŧņ†n%zöŲ˙ĘIĄ Ÿzú)iĶĻMø|Ö[aîŧ[~øaų͟ÎĒpŪ<ķĖ3ÂĘÜgrįwę<öÎ;okģŧöękŒŌĄa;KĐ/Z_›Įkz^ËÆy¤Æ,ktÔŋūõ¯ōÜsĪéķ†Ũâ CŦmŊzõŌ'œ=\Üp—_~šnę‡Ŋs“Täzöė)mCgĢĖņô†ĩ›_Ī˯ssšÎ•ÜpĀä÷Øcä5¯sįÎá)ë(iŲĒĨqÄōÉ'Ÿ=yIĄėåōCHwÉ%—HëÖmôÉ ’GyÄĶąxräéÃĘ#?ōÖ]w=éŪŊģ’˛aÆi<×S§MÕÁ]gÍ ˛‚~(įėã6GŽŋūúa9ģ›ęáü›7oŽĘ‡ŧķĩ×^Ŗua­lŪ¤|ä[}z÷îŖŗ?įĪįčü–—×$YĶĮęWĶ×Ų8Ô¸ rÁž5n Čėšj.zsŅ™ØŋđģßũNŖ1]ÛMiéĢëcnF–5+×|äBš9ŲŦOzŽņIc×ä§tFäYņÔ §d0ÄÛõ×_-[oŊuōš4äE†Ĩ!ŒMˇ„1(aîį Ę3ŊиIoŧņFaš–§Bs|čYČ&ž9ęĶØŽ[6ˑ6ÍËp E#üûūgdÔ°—ĘŽCx÷mK˙NŌįĩŌ@ÜJJÂÛŖa°X˛ŦDōZ53ŨwD€/l˛É&I‰X|ØsŅEé8—Œ'XÂūķŸ˙¨å C!C”p1ļŪzë­ēÁ~cö¨UælŠŽ‡ņ<Œ—ŒŊŅņ9žfU¯‘]ŅŧYe.ākĖ8×ŲĶŞ(Ģ7^xĄŽĖoãøāƒËļ…ō™?IĪ‘nŪ´r­žiVĸ öŧ¨ĮWøš‚éĢ• ˙jã:į‘#kŧņȧ5x"ĸađģuëĻĖØ@ûŦŋŗ,zĪ=÷(i‰Į§ēfĐ>Uŧ…Ņ1iôh'#ŽNŁcŨSøēëŽĢ×4:éy+á$,ot0âčPŅÎí°ÄŲ5lŸ}öI^SåN˜0Aå`æįi‹#ËĢŦå38Q?žėXk§Ū‚e0ƒÔBfM>ō8ˇŲ¤ĮYũ¨OcģnÕ4 ¸-Ę3ƒĮÖģ(?õwYVdlĪŅÉ'ŸŦ“1Ö¸!Ŧ1>ō€Ë¸9iŌ$]’Ë„ŦĨĢō&OžŦV!ŗIģFXjʀû駟„Ī.ąD‹ã…1æsčˊD¯2WŲŧÄ#Ģ,ė'ck˛™Wl•ŠpŽ1ˆ`ÄŲ8oyÁŒ7m-/éqĖˤgۑ°T˛?˛X #žS§NŠ-į/Ŋô’đ!_æ>Ž‘es*ōp„ãˆãāšeft`‰ÛŌ1Û9>×6§rÍr÷œ9s’ōؒDKĖėi1b„lļY}ksžËÆy¤ÆČ›¯¸â Ũƒ ‚ũcå79Ķ9Ø2ŸûĀ ĮˇĮæÍ›§?•.=áläg_Ą"ĮSƒu*|œ50į !ë@„qŅäɍĒ˜ry$Ü:#įČCVĒŽŠĖž,īZÜ˙e„-l­äŖ¸ų…Å2aę™3f´Ü|ü†:xv*Č˙9Ž@­ Ā‹LčĖ,ŅĩnŨZËa,‡DD7éą°­ŠÃšÄËXސĮXŋßM¯Tå`ĘtÎĒĘŧDZĘe.æUđ@7đĀę‡3]ãķķX2‡ƒĨ}™!]z,X 00@N‘ĮA8sT\~UŽ™ķh¯(ļ•ågĨ \Ņ—ŧԇļN§eōĒ_—ķČyĪ”ŋ,“>ëäĘMĮuTBj¤6Úīj”ĻōÔŨ-¨ĸsČTĻž"9ÄŅ tl6÷ķD„NfzļÆ6‹V,ģļFĩXn5™øOŋféķ/ēhū¨@ÖBW(#l复ļréEĄ!ËHZxg$<˜„ķā‡qMšį7‘fá¤ũâīCÚ,Ų/´ũŸ#āԐ s‡š8Q#œ‡ŨU%j&ß|+ߎÍON|Uæ,ÆčLį%Æ1ÆōDįŽ×[oŊäŧn܏Î#č™jŪøī˙̟įĀrĮ›°ŧ$Āc4=úF¯Ķ•—J>ųR韉į‘%kT<7;74ûÃØwfæZklĶ1ūēu<žē×|+-•ĢŽ<“åų#Ŧ+€’ ŒŗY3ÃŽåĀĒ=Ws2¤-BÖJy ũmœŦךx… Ãđwßpû~[]Ô*Ķy)Õ¸Õ¯&âŲ^3(lŊaé—%_,9æjBžÉÂ_åeã<Ō ÉŊmŧ¸Ā÷Ũؗ†•-úÄíL~ŪphŲ:ŧÍIu‚ĩ BϤŦŧzŅķœđų\^nøƒÂ™9v˛Œų`¨,™:ZŽ ûeĸƒWyv÷G !Ā|ĀwĶęĘeÛŧ„ÕŌ,—,7ē[Ž@6Î# ’ŦÁä1Ĩōōß}ã ÕŪ—wD?[,ą ÜĮ„>C߉? ޜÃCGĀČŸ—2ĮjuMY›ķHƒ$k44 ąޝ8ķ 6_`ļĩëÕĩ#¸Ūĩƒƒ(›v×ŋÁĶļĩÚÁŲĨ:Ÿ—n¨íy¤Á’5ēāņrß(ŗM‹ ˇĢxÍVúŠ“´UAĐķ:Ž@&øŧ” JĢgšÚœG4YŗæŽM­ ÷GĀpLđy)S¤<dū14ĮËpGĀpG Îp˛Vį{Ž€#ā8Ž€#ādŽ€“ĩĖąō”Ž€#ā8Ž€#āÔ9NÖęr/ĐpGĀpĖ¨ą ūũīg^ǧtGĀpG #púé§×XíjŒŦņcčģīž{)æ‚GĀpGĀČ&Mš¤ßâä“`|“ŸŸŗäûy8žįZ~tú“O>ŠQĩ}´FátaŽ€#ā8Ž€#āÔ,õBÖ>ũô͚­E%ŌęēŧTęĀ´WÅUĩu]ŪĒÔ-]ŪU­C:šîÔÅÅÅZ´ų5Ą‡É2ŋ&dē GĀČ.ęœŦũúë¯rÖYgÕ EEE•ĘЉōžyæ9捪dɒ%+•WQ\4ņĻ›n*ß~ûm4HĪĢZ‡U-o%R4ĖRT˃zG€Ÿ5›7ožôčŅCƎģ’>'t’üōË/+…WP™ĖŠōzœ#āŦÔ9YģõÖ[åÜsĪ]et°ēlŊõ֕ʩ‰ōöŨw_9rdJ˛VQ\TšĢŽēJ6ÚhŖhŽkWĩĢRŪ …WpŅ0Ģ zåÔë­ˇžtėØQēté"k­ĩVR#FČ!‡"SĻL‘!C†Č˙øĮdœYĖú÷ī/‹/ģļédZŧûŽ€#°ú#P§d'Ę7ß|SŽ=öØ$r_~ųĨė´ĶNŌšsgŲlŗÍä˙ûŸÆŨqĮŌŗgOyâ‰'d×]w•wŪYžzę)ƒ8]{íĩ‚čę̝ÖãÅ_LĘ´“xy………˛Å[HīŪŊõéâÃĀų¯ũKŗ°Ôȋ ĸûėŗŒ=ZÃÛĩk'-[ļ”×_]_ĸ@Ÿ§Ÿ~ēŌ8 6LŸĸŅ7??_ķđ¯ēu¨HäĻ+ĪÂ/šä%Ûlŗ¤ZZ]]1;īŧķįC=äđÃ×ëũöÛO¯ąjî¸ãŽŌĒU+ŲrË-e¯Ŋö’1cÆhÜĐĄCeīŊ÷&CúĮÁŦá•ũK×wɗN&í@ŋîÛˇ¯,]ēT°¤`ešæšk*,Ž{d⁞æšk u0`€Ęųîģī4ßđáÃõ>Ygu4üšįžĶđĘúüäɓåˆ#ŽĐ~å•Wę}vöŲgW(ŗBEĢYíĮũ{Ųe—­tŧûîģĒeē6ĒH—LīŖt0Üyįú´7Üpƒ´oß>™ėūûī—ŨvÛMŪ~ûmyīŊ÷äŌK/MƝvÚi2xđ`Y°`œrĘ)˛Ã;$ã8I's…D~á8Ģ7 .LDß~û-&ėÄŦYŗ'ŨúSb‡ LœvׄDXŦđLx ĸb&¤Ä?˙ųĪdĸ™3g&‚ ?ņčŖ&–-[–ƒh"H‚•D+qīŊ÷ęņÁ$åÚIŧ<ÂÃä•čŪŊ{b—]vI„Á:HS"<Õj–0á%Âä—(--MÜu×]‰0i™¨D°€%ļŨv[Íķß˙ū7Ņ­[ˇD˜ 4žĸ8,Z´(^bܸqIyĢR‡ę”GÁá5âD Ŋ‰đôޘR’ÔĮNVWĖh×õ×_?AâĀ|à 7TŸūLŋēå–[´_bŸoņ$>úč#MKģ†Ĩ'=§¯íŋ˙ūz^ŅŋĘúnE2)Ÿ~=ūüx_~ųå‰`)ލ¸D †‰@2õŪ ä.Čâž{îI‹m‚{6´DX"W9`ˆ@âûīŋW™õų`ÍI\qʼnožų&qōÉ''ÂN*Ŗ2™*[ČÚhŋđæ–ŽŒŅã̝žR ĶĩQEē1“û¨Ē€?}ô˜cŽIŽQ/ŊôRĸmÛļÚ_ŸÜ9Ž@Ũ#0qâD?áGŒßđ"¸KØÎ¤ã&ãx°|kœ¨2ŪD<ü žßB.ķão”—q^cŸî¨Œ˛bUÂJöõ×_'“beÃĘu 'hOG}´Z­°‚đ*ėu×]§V.LŸ>]üq cIņæ›o–tß1IU2xŨš>ø °,ęøa]t<ķĖ3õuܨ%Œtab•Aƒiö•<öØcÂreqmÚ´‘ŧŧČYâįŸÖ4ÁĒ‘ Mq˜´YŽÂ<]‘ĢŦīV$“%¯`ÁĶž,ĮÚ¯*[%OØĢĻ*…Ŋ–ÚßÃGu،{ƒúM˜0AãY&ûđÁ $̐ĒΉĖ`UÔ­,‰˛<ŒËDĻ&ŦáuÕ~¨]QŸJÂ+ēˆ¯Žc|d[BØŗ›VHm“ęČņ<Ž€#P{0.˛¨>–AĨ.ČZx1 –ßR"6B'Â/čä6Ŋ¯°§ R6Ä'6Ųd“D¯^Ŋ7Ũt“Ž › öû°O)X ”XŲžĩtå1Y÷éĶG'$ä…%XŨƒfōÂĶ´îsZ{íĩa"Ŧę?đ‰đt›ËēĮ.,­čūH]EqČ ›†ĩōPƌĻĒÖĄēå}ūųįZĘVĄÄE]”Ë9‰ŋūõ¯Zũ†€ĀP/öžE]x!Dێ}_›ožš’q*Žvfd…Ŋ…a/š5íyE}7Ė°<›/‰h?doÔõ×_ŸŽD°Ļ-‡ˆčž%ōķÃ,ģĒ;ũúŲgŸUŨŲ“H˙ ÖAŨYYŸįá,lPOKc"XW đédV¨č*FÖeûĨk#ĢB*]*ģ,oUũwŪy'ļf$‚u6ļzTú°PUųžŪpVú$k9ĩ¨1TG—˙ÂD&—<1_FO+•žŨšË­'.Í<šŪÎŋøâ‹´?7Å 0Ų¯˜§saŌXáí(ŌņÆâoŧĄoŠĻË&<áˆ.¯fR^:yŧqŦēD•* ËF8–ĄâŽĸ¸xÚčuuëPŨōĸeÛyCĀĖę,L)÷ô°d8{öė>™@–ühķ3fčŌh|ĄÉMį§ęģĢ*3]Y•…S?–čX:ĢĒcf°^Kxj\!ëĒČ\AP†uÕ~™´Q:]2ŦJ•’ĄĪž{î)Ÿ}öY•ōybG؆Å"öŊšĪVļ”pāŒC…‡=aOreîŧ‡gʈ_–IŸuråĻã:ęöæ ø6Ĩ:yÁ€ ą•ščkė¤eƒsXš”đŸĢGÚéšmļ22)ĪŌÆ}öTäR‘4K_QœĨIåWˇÕ-/• 3ĢWēÍ×ÜLŅo[Yz#úl€¯Ž‹÷]dŦĒĖęčAžč^ÆLe°™Ŋs|2Â6ĩGķVGf4UĪëĒũ2iŖtēTĩN™¤įe>EäÎp8uBÖâ…frÍö„iRž…æÎ¨K /'žxbÚ"Ãį6ôe”´ VŖŪÆæÁˆīŦņ`äŽ~āa‚ī˙šsG Ž@֒ĩ°§L8Ü9õoU†o[ÕGŅu^&‚æpį8Ž€#ÔŲ§;˛ŗúŽ•#ā8Ž€#ā8Ų€“ĩėn×ÎpGĀp9NÖyđę;Ž€#ā8Ž@v#ād-ģÛĮĩsGĀpFŽ€“ĩFŪŧúŽ€#ā8Ž€#Ũ8YËîöqíGĀpG ‘#ād­‘w¯ž#ā8Ž€#ād7NÖ˛ģ}\;GĀpGĀhä8YkäĀĢī8Ž€#ā8Ų€“ĩėn×ÎpGĀp9NÖyđę;Ž€#ā8Ž@v#ād-ģÛĮĩsGĀpFŽ€“ĩFŪŧúŽ€#ā8Ž€#Ũ8YËîöqíGĀpG ‘#ād­‘w¯ž#ā8Ž€#ād7NÖ˛ģ}\;GĀpGĀhä8YkäĀĢī8Ž€#ā8Ų€“ĩėn×ÎpGĀp9NÖyđę;Ž€#ā8Ž@v#ād-ģÛĮĩsGĀpFŽ€“ĩFŪŧúŽ€#ā8Ž€#Ũ8YËîöqíGĀpG ‘#ād­‘w¯ž#ā8Ž€#ād7NÖ˛ģ}\;GĀpGĀhä8YkäĀĢī8Ž€#ā8Ų€“ĩėn×ÎpGĀp9NÖyđę;Ž€#ā8Ž@v#ād-ģÛĮĩsGĀpFŽ€“ĩFŪŧúŽ€#ā8Ž€#Ũ8YËîöqíGĀpG ‘#ād­‘w¯ž#ā8Ž€#ād7NÖ˛ģ}\;GĀpGĀhä8YkäĀĢī8Ž€#ā8Ų€“ĩėn×ÎpGĀp9NÖyđę;Ž€#ā8Ž@v#ād-ģÛĮĩsGĀpFŽ€“ĩFŪŧúŽ€#ā8Ž€#Ũ8YËîöqíGĀpG ‘#ād­‘w¯ž#ā8Ž€#ād7NÖ˛ģ}\;GĀpGĀhä8YkäĀĢī8Ž€#ā8Ų€“ĩėn×ÎpGĀp9NÖyđę;Ž€#ā8Ž@v#ād-ģÛĮĩsGĀpFŽ€“ĩFŪŧúŽ€#ā8Ž€#Ũ8YËîöqíGĀø˙öÎÆĒjŨã3ÃĐQQ/ęE#ŪČT°į*4|ŽM@b­k_õND@D@D Ę HŦUųĐđE@D@D@ē6‰ĩŽ}}Ô;*' ąVå@ÃčÚ$ÖēöõQīD@D@D@ǜ€ÄZ•O _D@D@D k¨Ģd÷&Ož\ÉęT—ˆ€ˆ€ˆ€T=Š‰ĩņãĮW=LJĐ2hĨ‰Ē>¨ ‰ĩ ÂTU" " " "Pik•&ĒúD@D@D@D ‚$Ö*SU‰€ˆ€ˆ€ˆ@Ĩ HŦUš¨ę XĢ LU%" " " •& ąViĸĒOD@D@D@*H@b­‚0U•ˆ€ˆ€ˆ€Tš@Y/ŝ6mšũã˙ŦtÛĒOD@D@D@Ē–Ā´†šÆ>´Íņ—%Ö dˇŸh=zôXŽÂ%K–´°-—ĄéÄķø1Ļįl1¸įņcLĪŲbēʋŸĪ?Æų‘ŗÅtÍÍŸ#~Œķ#g‹éš?š?>GüįGÎĶ5Ēcū|öʛņkņ•oy^–XĢ­­ĩ~ũúĩ,,åLŧŊETåÛž- ƒø‰_ņĻÂôh3ĒųŖųŖųŗŧ3ĸÍ/MČ īž?+ûũA_•Ęk56`Ā€T_œ”÷#<îĮh+ĪåÍŲT~ßČ"Į*g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹eb<—7g‹ebŧļļ‘Ķ6CYb­ĻĻÖúô铖<‹;A Ž(=ŖŌüÜã1ŋʋ_œ>G4 "G^úūčûįƒĪ}ôũņt˙-č˙nÄī‹3âØYúĨĻfqSë‹čBĢĄ,ąF >@?F›ˇāi~,ļ—)•¯”]å—]‡bņ\ü–_Έ}zr&L0åzxãđ:^xá…F_~“&MJeŋũö[ģîēëėŗĪ>KŦvÛm7;đĀ Átņŧü´pZoŊõėŒ3Î0^ˆÜ^cv6´XÂŗ5räHûúë¯í•W^IŒa§‘kņÛoŋ%6xãxīß'Ÿ|bˇß~ģ}úé§éüÜsĪĩ7ŪØæĖ™cˇÜrKâWtĢ­ļJŪÅGyÄüq;øāƒíŽģO>Ųžøâ‹dãšōzųdJcO$æ˜c’W2Į{ljˁN8Áž}öŲ46úĪ8aÄX‹ĮC}ŒÛ9ˇŊ#ųˇ¯sîEĄöĐC%ĄīģåŽ˛UąÖtOë2Áá%9ôĐCĶ^$–šé˛ ī {žvŪyį´g ‚ĢņķĪ?O{˛XE„|÷Ũwiyļ=ōNŖÕ4iļ;' ´>õãjcŸ7P>ö2áAá!ú‹°!sŽ|ɡs–ÖHŖmęå=`”+^fKŦäúB?đ4ņÎ1ÚŖ úɇŊjŧÆGŸ`Ãx ô xÎ;#é\SöŗQ?“‡§)9w&”sĻ”‹ĖÛsĖ´ _‚‘žúĩÆN:ũfŋ"ûŌč'ũflÉKéäg>Pc…ãāã×–ēŖ­ŗøŌîE X¨Ąpú¸pc´˙uõ,klڍĩīV=íˆŋL:ƒ{÷ąZõŦmō—‚ŌÃM7eÚBˇá2OMŦ¤ŊãņæJ[܄cpąÂ :ūōqÍ ›ģ @yĀævl^ĄFđ4ÉXÁ?.žXŌDúØbˆ ėŒ-Ļc‡ }sŲa#ĮLŨąÎcšösqģ´]¸\Kę÷…<>r¨—ÉÎuķ6(ËSGÎÖŅ|釂ˆ€ˆ@÷!PŽPûęį&ĮÄRi2¤Aœ‹4'’kžyÔ°:ëŨsžÍkrhũëã&ÖŧŗÕtD0Ž oÚĮ¤Pyâ[yĻĒQD@ĒĢ@ŧVĖ=h9LžŸRXícõrėˆŦkFWr‘”WŸúÛvdAíŊũåB›úŨ2Ts Št(–yũ•"Úp•4&žUrĄ5Lhŗr„Ú3ŲK˙Wkc˙j6d@ËĨĪØŊŦXC¨ųgī1ĩÖĢŽāåšöš›3ŋĨĮ'V¨xûČyÜÚˇÅęĒ]|Ģëzk´" "P)Å´âsouņcsĶĒeĶnmÛmtA¨šîō|ņ˜}Ā€û„Ø?Å^Ąg>h°ž^ĐuÃÕØ˙G_ûË ÂĻđX™â" " " " yŦPâøúiVá÷ž˙sĖbÛë>iŌũæūpÂ-†ŦX#bÍ×lâF°]˙¯…öÖׁÖģiËÔßGÕÛŋŽˇkJ´E Š‹€ˆ€ˆ€ˆ€hX°$=¤ÉŪļ”y7|ĄMšĐ3 5 c?:bĐĻX#ž5žä‰Aŧk.Ø}o‘ũĪ6ˇ/S|=›ęåũ ƒúõH¯ø ŧ‚ˆ€ˆ€ˆ€T;ŪS;}æbķ—߃­eûüÛ|›đˇēfĄÆ[x{¯Ô*j”iáYÈXķĨPŧkŧúÁÆŪäOëlęôžM/m”ShI Wíbģ~Ŗí:ĒŅÖ\Ÿ^G…G Ąæ^ĩRûÖJ>+JJ/ÜßÖ5Ûhčûå÷ûßëėˇ9=lFCÍžWŗœrlŲMYD@D@D@D :āÎę[ŋĆö_d Yd#‡.ļ~Ŋyš~}hėQs‘VĘŖæ¤JŠ52DÁ†P‹ļĩj›5]Ô$â ?ˆíé)“ūˆ€ˆ€ˆ€ˆ@•pO{Ņjk ŋĸƒ@C¨ņÁ!æ´†*+Ö¨ņÅ•ø9Ķ{Úĸ׍<mPP¨Vč%BÔMŽhh¨œWÍËsˊ5o X°ÅFũg˜$֊‘ę\D@D@D Ú  ™\7ų‡­ļųa‚¸üYJ¨Áą¤X#‘‚Q°yŖ4æ"Í÷˛‘O^5¨)ˆ€ˆ€ˆ€T;4“eÅOƒņÖBĢbÍ+pÁæĶ ‹ŗxl­!Ĩ‰€ˆ€ˆ€ˆ@5pŨ”;:‡ļ„ųÚkdōŠĸh#î!Æ[ŗyšŽ" " " "Đ ¸fōąųš‹í~ŪÚą,ąæ7ԖŨĶuj'PJGĩÅe…ÄZŦleŒu(." " " "Đ:Â¯ŗˇžGŠ" " " " D@b­“ĀĢY(‡€ÄZ9””GD@D@D@:‰€ÄZ'Wŗ" " " "P‰ĩr()ˆ€ˆ€ˆ€t‰ĩN¯fE@D@D@D kåPRč$k^͊€ˆ€ˆ€ˆ@9ūšībCIENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Merge....workflow/Contents/document.wflow000066400000000000000000000160671445560650400313350ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx merge --vcs=svn "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{188, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Properties.workflow/000077500000000000000000000000001445560650400255135ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Properties.workflow/Contents/000077500000000000000000000000001445560650400273105ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Properties.workflow/Contents/Info.plist000066400000000000000000000011731445560650400312620ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Properties NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Properties.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400312115ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Properties.workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001106701445560650400336470ustar00rootroot00000000000000‰PNG  IHDRjNûÕUiCCPICC ProfilexÕYy8U]Û_ûĖŽs Į<ķ,ķ˜yžįšpĖķŒáˆ‚^'øÛ9ūeŗæíŖ÷—đ 00ūmƒ DīöÅĪ9_P˜éîāžŠĀ"á:H3  ôūĒ%/ ĀšXX‚ĀŒCāap›0“˙˛Ķũ‰Á¯v~pģ÷H^°mĖß}ūî ÷ųĮgđ†ņ9îcWˇ;ē(÷€Ôúücąëī×h¤kĨßIoũJ%‹R@é ÔQ(@F1ŖØ$JĨŒŌFiĸÔ` 0¯aĪ~Ƹë?¤Ņ7ölXŧǃ?ŦŨũīž´Āá—uĀßŋ˙c `hšeųĪˆö9ŋ膅ĮGøųG“ĩá7×G‚lę%%A–•–‘ŲU˙ŋ)ģkÖīÁŽÚüZ‹ æádūj¨-€E˙# ˜ öŧ˙Č:āđ fÔ+&2öˇ?Ôî ¯„´p„˛nĀDāį, áĩQ č` ė€3pƒãĮŽÁHA HŲā$8Š@)¸Ē@h- tƒ{`Œ€ 0fÁ°VĀ:؄  !ˆ â!qHR†4 }Č ˛œ!Č …b Dč” åAEPT ]‡Ú nč4 MBsĐ;č ôDŒ.„bBĄ0EØ!ö#üˆDââ,ĸqҌčF &ŗˆ%ÄW$@R#™‘ŧHI¤2Ri‰tAú"#‘‡YČd9˛ŲŽėGŽ!g‘ËČī( ŠEFIÂqj„˛GyĄ"P‡P9¨"TĒՋCÍĄVP?ŅD4'Z­Š6F;ĄũĐqčttú ē Ũ‡ž@ŋA¯c0fŒ0F c„qÆbbr0%˜Lf3ųŠÅbŲ°âXuŦ%–‚ÆĻcĪa¯bī`cß`7pÔ8œ,Îį‚ ÅĨâ p5¸NÜcÜ[Ü&• •*•%•7Uü4~•šššZ…Úš:€ú0õYękÔ÷Šį¨ŋH1‚.a!†p‚PIč"LV‰DĸQ‹čBŒ&ž Vī_7hh¤hŒiŧi’iŠišiĶ|¤Ĩĸ¤ÕĻuŖM - ŊA;LģLGE'D§KGĄ;DWL×F÷”î+=Ŋ Ŋ%}}} ũúE–$DŌ'y“ŌH—HwIķ H~]/†#  } o1ŒÂŒÆŒŒŲŒuŒCŒ+L$&y&ĻLÅLˇ™f™‘ĖBĖÆĖÁĖšĖĖO˜°pąhŗø°d˛ÔŗÆžĮÖaŸCĩÃ7G=Į<ĮY§=NINÎėÎέ.X—+._]õ]ΏžŲ§°/}ߓũÂûėāÆîėv۝֝â~ÃíáčQãąEऔSžz{ž÷\ņŌõ*ôZōÖōÎ÷~įŖî“įķÖWŨ7ĪwŅOŨī´ß;M˙˙åŨ€ĸ€ĪFĨß‚,ƒ*ƒv‚ƒBp!!mĄ¤Đ ĐŪ0î°aŖáâáéáŗĒg"V"M#¯DAQûŖZŖáäp0F$æhĖ\ŦFlqėFœC܍ôB ƋÅgÆŋM0H¸|uĐë`O"obJâ\’vRŲ!čįĄždūä´ä7‡ WĨāS‚RĨJ§æĨŽq<ŌžÆ•v8mū¨áŅÚtšôČô§jĨĮPĮŽ eĘežËü™åõ0[:ģ {+Į+įáq™ãgīœđ=1”Ģ˜{á$ædčÉ'§4OUåŅį%ä͟6?ŨœOÎĪĘ_;ã~æA|Ai!ž0ĻpöŦŲŲÖsįNžÛ*ō/š(Ö)n8Īy>ķüˇī’Į´.ԗr•f—ū¸pņY™aYsšPyÁ%ĖĨØK ũ—•/W_aŋ’}eģ2´rļĘĻǎZŠē熺&ˇQSûîęžĢ#uzu­õ’õe Ė Ų×Āĩ˜kī¯{\ŌhÚØsCųFũMÁ›į›š˛šĄæøæ•˙–ŲVįÖŅ6“ļžvĩöĻ[Rˇ*;x;Šo3ŨÎíÄwĻuîÜI¸ķĩ+ŧkšÛ¯{žĮŊgęŽĶŨņ^ëŪĄ>Ķžû÷ îŨí×îŋs_ũ~ĮÕm•ļ (4* 6=RxÔ4¤8Ô<Ŧ4Ü:ĸ2Ō>ēw´ķąæãî1Ŋą{ãÆãŖOėŸ<{ēīéė3īg‹“Á“ŸŸĮ>ߜ:<žÎzA÷ĸā%įËōŅ™†YÅŲÛszsƒ¯l_MÍ{Í/ŊŽzŊõ&m¸Pđ–įmõĸėbĮ;ƒw#ī]ßŋY _Ú\N˙@˙áüG‘7?i}\qZyķ9ōķǜUļÕĘ5ųĩž¯V__އŦo~ËÚ`Û¨úŽüŊ˙‡ãˇ›q[Ø­ŗÛĸÛí?MNī„ėė„S")ŋr$\#|}øR sg˜;Œ€īúÍ)~YĀt‚m`Œ„ķ_!`į§×Ā7HJƒ&jˆjxŊ€AuŖŨ0Ķ‚=„ŗ âĸÚĀĪP?& Ō<ĸ§["á$͙R˜¯˛ŧ`ceˇāČæâĻį1'įđNđķ ø Ö}Qģ+AÔ—JÜĶ%Ŋ-k('Uგ ˛ĩJ˛jŊڜ:Ŗ†ŧĻ•V’vĩN‡îŪŠĩ!‹¯ą¤‰’ŠŽ™ĩšŗ…ŸeĒÕ9ë:x%xiˇâ™D•]l\#ö%ī?áVåŪé1J™õüâō!ų øÉûëX:y„Ä…&†e„gEäEæFŒ>“›WxātüɄôƒÉ‰1I҇“)‡R SÕČ§IåN§MßÉX=ļœ95Ũ–SwŧųÄėI–S†yņ§KōĪėJŸu;—VTWüĒ„xAŽÔãbNYSųdâ˛ČķʘĒãÕ 5CĩęhëeLŽy^oĖŊQuŗ¯i´yąågm;ī-éÛæwŧģÂēôš›×{ž¯ö^KĪũ;†N , ž~46ty8fD”4:ũ¸aėā¸ÁibæIũ̓ĪL&Ų&_?oĘ˜ļ{!đbķe˙Ė…Ųˆ9ŊW,¯>Í÷ž.}“°`˙Vf‘~ņĮģ'ī;–Ē—OHųû)hÅ˙sĀ— Õøĩœ¯ÕëĪ7ž{ūŨ ūéļŗŗ'0{f‚`/p‡@5˜‚3;Kč4…FœBü@† ßŖbŅt5Æ‹Įā Š‚ņ&Ô{"DfZ.: z5’-CcS%ķ}–u62ģGgW3÷ 2¯Ÿ+Ļ@›āŧ0^DZÔ\,Dü´Ä-ÉįR_ĨeTdåÂå‹šģ•ž)oŠ2¨ņī•S7ŌđԌƒŖáŒN™n•Ū ũ;ƒ†SF‹ÆĢ&ßMˇĖļ-P–´VŦÖÜ6ŧļ"vōöĘŠŽN&ÎĻ.&Žvû÷[šŲ¸ÛxØQ\=ŧėŊ},}ÍüLüu4Ղä‚ÅBøC9ØÃIt‘Ø(DÔVôZĖĮØˇq3&ã'<FĖĪ2ČöÉÉ>~íÄpî‡Sø<…ĶųQgŠ ē įĪĄŠÄ‹-ÎĮ””^č/ũXÆXŽrÉ­"įr˕é*DĩTGmÎÕļē…ēk×Ŗ/ܸųŖyO‹_kA[ī-¨Cęv@g靑nLöŨ”ŪŽžĩ~ūûĘö>ÔPT|¤8¤8Ŧ8"3*öX|Lxœ{‚ũ ãSÂ3ĒIhrûų§Š÷Ķī^ŧ{97ķfvfnîÕėü‹×ķo>,lŧŨy‡{Īž$ĩŦũÁöcø§Ŧ•ĒĪ_>¯ņ|5[OøVˇąđƒs˙Véöâß_ķô0ߒæ0ˎÁGˆr…ķö„â b )ƒĖGnŖBP¯ŅžčEL8f›‹Æ=  Åŗā{¨Ŗ „%b=M4­œGŽŅWŦ…™ Ļ9æ>–JÖ ļ@v;]N!.,×:÷žAr#o1_:¨€ĩ ĻŸ0ZxCdB´YŦDü°„줁YjkĪ3éz™#˛.rbōXų§ W(™+ +ī¨L¨VŠ%ėĩP×@iLi^Ķ:ĻíŖŖ¤K¯ģĸ7¨Ų ŅĐÕHŘɸ“É}Ķ2ŗxs[ KŦå+Ģë›h[c;Aģûg×3ŧœ]č\\Û÷åî÷sĶvgw˙čŅM)ô ķŌ÷æô^õšī[ėė¯ĀīõŊAį‚cC BšC×á}Ŋ>âh¤W”f4o ˆ™í‰+?ī P,‘>q#éåĄŪäēÃįSޤFqKŗ>Ē‘.™Á{Œ!ų#ëSö|ÎŗãŖpüôŸė<Ք×pē1ŋáĖՂŠÂËg/ž+-*/.>_^rņBeéPĒ\ūĨâÄåÎ+KUôÕ*5^ĩĮ¯ļ×-6°^3ųCãMÄf–ČÖúļOˇd;Üžs‡ÔÜ}ë.worßĮ~īûĶĻæš÷8f\˙‰ø3†į‚͆/“g?ΟX}—÷Áúķđ†Ķîü˙>[ÚŨ0ŠœuĀ™ kCrö Ô +"v*!Å ¯=ŌÉũ{˙`ĒđʑJ`ž8Ą ˜†Cų0ߛA`R{Dâ2bņɏ´F&!k“(|‚ā3ą!4­ŒA_BOa˜0V˜lL?‡5ÄÅöãˆ8\nžJ’*šĒĪ„÷Æß ÆRģSˇÂĖ'„pŸ(HĖ&ŽŌ8Ō´ÃlĻ„Ž@wn…>”ū)„´ÂÍđņé$3 s‹K;Ģ)ë [,;žŊ‚C›c’3œ‹ĢÛ™{‹§‚lIūÉ[ÃˇŸŸÄß'įú߄ڄ“E DŠE'Å*Äã%L$E¤ĐR3{ú¤Ģd˛dãä|ä÷)Ø*Z*é+¨ĢZ¨yė PĶHÕ,ĶjĶžÖų¨GŌW1đ3Ė3Ē1žlrŌ4Å,Á<Ü"Ö2Â*ÂÚĮ&Ô6Ė.Ų>Įá¸cĄSŊsË¨ëž7nwuGJĒgš×¤¯ŒŸˇQĀXÖ 9:ÎŲõ3Æ#ļų1>4a$Q!éR2ũáC);G‚Ķ>¤‡d,gúg}Ę ?ž‘›vJ$¯1ßôĖDáĄs†Åv%ÁĨGËZ. _AU)×D\Ŋ\?í†oĶ…–ˇí{;ĸ:‡ģ‰w)}-÷Ą‡ÎƒĨCKŖęc™ˇž‘ž[O§ŧėũ2ĪōÆč­ÍģØĨC’>Å|vYåY[X?ˇ!ņŊr“jËfÛíįá_ë‡ |žUúĀgˆ2†ĸĄRč!´Ž #Ė`_‰G"‘˛H 2Ų3rI”ĒõE렓ĐčL<æ6`õ°™ØĮ8Nœ?Ž•ŠŠĘ…Ē–ę'Ūæž>ÔŨAB áŅ”ØNCĻÉ Y§  }AgM×G¯J›¤@jbPcčf4bereZ`ŽaÁ˛\`Uf}ÂÎNÍ^ÃaÎąÆYÄĨÁĩÄ}Į”gƒ|7‡oŠŋLĀSPXpYčšđaKQ.ŅobCâW$ŽIúJf—ÁČŦÉÎË=–ŋĢĐĨxS NCUUÛÔ:÷ŪS‡YŌ{m”Ž°ž†ū>ƒÃBŖ:ãF“ĶZŗķ6‹~ËQ̧Ö36Ÿí {nIGe'{įh—L×ō}wöĪšc<¸)Ļž^ĮŊoøLûaũ|Īõ  ķ /‰xĸÕbbc¯Į}‰WNˆ8X—øífrúáTâ‹´˛Ŗ_2¤Žee>ÍæÎ‰<>K>uĒį4mžį™žBŪŗEEZÅK%EĨîeLåc9WĖĢĒßÖ6Ôå4x\WēÁys­yēĩ­ũfGIgJ—wkīŪ{ō÷ɉ6†gFûƚ'ĒžfOO™ŧИažũōjüuŨBęĸÃ{îĨĨˇ>e|6_ĨY{¸~fÃüqŗc;ô×ü̧HM` ’ƒ" Fh Ą€8€¸D ‘Į‘OP<¨`T+ƒvDWŖ71˜Ë˜ŦöŽ…{L%OU‚Įâ#áŦŌŽē— Nh%JoĐČĶ´ĐęŌĐšŅ­Ōg‘$Hƒ ąŒŦŒ™’˜Ĩ™įX YmØŲž˛ŸápæäįüÂÕÎ}ŠĮ‹,ĮKÍģĖwŋB C0LČUØLDCTJL\œO‚_’[Jd¤´’Œ‘ŦĢ\˜|ŽBĨâ°Ō7UCĩ¨Ŋuę šÜZû´‹ufô$ô“ ƍ؍ŖMÆĖÍOX,[ŲX_ĩeŗK˛_t4vjsásÍۏsKp_Ĩøz>÷ļõöŗđŋ¨ÔĸÚŽŅī ũąqcņî īã“6’3R8RĶ gxûžu>Göøxnä)B^{žÍ™íÂķįHEąÅS%Vē/*–U_âŽ(ŋ"TYį 7Ž*Õu4h]ëk4ž1×ŲŧۚĐļ}ëômÁÎĒ.ąîĢwĨzîI÷_}@ķ0gúQäĐüˆõčĩ1šņā‰OŸž|2Å:íôâė˧ŗLs6¯2æë_ß}3ĩ°ŗČôŽ˙=ßī2ĪŽlˇ?Ŋ\éü\ōÅUfuuíúאuōúġ˜ ÂFÅwųīw~˜ūx¸Š˛YĩŞ•¸u›iÛsģ~{ķ§áĪ“?'wøw‚wšwį?ĘWNvw÷A>~|šŗŗ*Ÿ_æ°}jggŗ|ggûL2āo ]ÁŋŋWėcā3÷ķ™ģčîõĒŨÛŋ•˙A4zXąî8” IDATxė|UEöĮO ŊKEÁR°WėŊ`ÂŽeímíģ{]]{_ûēŠŽ 6ė•Ž*]z' iī?ßIÎc¸ŧ—ŧ„ôœÉįfî´3g~3÷Îīž™{_ڜ9sbbÎ0 CĀ0 C Æ!^ã42… CĀ0 CĀ0<FÔl †€!`†€!PC0ĸVC;ÆÔ2 CĀ0 CˆšCĀ0 CĀ0j(FÔjhĮ˜Z†€!`†€!`Qŗ1`†€!`†@ EˆZ íSË0 CĀ0 #j6 CĀ0 CĄQĢĄcj†€!`†€!i†@å ‹Å¤°°P~ûí7™1c†,]ēT4h ÄsāŌŌŌŧoáډĮSwdHFFŲžwĶ\SÛvh"{ ØH†œŲU7n°ÖXđJøgãŅŽˇõŊßÔĻņ^ —Pĩ‰LŗŸĒ6ė­â:Š€’.HÚčŅŖĨQŖF˛ß~ûIÆ =AËČȨŖ-¯ûÍĸoĩņGOZ,]:´tG¸áÜîŋ'ßą"ū-2œ+åʉ¸ų1™7{…ŧôėY2c…Ü|ßNnŒ=3ëDZTĒbūĢžŠŽG͟ŦvŌŖzFÃÉĘZ|íB€žÖņ€_Æ{íB85mËö(˜šLËeÔ[›ÚäɓŊE퀈[Ԙ,‹&õĸ  ÎÂk°¨-xĐĪôåü\‘ėB‘ŦwÄŌ%Ëĩlwä8ĻÆA8 ßĨ­r~vaēKO—Ļ[ʐ v‘å-Ëđ§'¯5VäÅSžņ˜‘ž.éáQlõĨoF}øž<ķĖ3qĸFųņõ°ņŧ 0Š xԖņ^‘×NM’eKŸ5Š7L—:7ĩüü|¨mˇŨvRPPā&ö‚‚|? ’‡›¸ųĩ úPû—~]ŧ*&K˛ō%Í›B×§E¤öĩOŪ{SöÚ÷r]îČ]ĖY՜eÍųŲyiŌgßn2âņ/åøĶēIffĻ}¨žĨGęÍË˗s:ëo#)Da¯š82–!ĢV­”÷Ūû@†{ŧ˟ŋЍcˆŽ=…Ōēu+ˇ\d)ļq]wŽëÚ8ŪĮuÍQ[Ī]ļl™deeÉFm´ž’Ŧxy`š7ožŧúęĢröŲg{L•é¨sîÜšōÚk¯%Ŧ“ôŧŧ?ia:‘ĩ%L[Á"N¯Č‹IVŽ3Ššĩ‰tGŌbn­S‡ßøīGËu—ž%7?ŌFúlŋģĮÉåô(ĪąĩÕŽlĢö-eڂt/ĸíJ™™ âø/_žBž›’-Ŋ{m*Y9Ų’Ų ‰äåfKãĻMåŖQīËГN•~}{ËōUy˛:'_š5k*“&Mō$­iĶ&qÕÃņAäúö/2žüōKY°`zčĄëā´žō­|šgœâQĮ{Q ęÖ[ú,c2põ8˙üķåøã÷ė€âņ¤—ÕŠLüaÆų‰MãĘ*̞ōĢ>ø[mĩ•Ėš5+ŪæĘĒ3™\ՅôųķįËŗĪ>ĪĻÅ#K8aâMŅr™0ĸu"CķŦZĩƟcuÉĪĪ+>ō%ßY, qcĸ§ŪĮ\~úé'ßįėekŲ˛Ĩädįx Üũ÷ßī_@(t ōĮ-s.Ė9åŊ_ÁádúAĩ>ÕĮˇŖ¸ūPßP?ˆÚŋ˙ũī¸žĄ|•æ§Ŋ55L{éC|ˆZv~Lr\ŽÎ/”,GŧrœOÜōU9ōĐm×øaõđíWËŌ•Ų’åâɓ•'.Ÿˆã:˛ŌÅe´l"+Wތp,ęx7nœėŧķÎņ<ħâ´|IãQņsŽi‹Ōåˇųi2yNžŧũÖ2caųâ‡i’ŊtŽôÜώŒūrŧ|÷íiÔ¸‰ŗ :-ŌģrkƧö/˛6Ø`ŲfëmŧešoßžōÄOȏ?ū(Ûlŗ¯Ë#‡_˛ūĶŋûî;y÷Ũw%ǝ†+ëz¨ĪōĢzŧ§2Ļëcŗ¨•Ą×Ûãˇß~+ŋüō‹[ xĪKČÎÎ^Kyy*){đÁũž&-ģ>˛TÆúúaۑÅMŗE‹qą5EĮT1×öL›6MŽ<ōH?yhcR‘Ąåĩ›I'77×/eų‰Æ…Ũ ë'wâķŨ¤†Ŗė§Ÿ}&CO8Azõęåã&O™â&>– ō|zž+›įˆ^\'ŦQ>gŅ?ĻëŠ ŗÜĨōĐī3§ß ÅúĄCž#(ėšQ§õ“—#Ē/ōĀ€4Ú䗏<-•WSÃŽē>ĄM´''ŋĄä:ëXš[Ę,LwËĸnųĪÁ3røS2ÎLiبąķgɈáOȁ'œ+.‡#ŦnšĐYy…’Wčö05i ĢW¯öd%ŪĪ0SĮøøāƒ4č}ŌÃük%’Æ#m`<" ĸŗÚĪq“–:Ëī2É]ĩDžõ…4Ø`°|˙É;rÔā­ei–Č/“gʲĨ‹eķ­vp8ȂÅĢĨ]›ôĸ}˜Ž^ŋ'ËĩKõáŤk׎Eš>ŋ?ū¸h\¸X?šÜ%”×ņÁš'sÎ¯ŌĮĸʆ*ŋ8ÂÂÅx§ˆGUŽwí3ķ×EĀ,jëbRj 7 LûX”~ūųgƒkܸąŋ1‘vĪ=÷Ȟ{î)'žxĸŒ3&?hĐ ŋĖĩÛnģy éūfäĘđD}ĐAų ūÚk¯õ7eŌøŦåöÛo/{ėą‡|õÕWžĖ‡~(XņX` Nå„ū˙û_AÖ_˙úW9öØcK,7}útoŒÖs÷ŨwûzO:é$;vlŧČ KŽįž{Ž|úé§3ę†dūį?˙ņų´l‡Gyġ•ö|ōÉ'q™ĄîÉō¨Lô ąE-6{īŊ÷:Ø@:ė-ôKÖW\q…,\¸Pößyũõ×};´Ž¨ŪL”ģ랋Į]­iZ§/čĀ¤Âž#ˆŲęՎœaEsqÄëęÛož‘n¸A”Aî@/ˆŽĐųœO:Õ븗ÃėļÛn‹OėŖ\[7ŒŠÛoŋ=ž_렚ž§“÷ÜsĪųņE|,ĸß7Åúa=F?~ûÍËęßŋŋ¯ķ#W†ÉyĄžīŧķŽ¯ow§×“O>éûÆ×éōŽ9Ō—ķWܒ(rIģđ 呇’}öŲGnšå/÷7vÁ…qšdɒxû Ēou…s÷d 3Û-æä:‹š#_Ž>S9Eî/>örļŗ Č*—gĨËŋ$ĮŊˆ°"Of-w¸9ĸæÛ⮟dŽ><å”SâcœqĖCâžûîëąäŒŽEdiø–6ĩV-˖ĨK˛!ʔ÷Ŋ@rVeIaÖLéÖ}[Y0/WúėŊĪá˛Øą6ßö÷0ásũČxķrŠĮ:hšĘį—{aōs-žũöÛūēÚÁõķ¨QŖŠŌ\˙ŪáÆôļÛnëĮc1æâtŧüķŸ˙”]œ•ņ˜cŽ‘~øÁ—ųyâD9øāƒå_˙ú—ôėŲS˛e[ķSß,w?2dˆ¯ ė~üūûx:÷Ŗán×8cŽqŠ~‹e>đĀŌÛYš÷°ÜĢú{ŋ†ŒĮĘžĒjŧ3nĖ­AĀ,jk°(ņŒNo|˜ņO>ųd9äC„IėœsÎņû4ūøãŋ˙ūû~ß΋/žčËΜ9Ķ-&ąf͚ÉÃ?,ŋūúĢ_F„$°Ā͔e5]Ēā†Ķž}{ŋDÖÔíņ7CwS¸æškÁ%Ķ›´+¯ŧŌcŲŖGyėąĮˆōuú÷Ī[œ:F ķÄå¸Ŋ>8nčšÎr˛ŌK­P†=ŅOļÂ}öėōåē%ĸmũžĩÕĢsŧœ•+WyĶM7š‰z˜ėį&—ĶĪ8ŨöŖ˙í…Éę/ų‹›°÷qōcŽėĘâGfô(˛^AėvØa÷pđ„#Ûc+‹/ņÖūAƒ:kđh×Gޟ‰,? Œ4Ÿ—ņõØc˙vKąOĘ-ˇŪâ0+ôzüđÏ~ÛÉ×_%įwž|ķõ7ūí ‡z˜ĶīCš÷ž{åÆo‡z$>ū\3œŒĘ~hWâøŽĘwĒōņΘ1ˇ6FÔÖÆ#Ĩ7?nl_|ąė´ĶNŪ*ÃĶŪĶO?ín#ü’‰•|,b!Áâ†ģä’K„ĸĄ_Ņ?Ëô¤‹IšĨ"ö¯}÷Ũˇë/žøÂ[™ör$bJ›8â_Tą$@Y,eėíÉĖĖđV.ÚÉĸßqŒã–-[yŊ|D1WõC‘<÷"„ĘJwoRžHÖŋɗujce&žOŸ>>j÷Ũw÷ LfLxčúčŖųú =ôc”ôĶN;M:uęäËõčŅ]-ZäÉ äŽø°máš/P˙|_ąÔé䥥ëß<7Aģf8ZCŸĨšˇ:ņ‹ôžëzūģ4Gä\f'B Ō2¤Q†{SÔ}đVĮ šB§ņø8ƛēë¯ŋ^Ú´i#Ũēuķdˆ<‰0Q‰Æ# ëøTŲŧų Ëp$,ߝÕ9+dîÔIōœ#Üi eŊr>S‡{ ‘ē÷Ŧ˗î,õŸøqÁƒ*ōxƒË"näHļœÄäö;n÷a,jŒĪ4×'ÜN=õ4¯õ!-[ĩôyžüō+™2e˛_d$7ėÔaūūcøįĮNŽ÷:YĨ4ÁˆZaõ×]đę3ÁŧųĻ{ßM˜ė[ãm@&,\8Ėđ8Ŋ RNI+„ĢÖŠ­ˇŪz|äÅĘĻå‘Å’c“&Mâu@–ļÜrK¯é8ōS7*-‹nŅr›ožš¯›z¸‘k^dDÛB=ČÔ<øXy’ã7ŧ•į¸ãŽķ틖m;„’sÖYg V.%OԉC.ßjÂzwæ™gú<ČeSú&›lâۍ,Å8Ô'Y!Z´qÉôfi˜ļR—äį™Čˆ:ú‰K?[@ ëBÎõÃ*rŒÅbĀ€†~°l׎/ƒ%B„e ō†e”:ÔĄKO_­Ķ0ų94LŲ°=Ǐ1NCYLžČ Ëc-iŪŧš—‡-Ī‹X†K„éÃ-ļØ"^w(‡6ō…k„ņĀ^-ōā(¯ō}„ûWŲađÄQx4i辉æGkÄŅroM‹šIėÃeâč7ãˆ{ãĮ5Ąrņ94ŋƓÕˆy8Á2Î5ŖųHĮiŸ‡#Žŋ0žsî\G8•Oū(îĩ=Ŧ}H;Ējŧ{PíßZŦšŖ¯mŌāFÁĖf˛âĸŨxãŊĨËĉåQn`:āņ9ô›;’ÔącGoecq¤!Ÿ›ûu°¨ą×‰8|,‹/öų8įāɚrZVĪņ‘ˁ.ZNuŖúcy‹Ö ÛB=!iT}!œ,ođfeˆĮâ–Ĩ>Ęæääø6@Îø\7JtTĮ9?í ķ ŲXĮĀVÛę>Ņ6ōŪēuë¸õG-fd˛tĖū@ˆå“éå”§y–i(ĮžuĄūÄæWúž=u"ã\ÃäᝓK&žÃŋ9į–ŧL™â—0ą0ęćŪārīŊ÷z,UŽÖAûدĮō$˛fĪží­EŦ5Ÿę¨åToՁ°.ŗ# }YŠc< ųTw–ÃÁ bĶeeō ;e‡5•B†<­ Ÿ0×}Į>BŦrŒ/m׆Äé9~e†­§iƒ GÔ2Ĩ™ûeæÅG g!ëŋ÷!˛dÖ™1v´ĖŸ:^ú:RZēø–¸ŧ ¤ŠËÛŦa†;Ō%ĶíQĶ1ã ūéØRŸ1ĘøÃé9>Neh^ė6i¸įēũvŲ9ĢeÜįOËwŪ/“Į}ā?+͏q#GL3åS÷bÁ“Ũ*˙{á÷†rļ#jΒåú,ŅBdęxÂ'ŦņzŽ}¯a|ŽEļH`eœë&/ÆÜ_xû\Į÷ā°<įԇ—ąÃ9DûÄœ¸ĪčxC'čŗ2Æu†Ŗ~Æ;iŸūš 80Ū^äVÕøĶqWUõUõx÷`Ûŋu0‹Ú:”Á…ĘÁĪŪŦė™`ߤ‹‚Á䉅Œ%Aö‘` ÁéÍTĪŲäÍ&pžŖ7\ÂXØ°Ī k“Īīēë.˙­M7ŨÔ[9Ø4`ĀÄz§õ„>Ka9,-—^zŠ×•ø™Ösųå—ûzØô[R[˜4ØČN;YâĐ%ŠDŦˆīŌĨ‹ŸˆoŧņÆu0ÁĒqíÜšŗĪÃX 3Ēûtԑ‡6˛Žļ€ļ‘›>K„,Ąą)2Čū=ōķķNl0 Ú՛ūƒ0\tŅE>ĄÃ;,ŽŗÖŪę˜8¸‰s€ iœsķ#ÂÄ3ĄčAYō„yxÁŊ¯ŧōŠ×ōŅe˙yi;c ,ĢēPŽqÄKĶĻMķ8 ƒ:­[õ$yÔËĄ29gßcܑŞG& ­ YŒu–øŲûĮdĮĮQžīĘŅdh˙0ÖĀ]ķhÛ?q/š°‘ą‚>L°čę‰ĖĒtŠíå‚ÖÔí¯‹Ĩ;k´[vk‚îH—MÛË1Ü&O^;LŽ8īF÷×É-y:\]96Äįš@FFž4Ī͔Íų­ĪÕžŠ#=Į×spĐ0ž†5?q!&ZŽôčx$,é?Æ#˛įæē}jnųŗsŸĄ’ŗlš,Y6K-˜)YĢIËØtY¸`žŗlîāöŦus–7÷æëę,‡E _–qEũČR§}ĻũŠO=4_4Ė}…%{H×)6ōĮjDxo>|¸Ĩr¨—ē°ČBRŲĖuÎ恍û({„yPË/ ņ ˆ[:T‚Ų;‘ãū„ÅŲÔæĶöÔ_ÛČ8âŧ2Į{]Ā̞Ú`ŋõ™"˛zÃÃį&č'~ž˛XędãHįĀbƒĨ† Ž 9‘SšŅ´0ž˛ŧņ†õ‹zHCâąHpƒÔF˜ÎšĘŌsĘaÕ@7՛úЇxęá\ķķÔļ%ÔUeky ĢQŌ˛ČTščĨˆúUoMĶIƒũI$W}T&åŖNķāSmÔzÉK<¤RûEķĮrâÖAyuô9X넄îáA9đbyš:/ˆh;‰§ô×6iũč¤:rŽųUúFĮ‰–Á×tō+VČĮŠNš‡ąĻÖ4Å]ķi^ô‡Üƒaˆs´ Qũ*+Ŧ˜Đ—ũ˙üÖJēl!1ژî^ pDMÛBožņčrČé—ÃŨ\?CÔÜá bnåĐŊ)š/ŋĪ^*s'Œ“‹5ō{ĢčCˆÜÁJ¯Â8ÅPÛIŠqŠO*ã‘ũWÔA{æ/X('^û›lÔŠ‹Û&n™ē•ͧĄd:ųËW,’Ėų˙•ŋ]zdšqœ•ĩĘ}ˇĄ#ėSeĀŽm}1ލ=uėĄ¯ęÃ9ũ9´=ÄĄw´]¤s˙āÚÔ4ōĒŖ}ŒƑb¯XhŊÄŠN=Ú qE6>˜ķ–({0káõ0~üx˙ā‡%ü\kä×ļj]‰ôWUˇÚŽĘņŽ}jūēŦyŦ^7ÍbJ@€ É’§}.žđ ˛ ŊH‰įœCķ—ČiMC–Ę /v%"šOũ°ž¨,ÂÜØÔŠ\ÂZÖŸŦ-¤…˛ĩ r4^Ëëa’ĮQF师āy4=ˆöúhųPĻÖ¯u)6anܯõâC`´<~¨7u#ƒxú\ÖĘ×8ŦŸÜāšų3P/“iz$ĖšĘW´Âz‡ÅVeQ†É‡‰–80đ “Ļqœŗ4S=ņÉC{™xԑŊ˜C´<˛T/dāĸadj|ĸ<úŌ€ļ‡ŧĄ^ČCđ"úĄĢú*SËi]•Ö~CôkĶĸš´hé~Ũ.ęāsŅŽųĸA‘vÕå˜"‚Æ Ž9ŽčgáĘΔ†î¤ņĸo]÷ˇ]ËĒm'õFã4œ,­¤ņȘĻ]¸ĻMËĀÎŋ¸oģũî7įÂ(Ũ'Epm3Ęw3ĮČ[¯üˑ•V~lđļ.¤ĩÉ^GÅ }„<Ŋ˛ÚĮčĮÁ8ŌķPgĶö/ŧ'‘:ˆ­>`ięŌqBœÆŖįäG.Öß0c‹}ię¨OĮ1žŪ;ČGXëÁGŽę§uÖö°öaUŽwÅŪü5Ŧš3¯‰ŗŗRЋláy4LZx„éÄsŖĀ^ĖäĶ8-Ŗrˆį\ãÕ×t k>ŊĀ´­Sķ…>įę´ĘĢ ë NejēÆákũš-ÆëšúZˇúƅ2ĩ>|Ž0o´ŒO dE1Š– ËkY͓(8nâX”x’ŸcBáĻG]Z7wœbL߄.l‹Ļ![ehŲ°ŊšĻų¨CĶņU_|ÍCōák:˛ÉĪ„-†É-ŖeņqaŊÆ×úTâÂsĢZ^ĶÂraŨZ_]E§kŨ*ŋ];öî9Ŋš“ēË#Pí°œûéūaMŖ›!j…Žād˟ š,õã%ĒĢցOšĻã+&ašæŅ|ZžpiãQąfY˙œsŽđ{˛°°1fIãĶŽœŽžéž]įöE3<ŨX6ŠŽmÕAã k]´CļKãÂ6’' kmĢĘ'ęÁš–Å']ŌB™ėãZÕ2ž ûĮ ,ŧ0ĻrC?ŧnTŽ–Ã'.tĩ-L[CĢjŧ‡˜Ųšŋĩ Š  ƒUũč(–§ū Āø`ß{šø8&o7ę^Ģp’ '[ ¤yÔ'ŸN*äĶCĶ5œaŌ(¯$y´^|='^åqŽå4.ô9'§åÃtâ5Ė9NķkXbEĸ/YÃbĘ6ŪfÆ…~ŒŌø0xۚˇ˜ądA´¯J+ŸjzĒãâÅō(û¯X¤}„•ŅzP7}@{ąŗG’=ž|`›0u’7ô¯ēč"^ĮåHĮ…ų|„û§ã$ÔEËjž”S™Č_Õ+”Ī9ųp´ōęČO:õ„xrëŌ2uůmãŊŽām‡ĩ("6ÖnōÜŧš‰s03yąųž‰É˜ ›;7ūpB(ŠZDJĘŖy8×2øzŽåIW§įękŧ–Q?¯áTĘEķhYühá°NÎ5žž‡2Ēęœ ›‰›}‡68}Ē-:ÉGõĸ-ė‰äÃŦ!ä C‰ō+ĘĨ:stŖ~&h%/ÄáÔį\û T™ IDATAå3æ9įPYäKæBYĨåŅŧĨõ{˜žkyęá<ŽÆS6Zž2¯×o˜/Y;js|mīĩë’tˇ=j%Ąci†@Љ€ÉŽ‹ŽĨnęÜø8×§đT‰ZÕ¨Ųà ˇĒŦ}¸•¨”Ļé:6ÔbEXĮNEļEe&ÄŖwiã1!IÔN͗(­"ÛUĶdÕÕöÖļņ^ĶÆEEécD­ĸ49†@1úĘdŽĸ:âô‰ÜˆšĸR6ŋ:'Fęæ Ÿ9´/écíīd­ ˒ĸÆ8áY•áJÔ­mĐņ˜ŦÄGą†劌vÕ™Ņö×Ŋ*JpĖֆņ^QíŽIrléŗ&õ†éb†€!`†@€@å<ÂØŠ!`†€!`†@ų0ĸV>ÜŦ”!`†€!`•Ž€ĩJ‡Ø*0 CĀ0 C |ØËåÃÍoæŗ SĻLņŋ5W’~˛dĢ­ļō¯â×õ§%á`i†€!`†€!P6ėe‚˛áĩÖ[]ü–#ģÜlŗÍ’žąÅ[Tüņ‡˙ŽVīŪŊãĩUaĶ7ĩ~üņG˙cā|—Š2ę‰7ĸœ'čÉĮ`§N*}úôņR*[Oę\ĩj•˙mUÕYNxŦ˜!`†€!GĀ,jq(Ęv¡‡°¨m˛É&IIšJ$ĪŦYŗü÷Šx§¤Šķ'žxÂ˙^Hå#˜;īŧŗ˙:8iŠ˜Peƍį-x5MKEe+ĶŠ.ÔQ㧕”4iZĒz’?•ŧ*—:鯒ęLU&˛’šŠ‘Lļņ€!`Ô?lZ9úœÉ˜/‘ë7e8×/“ëOŒäåÅéĮ$ÉKĘęA՜ãöß9á„ü÷” Zę4]ÃĨųš_ũŌōWWēę§~*z—ƒŸŦyūųįã8Ļ*CķŠ¯uūøã=‰ã<šŽų’ųZf}d$“mņ†€!`õŗ¨•ŗ˙YŌÄĸ1sŋÄė~ÄxÍĪÜ ’4Ā!k„õc’ZĨĻÖ´f͚yˏ’…Ÿ~úÉ/ōÛ{ũû÷÷ŋHūW^yÅ[ŖÆŒã?˜Ų¯_?éÜšsœd¨ėO?ũÔ˙zbŊb¯ŽŸ1úâ‹/dɒ%žü{ėáŋ˜Ī˛)K’Ņú ŋ˙ūģ˙Y¤]wŨ5ūÆ^XņŋDy §ŖGöKŋX iŋk¨íSƌōŨwßų€nŗÍ6ū÷;{ölųúë¯ãÄøˆ#Žđō°ŽŊöÚkÂrr׎]å‡~H¨÷ôéĶå̝žō¸C‡^S­“ũBęŸ3gŽoãÁėÛęŊũöÛ{ŊŅ…2;í´“—5jÔ(éÕĢ—Ī•Ąõßœ!`†€!PŒ¨•5&_ˆ_g𞠪 D)5ōRF'o- íĪ?˙ôDŌ°įž{úŧ)ÂGy¤,\¸Pžũö[9đĀ}Ņ+Vø¸Ã;Ė 9uČå€ô´iĶÆ%,>ŨēuķY düÆāŅGíÉyųaåDõAō BĮwœ/Ŗu„~4âéãwŠRųë¯ŋĘļÛnëqĐ<Ôũå—_Ę!‡âīđ˙ûŸtéŌœĢĪ>ûĖĖž={úö`™„(Ž1Bh;.™Ū¤}ūųį2hĐ Á„ âõ’Bn§N¤cĮŽB=ÄEõūå—_¤oßžū€ ōƒÚüv'2(G™¨ #h lÎ0 C`}0ĸVô”`čī8–$‚ŧ8ōj9Ā CRp3gΔŋ{ĸĐļm[‹<ß|ķ÷į͛į‰!¤‡%‡=oėCæüųķũË ¤Šl,c ,ˆ ›é‰‡8N›6Í/ˇęĪĮP&Q}XĨkÔģīž+ģė˛Kœ˜„í@N˜ëu!“4ˆõķ#åXÁ´Ũøč Ņ;v,jørsįÎõå CX‘…#?úãÔR™Louƒ'åųÍɓ'{>âhžČ'.Ē7zlˇŨvž(īŊ÷ž'•KĘhyõŊ‚îŸb¤aķ CĀ0 ˛ `D­,hy™!LøLČŅI™<8Hy5LœNčLō8–%!XưĖ@° 6,…b]ÂmæŪ.Ĩœ–Á‡Ŧ¨\ĩڑ—4,r#GŽôÄhƒ 6 ÚįGĘ ˇĘ"-Q}ZĮāÁƒũ§HXęc™ĩG‰;ōíŗĪ>ž‘ë‹—Đ’„Ķ:Ugô§^t×vâˇjÕĘīE#?y•œqŽ:ĢŋråĘup"öC9×´\¨‹ĘUō՛ūSĀžĻ<>ņ”WČ×4ę3g†€!`”{™ Č1!ãXԃ`p@˜ĖÃCãH'/NË깆ņąüląÅ~īdrƒĩŠE‹>Oā”0`ã|ŅĸE^ōAÅU ÂaB/Ō°A"6ŨtSa9zˆOVD„2ÔÃ˛)˖ėåRŊĩ”×<N,xČĨ XôX~Ĩ}øĒ#e9'K›ž;|ôV‹ōÉC:Al ' ŊąęaUãåʲŦĢúǝXŅ?3ä‘7ÔÜUoôd9âJ{Ö(ÃÁ[ļ*Cåú íŸ!`†€!PN2.ŊôŌëĘYļ^Ķ ĸĀž1ȑ’0ČAxa6žC¸°A2Ô!‹ žīąmšå–>ŊO,Īą÷8ÄrôķĪ?ûũTö[!˛5qâDoåB>Ž0¤ĒuëÖž ōØĶF~ŦLėŠ‚Ā‘ƒt6øcÉKTääíˇßöËŗB,jäGŽv ˙­ˇŪōyĀBĮ8ČŸ&a>KŧXĖ 4lžīŪŊģ'cčÎō(dŠcIäCÁ!Čí§,r!_čŽĒ¨ŪQˆ¤”ōė9ÃĒqcņęП~aéŨ) 9K¤7/` u‚#/P@Ä!mŒ•ą™ŗ"ĒUMqŌúĖ7 CĀ0REĀ>x›*RÅųÔâ‘‚@ąIģ$‡u R˛ûîģ{ō 7˛ œĢ#IĶ|-ûŌK/ų ˆ#oH<(ŖųŠ„L GI‰æÁ*ĨD“4,Jč!Bņä%Žē ‹ašZģ Ĩ$u*ČM#ŸæÁ×°^•Ŗņa~ôĄ]ČÅŅ>ęŅō>Ōũ#N1"/ēĢūÔI9ŘvŖŖęę­õhšĘ×x|•פI“ĩęÔŧ憀!`eAĀö¨•­ /?V+ŦęByJ´,čÕjĻŠ -Ģõæ ĪÃ2ZŽ8t×|ŅxŌ44ô§-Z_˜Ÿs•ƒ¯įÔͯię“GĪÕË…įšŽ¯į*Ÿ|8tVBFM×~%ÆqŽ åĶŖi„õ‰3g†€!`”5æ˜ō”ŽĮetBf–DD xĸÄ@!Ķɛtœ†9‡¨ãeEãČēDyI'žöh:žÆ%Ē3‘Lō‡õ…įZ‡–#MëŠĻ.­ŦĘҞĒģęMy­CeНeÃú5.‘¯2S͟H†Å†€!`Š€5E"EŸIĮōYøgŠÅël6ÅĨÎ6Đf†€!`TkžQP •[•†€!`†€!`É0ĸ–K1 CĀ0 C Z0ĸV­đ[冀!`†€!`$GˆZrl,Å0 CĀ0 jEˆZĩÂo•†€!`†€!#jÉąąCĀ0 CĀ0ǁĖĮ{ŦZ°Ę CĀ( N:ÉāÁƒãŋģžß¨Ķoäņûą~øĄĖž=ģ¤ę-Í0 jE müøņ1~H››?H­7ąjÕĘ*7 C 3fČâŋeŋũö“V­ZųØō’5Ŋŋ-_ž\FŽ)l°tîÜŲ°6 C Æ ĀũŸ›äwÂųŠČL"8ø`) É~ ŠÆ´Ā1 zƒÄĒK—.ÂOĩŊųæ›2pā@ÁÂF|Yɚ’4,hŖF’Ž]ģJûöíŊœ˛ĘĒ7` 5 *G>ÆĄü,S šđŖÚæ Cn”TņāČyĮŽũ“%k‡vž={Æ­˙Ĩ‘,•E›~ūųgųūûīĨwīŪŪ:§7BŌdųLöĪ0 JF€_?Âxæ Ûäɓc,{BŌôĻXÉõ›xCĀ0JE‚Å=IîQYYYâļkøåʝwŪŲßÄ”Œ`)ICÆ×_-,ŖBŌ°Đq#ä&¨G2Ĩ*j C@¸q_âÅōgÚ´iĶbÜušŪØ*°Ne†@™ ÷'îU+˛rä÷)“Ũoíf–ø’ŪËôĨÜŧ<Ų˛[wiŅ´ąŋō´Ęļ2+i C` jzJûķĪ?=QãĻĻG×iâ CĀ(z/Ō‡Čg†@™Đû‘5ŦbŖ'.wÖ´\iҍPZ6.”ÖM déâ…2uęT4hÉ Ŧ(|i õídiv†,ĪI—ĢĶU­ĄėąuKŋŦj5ĸÂgᆀ!P(Yc 4Ķŗ5wƒ2g†@MB˛ÆC$÷¨O&­–13ͤM“LiÜ _Ú6+”twßj׎4jÔH>úč#éßŋŋôęÕË7—žûî;Ųzë­ĨE‹~Ąm3‘EYé˛8+S~[äžTÅdŋžÖlØĩû`Mę~ĶÅ0ž¨éFZCÄ0 š‚ Įũięܚ%g j.MeŦ•GõĀOHÔ4ÃˇSsâßFÛģgŅO˛hšúQâŖņøŅ´h8QČÚã?î\ ÖąĖĖLҎģh,NĪķķķeƒ 63Î8#NōÉNĨ~/¸ø_44œ¨ŽTËįååÉüá;ŨUö?ü oŊõ–lˇŨvrøá‡‡ââyÂH-ÆqūėŗĪĘīŋ˙.C‡•nŨēI2šÉĘOŸ>ŨãŪĄC˙ģ‰ČL”7Qyqš6gÎųõ×_ũĀíŅŖGQbņÍŗVd’´DyÅŠŦhZ4LžDqVž(6Ұágã'Ҙ°ëĮޟD÷†Dc%Q\m?ŗŸūŲ5ÕŊū˜6mšĖš5Kzöėéįžh[tOķDĪœąÅlĮnE„.”ĨįI‰$ˆoĻḕÄÍÚ­ũM"PŅ>ä ‚1xđ`á|ôčҞ`ÁOØãЍsõ9oĶĻ#= qęN:é$ųę̝4(›mļ™xārÜqĮÉÆo¯Ŧ:÷Ö[o•Ī>ûĖŗoęičž;đųįŸ{˛9uęTyūųįĻ~ÄG”[?üСs⁞ÕV[IĒr˙õ¯Ɉ#dƌžn°ŧéĻ›äØc-ˇ.ôáß˙ūw9ōČ#åŽ;î(ˇ+h†€!`T7Ėã?ūøŖ7(•¤ Ö6æōūũû{˛æíÕ ãWĄã1â~<`ĩėā>ˆ›Œģ”HÔæ//"FmÜJb2aÅqŽu ëŲ’%KäėŗĪ– 7ÜĐ›ĻM›zËijIÝš’tÕ´ČĒUĢ䧟~’‡zȁĒlQyįw¤OŸ>râ‰'zKĶ|āÛ¤ēĄįa¸Ŧz…eŖįa8”ûŪ{īy,Zĩj%W]u•ß+øūûī{œŦLX>Ųy÷îŨåÔSO•mˇŨļLmâ‰äšįž“–-[ʅ^˜Lŧņ€!`U‚Ä KÚ…E/YnŗÍ62a„uęÖxō‘c’.ƒ’šŠÛĢÖŅ}J7@g.Ę_‡„×!jJ~đ­(&jM×}€‰›<ø+œÆ%:~pRķǝeÔRÆK÷ŨwŸˇŽ}ôŅū%,a€¤ŌFŨŧ€@~ÕCei[Â:´ėYg%;î¸ŖŒ5JÎ<ķL`9ŌÂ2Ṗ×8õKĒ3Ėķõ×_{×^{­_Ū$íę̝öqœ'rayM×8õ‰Ī5ŸÆ‡aĶūSœžũö[Ÿí¨ŖŽōËČğvÚi åj]ę‡2Ŗįũô͞įž{ją¸¯åÔOT^ÛæQ§ž•_{ü$ÃÅđ+B@ņQ߯ŸTƂ]?ĩ˙úÁJĻ+N1V›đ_|ņEí^ŋBˇõÖ[û0$ŽüėWcu §cĨ•ãVēOvđœ:_á“ē„ë™dä((ūņN~ú€‚ᥕA–XļûčŖ<éÁžC°Â˛ĒDčsŽ,ĩ˜ >\Ū|ķMa/WĮŽĨ}ûöņˇA!sļĨK—úƒ5a^$P’•Ģējŧ@+.++Ë×EupĀōä“OÆģüōËũéØąc}u˛dĘōäŧyķ<ąŲa‡†Ĩ‡,­SĪŲhˆûūûī×I#^ķs‰<ôĐC…åKtRøŦ}C0ûöí+{ėą‡Ü~ûíqËW(CĪÕëĐ8|} ƒÅ^A×2„y: ędpîŋ˙ūōņĮûŧXáĀ„ūžōĘ+Ŋš,° ÷ŨwĮe†y!Ē`ˇĪ>ûČ'Ÿ|âķĖž=[ŽŋūzĒöXQū‹/žˆ—WÔGˇTÎŖmJĨL˜ĮƝ=ĻClR97ü ŋđZMeĖ„ylüØøŠîņÞkuĖ•'NHÛ§pø„‰-m”‹Ž_Ĩc…ÅœKɚĘW‹š&‘ĩâP1QĶ´ĐĮÅņqãÆ…Ņk÷ęÕË+¸Vd‚uĒUŦQŖFŪJ!yä‘GâlBÆA^%u**JÔ4>™Oū˙üį?>yˇŨv–WqŧŊÁæwöÆé €Ą#Žú ŗŋė”SNņ/1`ŲCä‰ũX‰Ü!‡â-…,ŗNž<Ų/1ō†Hԁ'Vž-ˇÜRX„|đÁŌĸE qŋ&áåC‚ k,ß>öØcžĖž~úék‰ †&h›4ŦūAä—>ąŦņ":Ōu´bʀëŌĨ‹`•d?!d™c9ūaŊä… ŸJÁĒšųæ›û0ËŦ•átã%oĮā4pŋ[æœ.ú€ũ3 CĀ0Ē ]áĸzö]ë‹ē'-$k¤Ģ Ëi\Ē~Â=jŠŽæƒātîÜŲ“HP¸T͛( ņ‚|@Ô°ĻQâ%aäãĐx%w” É[ĸ:ĸqlžĮbIā›]XĻøUo¯b=â­F%oŅōe ŗYž7MųdÅüųķũ,dėēëŽ)‹2dˆß¨sg?Ų Aƒüū@ÚĀ™J–SXœ‘—6XŠŨ~ûíũf~}Ņ‚%IŪå3)Xyāĸ‹.ōaöĘaã­Íō8Ŧ™XŌø(.dŧyqG?ž4i’ˇ8‚/˜3 CĀ0Ēæ žôĀGoÕ¸ žęYƒ¤i ëĸą>RWĸô0¯†€!`•Ÿību‰ų2™ÃŠIKļėyĪGeę‚ éĩqēÜ6´7¸0Gįš ˇ¨%S8•xH &ŦjQEŖåŖéLæX•Ö—ø„õ¨e'ŒĢˆsŪ6Õ7N×W/„?Kąžō°baå*Íņ9ŽŠpô5NæčkHœ9CĀ0 C & ųÃÜiðƒĄƒ9î@:Dm},iÚÎEÔ`’Ņ7GUQķë,/3€+аÖ-tŦ5†€!`5æ°Í6ÛĖ•Šk"j•ŲP“]ŗ`é͜!`†€!`”Œ@ÂĪs”\ÄR CĀ0 CĀ0Ē#jU˛Õa†€!`†@90ĸVĐŦˆ!`†€!`U@J{Ôø!Ņ#>Ž }ŦCĀ0 CĀ0ę<‹˛÷vm,ũœR"jü¤Īe§^VįAŗ†€!`†€!P\üÔš6mÚø2ž<:ųČNĨ|T^4\€.ŽˆĒ‹Ļ×ĮpäŦ@„EKŦigäđ§dūœ™Ō°QcįĪ’ߐO8W}/Zūt$>+¯PōÜŪļô& âũœ›9CĀXŪzë-éÜšŗ_­¸įž{ä™gžYĄ lwųúë¯#ą|öŲgåÃ?üT]yæ$•]_îáĪ?˙ŧ|ôŅGōī'žˆ¯€€Au´ŋ&Î!fQc?Ό3˙ËnI}ÉCÜĄ,Ī=÷œôë×O8ā™åÚ¯Oäå.čúüž>G"gĪž-toķƒŽÍ˙ĐCÉūûí'ģ랋\}õÕqũ¸)ėęŲmˇŨäŽÛoįįâ˙áģīdĀ€˛Ã;ČĮouųú’´ˇ.§į:ĢXv.˟…ŪĪqä‹cĀŅgĘ#§ČũÅĮŪCΖUy._LV:ĢڒœB™ŋ"Of-w,Ī5s†€!Pņđ‰¤ž={ʔ)Sŧđ3Ī}dŲ˛eņüz§˜Ž>úh ĘN;í$#FŒđ÷OĘ@pÜŋ÷s÷[ęéÖ­›wÜq>Ž´ožųf-˙üį?}>ļäÜ|ķÍ2jÔ(¯ÃÔŠSåŗĪ>“O<‘bĨēTæ¤sŨvŒÜī˙ûß˙ÆīéĖGÄīėÚ‰îál…Ų7(ĢsĀ{ė!`Ë<ņ‘+ n§všß‚s„û"ÂąĮ+hō?ėæĄģîē+.¨[cž%íKO9"Å\Í\ūä“OĘK/žčWĪöŨw_?ˇ1§._žÜ÷–Ķ Ī?_æĖ™ãË'›3™owssØ Ŋ÷öccĢWƒÜüÉęœ_=r:蜝¨ũÚ^SËމsH…YÔvÜqG9ëŦŗdĪ=÷”+ޏB.ŊôR˙i F/Äėˇß~“īą`¯Ų‹Žs˙öˇŋųá"â “õ˙ũß˙ų‹Ē¤ã7Æ÷ŋ•”Īr` ÉÉÉv„mĩ?÷ļo!áĶ ėVųcÚ˛á†zB—ëH–@–^9ËËGŖ>’{îŊGn¸áyøáGdÁ‚>mŊå˛xņųÖĩ§ĪļÛ:‹ÜÛrÕUWËķîÂbpņ€üˇß~ÛcB~ >nwŨu§dgįČņĮīaĪž=}ēŋGžūú람pŸäá™|?üđƒ :TƏī Øõ×_īįϜœ”Š[˛d‰ûļbcŲhŖüÜÆVĩ¨ąšy+—Ęœ4ė”a˛U÷­üËp_|ątāA’ŗ:Į™O?ũLÚn°ģWē­@EsJx?ŕ힕+;~œPö@W–t (Ÿ~úŠŧúękŌ˛E OÚVŽ\!īž;Ræēvžõ×ŗÜwFēūY!ķįĪ÷s Ę‡dŅ~œ3‡ŗ•iöėYÂŅ~÷ŨwũÖĄ—^zYNs}øÂ‹/HķæÍŨįąŪsķæCōÔSOÉyį[âœyÎ9gģÕ¸¯äūûî÷sØŧīûåíos‡v­pÛWœ~a{u¯č9­&Î!fQc ūã˙W^yÅ_°n˜-"ŲÁĘÖŖGßáÄŗg‹ îškŽņøaî\$%šîŨģK 7ØJs<šaåãâĀ÷įÅáôtÂé’îXüāÁƒãaČ]ûöíŨÖąŌ¤i2dˆ|ņÅNO^H(zōō]yå•ŌŦYs˙TÁŖ>ŌX<5ōäĄõQy:m"]ģvõ„lôčŅ>đė9ŗũÍ]įĪw˛œ~ÜtĶMŨv¯đ#nņâE^>Ä œoŧņßæĪŌæLęGžļ§gĪ^ū#õ\xŸÛ222ãíQ}´}މsH…› ėSãĸ€xÁŦ ę‹‹ÁĞ…ŖŽ:Ę'c˛Ö‹Rķ—×Įˌ,%iZ¯úȅ$rq˛1Ÿü„ņÉŖaĘĶ#ō4tڅķDĐĨkøûīŋ—ūũûĮÃäĄ,24ql˛%Ž›f~^Æ >՛é­ˇŪ*,ŅōD¨Žø"‹Ų”ÁWG{ę[¸IÃ4iŪ¨đh¸c?.GŋQvņ]ˇ$ũ>Í?Ģ:ŌVPāŪu7‹UĢ $ŖiC…Đ|C xûË-ˇŒKÃŌÃV˜Ë/ŋÜßãâ î ØĶO?í-^† æÉ÷ÕģīžÛ¯@°ˇ˜=iĨ9Â{a´ ÷JîģáŊ9šg}ÃČ.iN‚¨2đÅæœŪĶŲÃÅR(+6—]v™_!]īņ”=âˆ#œåęŧxYę#ĮˇD5Ė– ;´ŧÎKøā¤8pŽ„Ãķ0L<å´méÃ;Ŧh;‘ĢŸš“üÉæL­WÛ ‰fõ RĪ y|‰/&¨žžQî_e„kâRaD7ų|OCt ~—.]<+VPŖ>kî,…>üđÞ°DĶ…YúĶŽO”Žq L:=d¤1¨8pŦÕcīÔŠ“Ķéäį?ŦcÄCް¸1ĀHc@…ƒ-°¤i˜Aļ˙ūûĮÃT@Ŋŋ˙ūģ—ƒyŸ'I,,О~Ī͉öņTĮú:õđļ+73-DVå#s=M~œļöÔˇpĶî†Û¸čĻĸæbđčŋ÷!ōų wĘĘEsĨqŗÖrėJ g9ĸ<÷"Až{û7=ŊPš5t}h{Ôü¸ą†@e"ĀjÖ(Ŧ4,CrßcF÷ũå/ņ1V¸aލqoäÁ–{æ´iĶü2\*D-Y7sæLo Ōû5y7pˋpŋūúĢđY%–eqŧÆÜ Y‚䕿J›“XVde…ũclB6sŠŽLOC–@œŪãĩ,˜ņF­–%?Žy‚ųüė'cûJöãQ+`¤ˇmÛÖcËųoŧ!|¤—y0˛t>EŽxi„YZF–ĩ5÷`=Į'Ŧķ)a–¸.\—Į$âXVfÛ¸qãd[ˇÍHÛ[™s\MœC*Œ¨ąņī˙ģßs‚ųcå76“9˜2ŸôĀúÆˇÅ/^ėö)Y~âŲ´Ī^CIŽ'Tø8í`ΚQ@‚tĮ9$“§66ĻbÂåIxŒœ#Y‰*r0÷˛¤ĢéÄQBËE6vėXoI„Ėâhûûx’`&mÄDÍFOĘAÜŽēęǏ<­ųÚļ°./´ūkÖ¨ĐYÔzĖ\÷¸>r‡ÃĄEĶörˎɓד#ÎcŸc'ˇ×ŖhooōBÖ22ōĨynĻ´hžÆ\!´&U‚˛wÜq‡Ÿ3 \Ü3™; [lą…ß/Åĸ8î‡Ė1Äs?äŞõuŦT@Æ ¯žúLJH$/0OŠÃ¸Ā7,yá ˇąž=sŧlĀ ĨšŌæ$đ ­ŦJmã^dCöęąŒĘ6ß|sŋĖÂ9‹z•e?7å™+ȝeĮ9ËĄŧØF]4Ⰴũûß˙öKĪ´•4æԐÃ9ķŒ†uÎŅš‘0ÛÔ˛ĮV%–‡y鎤9“ē؏ ad#ÄķēëŽķmϝŲ2DUájâ’æ6x™]Š€ąÂāaäW>ŋD&Í)”>]ÉŨ§nX*Fē‘“EĮĨęø8-äŊžũ!‡0zöÃ!“Áà S8Įņôqž{+’ˆĶļë:ąNËĨĘæ˙øãŋés-NëSk ō°ÚéS˜Ļķf VIÂzNų¨š?U}ęSū{ŋ͗;8 ŨđsÛŊSŸūÆŖwČ!§_îĶŨõ_DÖÜVJ÷¨{K4_~ŸŊTū2In?q3ķRėŠ$ŲChxɀɜy€ešf͚ų*¸C BĮ¤M~,këã°"ņ"#äqŸ^ëĒWĸz°ū¤:_•eN"/õ2€s*x x`íÊŽŅ9€š,™ŋÁRŋž,?–+Œ ĻČ㠞ų)*ŋ,aæ;ú+Äļ´ōŦ.+úR–öĐ×Éô/M^yŌĢršøŠy2nújéĩqēÜ6´'ŖJhÃqWĄ•'†pBXQIįŠT}IrHŖCØläįiÔäŦ­>–<ŦWÖN՗XbU™øšÍ ŗ\‰ŲË\X>”‡ŽQya:e5]/6 Gëŗp#Ÿ6-ܯ ´q{;QsCĄˆŦ6úbØU—ģŽ,"hîũ÷PâΝīîkŌ(;Sē“V+Įē1´u|\øN´†€!P)@,pĖęĸ$xrח¤Š|õĩ~ ̟,žô˛ĖWܟS“¸‡qī§L8Ūd“MâsB˛{~8‡ gĸ9ãå—_öŸāĀbĮ¯ŧžb˜}Ãp˛úɧ\"ũS‘Į*œ–Įך¯<õSž$ũ’Ĩ×Ä9¤B‰ ¯ Ž‹ šũ`ė3S3­vļę}­:š^Ū0ßBKäĘ+OeYų€q9PáQļĩ#jjĐÕXĶÂsoF†°D­'ĐeSd“öųkMŠŋų†€!P7€¤č÷ŲĒĸEŠÎI‰îiĄ~‘ÎvšnĢ ËŊ,ķbÁQWōU~m”Wį:IÔxėeã%žßÆ>4ŦkáĶZ8˜ėŧî Ф™{k“æ8+dĖ˛âæ…įit÷Ëš2oōLųå“Q˛jö$9Áí‘ o^ÅÅÍ3 :‚sßEĢ*WĶæ$Ŧ•jąd‰ŅÜjâR'‰,*/*đ]7ž>mƒqÍ@´ŗuĀˍûx7f;Ņ'ÁuKXŒ!`Š!`sRj8Õæ\•9‡ÔIĸFgûåøB3¯Zķue]¯ŽÍƒÁt¯x¸‰˛IˇŖû%ž´¤U<Æ&ҍī؜TwG@eĪ!u–¨1$ ø™nRŦģCÅZļ>0VŒ ­‚VÖ0JCĀæ¤ŌĒŊé•9‡ÔiĸĻ]^™j憀!`Š `sR*(YE õi ķ CĀ0 CĀ0Ē#jUŗUb†€!`†@Ų0ĸVvĖŦ„!`†€!`U‚€ĩ*Ų*1 CĀ0 C ėTØË>úhŲkˇ†€!`†€!`Ô1Î:ëŦ kQ…5~Ø|īŊ÷Ž0ÅL!`†€!`5iĶĻųīlōÉ/žˇ‰ĪĪSō}<ßj-p? ͏ÜW¤ŗĨΊDĶd†€!`†€!PT QûōË/+° Ĩ‹ĒęúiË^WÖ6Tu}ëĶļdeס ÉäZ|õ#P•}›ŸŸīŦ~E´^eŠ_2M†!`‰¨rĸ6cÆ 9÷ÜséRæ¸ŧŧŧRËTD}Ç—c=VV­ZĩN}%Ĩ…™ˇÚj+ųņĮÃ(^Ö6Ŧo}ë( ĸ.`– YU…”6Ž“]•Ą"?ļxņbéÖ­›Lž}ú:ņ%E”&ŗ¤˛–f†@Y¨rĸv÷ŨwËE]Tæå‰ŧ˙ū ĶÂȊ¨ī€ &$$j%Ĩ…z\wŨu˛ų曇Q~-ģŦmXŸúÖĒŧ„@]ĀŦ„æYR%#Ęĩ™čz¨,ĩ6ŲdiĶĻtčĐA6ÜpÃx5ãÆ“Ã?\f͚%Æ “ŋūõ¯ņ4ĩ”õë×OVŽ\)Ö Édjēų†€!`TUJÔxĒ9r¤œp qũŋũö[Ųu×]Ĩ}ûö˛õÖ[Ë˙ū÷?Ÿvß}÷I÷îŨåųįŸ—=öØCvÛm7yá…|¤éÆo,?×_Ŋ?^ũõ¸L=‰Ö—››+Ŋ{÷–ž={ú'hH7đ|Đay‘—"¸™īŋ˙ū2iŌ$߲eKiŌ¤‰ŧķÎ;ū… ôyņÅKM#ÃčŅŖũ“<úfggû2ü+oJŌšÉęĶø+¯ŧŌÆíˇß^-§ÖVĖ.žøbķG rôŅGûđčÃX3wŲeiÚ´Šlģíļ˛īžûĘ/ŋüâĶF%ûíˇŸ0)3>;ė0_Úŋdc—rÉdŌŒë>}úHVV–`ÍÁŌsà 7”X]I×Ciã:™ž%ÉD™1cÆøkoã7ö:ŋōĘ+^Į’ę+m\ë8Œ^%ÕGZ2<ŊBĨüģ˙ūûũī¸ŪrË-ŌĒUĢxîĮ\öÜsOy˙ũ÷åŖ>’ĢŽē*žvæ™gĘ AƒdéŌĨrúé§ËÎ;īOã$™Ėĩ2YĀ0 Š@`ųōåąđXļlYĖMÖąųķįĮNģû×ØÎ—ũ;ķßcnŲ¯ÄÃŨčÜ %;7Åūõ¯Å3͛7/æ–bĪ>ûllõęÕą?ü0æžzcŽ@ø<}ûöqŧũöÛągžy&ÖŠS§ØĪ?˙sË1GŽbŽdÅyä|ōÉ'qšz­x7ÉÄēvíÛ}÷ŨcîæsKĖ=Yû"nbŠũôĶOąÂÂÂØ<;˙üķUTĖYžb;밃/ķōË/ĮētésDΧ—”F†+VÄš‹M™2%.o}ÚPžú¨ØŊ.s„7æ,sGHâúčImŌ~ŨtĶMcô!Ė7Ûl3ī3žWwÜq‡׎ÔĮÜ;ąĪ>ûĖįĨ_ŨŌ—?gŦtĐAūŧ¤ĨŨ’dR?ãzɒ%1đžæškbÎ URu>-Ųõ@b˛q]šžÉdrp-æ–ÚŊnāęHNlėØą^—dõĨ2Ž]ĨÕWž^Ąrüûá‡ü¸8ūøãã÷œPĖoŧkŅĸ…ī#î æ C ū"đĮøšnÄŊNoqÛ<ü=’{¸ŗŧû8øPiœ‰t¸ Ž…\æ*î…!'ã\ĸ•EԜõ æ, ~âÔŽ†|ABwÁÄ8p’wß}7ž|ÛmˇųIĀéÜšs<-z’¨>ÍãöĮÄ~ũõW Æ}&ĄË.ģ,æ,/žX9ĢS<-Ē˝wŪsOā>Ŋ¤40`Ā€ĩˆņåmCyës{cÎBéUbĸ…ø†ŽļcvĶM7Å.ŋürß$ÆÖ%—\âĪ_zé%OŒÂļ2 CbpÎzs6ƈwV”0kÂķŌÆni2éއ“O>9ĄüD‘Ņ~¯ō'×Ĩé™Læˆ#üøøį?˙ĶÃYcˇß~{\ĩDõ‘XÚ¸&Oôz(­žŌđDfycŨy•áŦß1géŒ}õÕWą-ļØ"öÛoŋi’ų†€!P¨NĸVeKŸO=õ” 2Dš7o7˛ØŽ]ģx˜Âá!KĸęØc¡LÔš AO×ņÕfŠîsãNN<ņDŲqĮũį]wŨå÷…eĸēŒ?>ž\RZĀ|öŲgûö%g‡z¨ßŗDúÚ=HFF†<ųä“2xđāĩpIH$3ģĨÉlÛļ­˙KÍŅũO‰ę͏hŋ‡×yĸãē4=)“H&û˛+lš×ƒååcŽ9†"q­OJך'ôK̝4ēSO=UœeIœÉ?ZÅ:á’Æõ:™‹#J̝$<“É,-Ū-…{âÉŪ;^ ‰~°€m%úIDATpė]¤Mæ CĒäîéáF‹E,tlĒæŠöœsΑœœá)+HøÔÎ;V.,@ŧ™ÅĻoulūeS67QžŒšŲâ’ÕĮDͤéŖ%ˇM(m´‘÷ˇÜrK¯ËĐĄCũ„ũˇŋũÍŋ|0qâDéŅŖ‡ˇX +„‘ĪŒ<ņÄ’, ]h7”×˙yA¯ģå#9äCHö˜ËŌ†ōÖöŧÁĻé}öŲGŽŊöZO8˙ī˙ūĪod¯ ˜'`î–0 zįöú~bė¸}lžČķ" ņ8ú† x‘dŅĸEū­d^:(ɕ6v“É|íĩ×ü8æ­A^Pa Ō/lrįaĻ4—čz(i\—Ļ'õ%’É5……UI¤[ú“mļŲFîšį)Š>Õ?ŲĩYŌõŦ>d&ÃSë+O[x!‰ˇ=9×QĘ#Ëʆ€!PY¤ųjt–ąŽ°såķKdԜBéĶĨ‘Ü}ęš×ڃėņĶožųf'RMäÍMnĐLNɜÛˇÖYäãÍDˇGm­Ĩ™hyˇ×J8Â%ÕTę‹ĘŅ0ēf͚yb¨qĄī6ú`ŖFÂh^RÚ:™ƒˆōļĄŧõUĮOëfÚ,eXĸŽ%QHsø‰ō°ėFŸc)…вZ—hėŽ¯ĖDõ§r=$*§q‰ôLE&˜aĄd9°,.ҏNĨ|ĸú*OtA..n/Z*ĒYC§`āҟŽRŸÚd?!Ĩų’āēøŠy2nújéĩqēÜ6´7:1˙Dˇ%e¸'ßëĸ‚ kLjŽĪ‘+b˛aëLŲŋīšŊeŅü„gĪžŊÎū͇ňĪJ”äĸ“¯ņķ„Í2•{[Ō[Õ•§QXŠB—J}aūđ=Jš¨éŽDޤ´Dų5Žŧm(o}Zoč×Ė´=|r%‘cđ‡„^ķ0~HƒŒčoļiZ*~tėRf}eFëMõzˆ– ÃQ=S• ‰M6æCųŅķDã:š'Q8Q}§ÖKģ°ŦbI7g†@20âpO æ æŽXÁŸØ6R’aJëxoĖ*™ˇŦ@ÚˇH“Á}šÄI_(ŧ‰‡JŠFŸ Î,Gā’MŧÕ¨žU]Į`“?û˛’9÷I¤ÉĘŦO|e\•!s}ÚXešŅōM=s†€!`ÔTj,Qc?‡9C :āMĮpŸ[učÖY×CeČ uļsCĀ0 õG JŪú\5M‚!`†€!`õ#jõ¯Ī­Å†€!`†€!PK0ĸVK:ĘÔ4 CĀ0 ú‡€ĩú×įÖbCĀ0 C%QĢ%ej†€!`†@ũCˆZũëską!`†€!`ÔŒ¨Õ’Ž25 CĀ0 C ū!`D­ūõšĩØ0 CĀ0j FÔjIG™š†€!`†€!P˙0ĸV˙úÜZl†€!`ĩ#jĩ¤ŖLMCĀ0 CQĢ}n-6 CĀ0 Z‚€ĩZŌQĻĻ!`†€!`Ô?Œ¨Õŋ>ˇ†€!`†@-AˆZ-é(SĶ0 CĀ0ęFÔę_Ÿ[‹ CĀ0 C – `D­–t”Ši†€!`õ#jõ¯Ī­Å†€!`†€!PK0ĸVK:ĘÔ4 CĀ0 ú‡€ĩú×įÖbCĀ0 C%QĢ%ej†€!`†@ũCˆZũëską!`†€!`ÔŒ¨Õ’Ž25 CĀ0 C ū!`D­ūõšĩØ0 CĀ0j FÔjIG™š†€!`†€!P˙0ĸV˙úÜZl†€!`ĩ#jĩ¤ŖLMCĀ0 CQĢ}n-6 CĀ0 Z‚€ĩZŌQĻĻ!`†€!`Ô?Œ¨Õŋ>ˇ†€!`†@-AˆZ-é(SĶ0 CĀ0ęFÔę_Ÿ[‹ CĀ0 C – `D­–t”Ši†€!`õ#jõ¯Ī­Å†€!`†€!PK0ĸVK:ĘÔ4 CĀ0 ú‡€ĩú×įÖbCĀ0 C%QĢ%ej†€!`†@ũCˆZũëską!`†€!`ÔŒ¨Õ’Ž25 CĀ0 C ū!`D­ūõšĩØ0 CĀ0j FÔjIG™š†€!`†€!P˙0ĸV˙úÜZl†€!`ĩ#jĩ¤ŖLMCĀ0 CQĢ}n-6 CĀ0 Z‚€ĩZŌQĻĻ!`†€!`Ô?Œ¨Õŋ>ˇ†€!`†@-AˆZ-é(SĶ0 CĀ0ęFÔę_Ÿ[‹ CĀ0 C – `D­–t”Ši†€!`õ#jõ¯Ī­Å†€!`†€!PK0ĸVK:ĘÔ4 CĀ0 ú‡€ĩú×įÖbCĀ0 C%QĢ%ej†€!`†@ũCˆZũëską!`†€!`ÔŒ¨Õ’Ž25 CĀ0 C ū!Y‘Mūøã+RœÉ2 CĀ0 C ^#PaDm§vĒ×@Zã CĀ0 ChūŋŊķ€ąĒJãøĮ UD,¨ ŠF4˛‚ŠŨŦÂZĸ˛Ģ&ŽŊŘHlQŖŽ=ÆXb‰ŊÄ{×XÖ^0jėŲUcĮ‚Ĩ( }ŋķø†oۜ7oĐ730ķ?ɛ{îwžsÎ=ŋ{÷ĪwÎŊOSŸÕ&ĒöD@D@D@D J$ÔĒR͈€ˆ€ˆ€ˆ@ĩ H¨U›¨Ú*PĢH5#" " " Õ& ĄVmĸjOD@D@D@ĒD@B­J Ռˆ€ˆ€ˆ€T›€„Zĩ‰Ē=¨ ĩ*T3" " " "Pm-záí¤I“ėâ‹o¯vßjOD@D@D@:%Iõ;Æ=°âØ[$Ôúõëgcļc]ētiÔāĸE‹šØ9vÜĮˇą{ĩ¯MũĨôŦ7Ũo‘PĢ­­ĩŪŊ{7­,-šč‚{“ŦęWŊM ƒø‰_é¤ÂåQ1ĢëG×ŽŸÆˆŠ_šā īž?äûƒļjIjĄPĢąVX!ĩ/HĪûĪû6ÚĘåsž9›ę/áYäXåląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:ž¯­]PČ.bˇŲÔ"ĄVSSk={öL͜Ĩ@ëŽ$ŊŒ­'Ę|ßķŅ_õÅ/^~čú)ˆ<<yéûŖīOŧüŅ÷Gß˙ˇA÷ßĸņīFüž8#ļíĄ_jjfzFŦ5ŸZ$ÔhÂįÛhķ.ŧˎĨöŌ:åüĘŲUÉy(e÷ůņFäQ./~KŽ­Č(ri.ËT_×׃§x=”ËãëežUũ"ČŖ\^ü–˙ëĮ¯÷ÜV¯įČQ‘MD@D@D@–j%'áŊ÷Ūŗ[nšÅęëëKJÚnwΜ9Æ+QfĪžũ§:ũíˇßŒņL:õOĩĶ‘+˙đÉŅüųķ—z˜âģÔČTAD@D`) ´xęs)Û­š;ķÆģîēkC{ƒ ˛íļÛÎ=ôĐ[53'N´xĀöÚk¯´.ļL=zô¨f7ŲļĻOŸn×^{­ŊüōËÖĩkW›7ožmšå–vĖ1ĮØĘ+¯œ­SjD`˛žôå—_Úi§–>Ûoŋ}Šë2ąŌI'ŲĮÜp,ĢŽēĒ9Ō;ė0ëÛˇoƒŊĩ2Ī?˙ŧŨ}÷ŨvīŊ÷ÚJ+­Tą›åoÅÉAD@D`™&°\DÔjjjl=ö°ë¯ŋŪÖ^{mģīžûė̝žj°ô×ėŋ˙ūvŲe—ĩJ_ĨžūųöÆoØE]dĪ=÷œ]yå•6aÂ;įœslá…ĨîMö/ŧđÂ$pŧ`ã7ļG}ÔļŲf7-s[x÷īßßîŋ˙~ģá†lįw履~ÚÎ<ķˆ‡PZķ 9ŋ0ZqÅ+vŗ<ō­8(9ˆ€ˆ€,Ķ–ųˆšĶ#ĸĩÎ:ë¤Ķ›oži3fĖHEl¯žúj{įwŦOŸ>vÄG˜G;܄™F$"uķÍ7'vÆg¤¨Ķ駟nŋüō‹xâ‰ļ÷Ū{'1čũąŊíļÛlÚ´iöÖ[oŲŅGúaē õá‡Ļļ<đĀ&õb-ÍUúčŖlÛmˇĩM6Ų$Eņ6Ø`ƒ4„ËÛoŋmŖFJBŒˆâäɓ“ˆ=z´!6¨Č# G´ņŧķÎ3ŽŅ7nܸT÷ÛoŋĩkŽšÆ>ûėŗÄj—]vąũöÛĪK\pAō§DĶZk­e§žzĒņ˛ãÖŗŗĄ„­ĄC‡Ú×_m¯ŧōJb "Œœ‹_ũ5ą! Į{ũ>ųäģõÖ[íĶO?Mûgu–­ŋūú6sæLģéĻ›ĸĄ›ožyŠ*>üđÃöØcŲ`wŪy§p öÅ_$į”WĐÉkkžÎA[ŽM`ÖŦYÖĢW¯ĨärQcDß˙ŊŨsĪ=v×]wŲđáÍh‰/įÆo´­ˇŪÚ.ŋüō´žŒôu×]gƒN>ˆ3”qÃ÷u[L­ūôĶOŲ5iûėŗOLÅí"=ūøãöę̝ÚUW]•„ß[l‘ėöâ„ãÛlŗÍĸgDŅØĮîDŽõЧžJö1cÆâ!3bĈÄąƒÕW_=‰6üįΝ›ōgŸ}vĻD&÷ÜsOģãŽ;ėÉ'ŸL‡ĸw—}÷Ũ71Ĩ]Rk95žøįņ"4á͘}ŪĨ—^š+į˜5w<ōHĒ…xûųįŸíĄ‡2|3‰écÄ-‚•õ†ˆp_įwđÁۚkŽŲ`ķˆĨ—ÃŊ­øĻƒĶM€{KĢ–6-7B¨ ĸAA$Œ( éĨ—^J‘'žx"•ą†ˆČ8nÜ/žøĸ]qōĻļ|H1Ÿ ᏯõęŪŊ{CũÁáGŽáŨwßĩ+˙NWh˛lĄBōq•s¤oĸhģíļ›~øái-ĮQWW—>Ô' æo<öq"‰Â-ZmĩÕlėØąÖ­[7#:éi•UVIQ4ĻŠ7eʔTÔZcö~Kˇˆ5įđõ×_OB“õ{œū'Âĩ@"Âúã?ĻhåūRf"‹ëŽģnbÄ´ę°aÒ?câCäm§v˛49˙”ˇ5ßtpú#" "Đa 0̓HãžŊ´išjD7ˆ!@|Í↩Kĸ!HkõÖ[o=ÛtĶM“įŽéŨ­ļÚ*E 1˛.}Ϗ9įpášĀvLQĶ6ĶŖ1•hîĶÖ|Ŋ_mE@D@:ÖxG‘†6ņ´pņ8-ž ts“mŗôéQTjĶf-n­Iõļ5pƒåĩĪ>ûlz”ĩjŧēÁákЈŧđÄ ĶZLO"°¸‰ī°ÃéæOģīž{Zŧē‚0¤G­rŖakžXĶÅZ(Ö>1Į´(‚…úÕHOw5<ų䓍éVƅ9ūøãuÁ˜Î=÷Ü$Fˆ"˛žŠÄ”%>°ūŠrĻ6=-Ŗ}ÖÚņ#^{âëˇÜ/ˇm­1{_<°qČ!‡¤ķDԌXđO$ I””sĀCœK„)Ķ—ˆlĻšۆnhœ+ŌqĮ—Öō@ū< ĀôwKS[ķméqÉOD@D`ų!@ā„5Õč ‚žFûięĖĸļęߧؘ™u)DWŠ0 r#ŋuü {øyVSĐkwŒëk=ëÚ'ÄÆē$nž|HŦ]"rÂ/ĸ†2ö‰Ŧ!p°ã÷ûīŋ§97lՓČûô~Üč)cˈ>ŽzņåÃ>Ķi”Ņ7íōž/ę•N­ĨNūāŽ…ã ÂÄ;Åč>8N>ŦMãU%ˆ7Ž 6Œ—ÄqÁ‚ˆc'ąĨœsĘú5ÚįâáŠIö õœ)õ"ķÖ3ũ—äcäXũ\c§œãf}"ëĐ8NŽ›ąąÅ—ãuN”ãĪõ@[ŒŒƒŸ[ڎļöâËq(‰€ˆ€tĨ" Í@°ĮE#ũוĶm^aõÕ^›wŗC˙Ö7i îwÜÃbj6ĸļÁE•Gxn¤ų6jŨ%šØHkį㍕ž¸ĮäB…›süEō š›5Ožw1€0ō„ÍíØŧ."äe.’ąŠ\81‰ôąÅ.Ø[,ĮŽÍÅcd‡rÄQ3mĮv؏õZsĖĨũŌwiâp.f~,øøuã@ģ\ėœ7īƒēą>mälm͗ãPčZ"ŌžúšX,Kô) ŗRæ4˛B͝‡ ęj=ēÍąŲ…@Ö Īm7ĄæÛ™ļˆ…ŌÄyá úD”ĒO@|ĢĪT-Š€ˆ@g"Ā˝ ķČY.’į&gø˜ą9$+Ű•åĻÕŗŽÆļZTzo9ß&~ˇ$ōÔЂ2mJ€Š]mH›vÜI:ßNrĸ5L¨2DYKDÚSØK˙+ ĩ‘1°BĶéÎxhYĄ†HķĪØĩÖŊk1ēsõŗõ6sNĶHOlPųÖ%‹´ĩnĢuņí\į[Ŗj(œ•î{h¨ •f* +ŗm—áE‘æšËũâ6û07+Öą^ŠĩAOPoˇŋ^ÔtƒúÕØŋ˙ŅËÖčW\S^D@D@D@D )f% xũ4ŊøÛŨ˙ąĐöŲ˛gš%cmš?H€h‹)+Ôp@¨ąĐšۈĩk_˜oo}]g= K¤ū6ŦÎū>ŧΆŦ"Á*/" " " ¨Ÿģ(=ŒÉ:–y5xžŨ-‰4”cí9BTQ¨áDD'y2¨š‹ĩGŪ[`˙™ĀBö%j¯[Ą]ŪŌ¯w—ôę+‰€ˆ€ˆ€ˆ@g&Ā;h'O[hūb[X°”lĪŋÎąŅumiŧ‰7đĘŦR‘F&5Œ5Ÿū$ĒÆë k|Ũ˙´ĢMœÜ­ĐųÁF=%Æē×.´‘kĪŗ‡ÍŗÕû×Ĩ×MIC¤y4­Ü:ĩ˛Ī„Ru‡Ę#ēÆņļҚfë œkS~̎˙ūØÕ~ŲÅĻÖרŒŲ5TcãCԞˆ€ˆ€ˆ€t„ązÕ-˛}Ø:ØĐ ­w^š_—ÄkŌ\ •‹¤9ОB ‡(ÖiŅļjíŧÂ#Ĩ ŽøãÖ^žœôGD@D@D@:1ąöŦļļøË8ˆ3DaūAs˜˛BÆ^Q¨ŅˆīĶ0ą†-FÛđ‘`ƒ‚’ˆ€ˆ€ˆ@g$€V"EÍäē q†~ĘEĶŧ^)ŗŦPķJÅZėÔZIB­ŠöE@D@D@:3ô’k&_FVŒŦÕ6<8§<ˉ4–jR1Š5ī”Î\ ųÚ5üMƒš’ˆ€ˆ€ˆ@g&€^ō‚Ŧôãe0"ß\jV¨y.Öŧa:taˇÍu¤2č,\3åļΠ’HïĸPÃÉŠ‚ŧ§˜oÎæeڊ€ˆ€ˆ€ˆ@G#āzÉĮåûž-ĩû~sÛ 5o ´ŖJv/×VD@D@D@:3rĒ“Ĩjąą?ÚalCyōŠŋ´^ž\%" " " " íD@B­ĀĢ[¨D@B­!•‹€ˆ€ˆ€ˆ@;Pk'đęVD@D@D@*PĢDHå" " " "ĐN$ÔÚ ŧēJ$Ô*Ršˆ€ˆ€ˆ€´ ĩv¯nE@D@D@D ˙!=~=ļwIENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Properties.workflow/Contents/document.wflow000066400000000000000000000160621445560650400322130ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx properties "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.000000:353.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 446.000000, NO 0.000000, 447.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 446.000000, NO 164.000000, 0.000000, 217.000000, 446.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 599.000000, NO 382.000000, 0.000000, 618.000000, 599.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 618.000000, 408.000000, NO 0.000000, 418.000000, 618.000000, 162.000000, NO windowFrame {{167, 102}, {999, 676}} workflowViewScrollPosition {{0, 0}, {618, 408}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Rename.workflow/000077500000000000000000000000001445560650400245665ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Rename.workflow/Contents/000077500000000000000000000000001445560650400263635ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Rename.workflow/Contents/Info.plist000066400000000000000000000011671445560650400303400ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Rename NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Rename.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400302645ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Rename.workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001105411445560650400327170ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëUiCCPICC ProfilexÕYy8U]Û_ûĖŽs Į<ķ,ķ˜yžįšpĖķŒáˆ‚^'øÛ9ūeŗæíŖ÷—đ 00ūmƒ DīöÅĪ9_P˜éîāžŠĀ"á:H3  ôūĒ%/ ĀšXX‚ĀŒCāap›0“˙˛Ķũ‰Á¯v~pģ÷H^°mĖß}ūî ÷ųĮgđ†ņ9îcWˇ;ē(÷€Ôúücąëī×h¤kĨßIoũJ%‹R@é ÔQ(@F1ŖØ$JĨŒŌFiĸÔ` 0¯aĪ~Ƹë?¤Ņ7ölXŧǃ?ŦŨũīž´Āá—uĀßŋ˙c `hšeųĪˆö9ŋ膅ĮGøųG“ĩá7×G‚lę%%A–•–‘ŲU˙ŋ)ģkÖīÁŽÚüZ‹ æádūj¨-€E˙# ˜ öŧ˙Č:āđ fÔ+&2öˇ?Ôî ¯„´p„˛nĀDāį, áĩQ č` ė€3pƒãĮŽÁHA HŲā$8Š@)¸Ē@h- tƒ{`Œ€ 0fÁ°VĀ:؄  !ˆ â!qHR†4 }Č ˛œ!Č …b Dč” åAEPT ]‡Ú nč4 MBsĐ;č ôDŒ.„bBĄ0EØ!ö#üˆDââ,ĸqҌčF &ŗˆ%ÄW$@R#™‘ŧHI¤2Ri‰tAú"#‘‡YČd9˛ŲŽėGŽ!g‘ËČī( ŠEFIÂqj„˛GyĄ"P‡P9¨"TĒՋCÍĄVP?ŅD4'Z­Š6F;ĄũĐqčttú ē Ũ‡ž@ŋA¯c0fŒ0F c„qÆbbr0%˜Lf3ųŠÅbŲ°âXuŦ%–‚ÆĻcĪa¯bī`cß`7pÔ8œ,Îį‚ ÅĨâ p5¸NÜcÜ[Ü&• •*•%•7Uü4~•šššZ…Úš:€ú0õYękÔ÷Šį¨ŋH1‚.a!†p‚PIč"LV‰DĸQ‹čBŒ&ž Vī_7hh¤hŒiŧi’iŠišiĶ|¤Ĩĸ¤ÕĻuŖM - ŊA;LģLGE'D§KGĄ;DWL×F÷”î+=Ŋ Ŋ%}}} ũúE–$DŌ'y“ŌH—HwIķ H~]/†#  } o1ŒÂŒÆŒŒŲŒuŒCŒ+L$&y&ĻLÅLˇ™f™‘ĖBĖÆĖÁĖšĖĖO˜°pąhŗø°d˛ÔŗÆžĮÖaŸCĩÃ7G=Į<ĮY§=NINÎėÎέ.X—+._]õ]ΏžŲ§°/}ߓũÂûėāÆîėv۝֝â~ÃíáčQãąEऔSžz{ž÷\ņŌõ*ôZōÖōÎ÷~įŖî“įķÖWŨ7ĪwŅOŨī´ß;M˙˙åŨ€ĸ€ĪFĨß‚,ƒ*ƒv‚ƒBp!!mĄ¤Đ ĐŪ0î°aŖáâáéáŗĒg"V"M#¯DAQûŖZŖáäp0F$æhĖ\ŦFlqėFœC܍ôB ƋÅgÆŋM0H¸|uĐë`O"obJâ\’vRŲ!čįĄždūä´ä7‡ WĨāS‚RĨJ§æĨŽq<ŌžÆ•v8mū¨áŅÚtšôČô§jĨĮPĮŽ eĘežËü™åõ0[:ģ {+Į+įáq™ãgīœđ=1”Ģ˜{á$ædčÉ'§4OUåŅį%ä͟6?ŨœOÎĪĘ_;ã~æA|Ai!ž0ĻpöŦŲŲÖsįNžÛ*ō/š(Ö)n8Īy>ķüˇī’Į´.ԗr•f—ū¸pņY™aYsšPyÁ%ĖĨØK ũ—•/W_aŋ’}eģ2´rļĘĻǎZŠē熺&ˇQSûîęžĢ#uzu­õ’õe Ė Ų×Āĩ˜kī¯{\ŌhÚØsCųFũMÁ›į›š˛šĄæøæ•˙–ŲVįÖŅ6“ļžvĩöĻ[Rˇ*;x;Šo3ŨÎíÄwĻuîÜI¸ķĩ+ŧkšÛ¯{žĮŊgęŽĶŨņ^ëŪĄ>Ķžû÷ îŨí×îŋs_ũ~ĮÕm•ļ (4* 6=RxÔ4¤8Ô<Ŧ4Ü:ĸ2Ō>ēw´ķąæãî1Ŋą{ãÆãŖOėŸ<{ēīéė3īg‹“Á“ŸŸĮ>ߜ:<žÎzA÷ĸā%įËōŅ™†YÅŲÛszsƒ¯l_MÍ{Í/ŊŽzŊõ&m¸Pđ–įmõĸėbĮ;ƒw#ī]ßŋY _Ú\N˙@˙áüG‘7?i}\qZyķ9ōķǜUļÕĘ5ųĩž¯V__އŦo~ËÚ`Û¨úŽüŊ˙‡ãˇ›q[Ø­ŗÛĸÛí?MNī„ėė„S")ŋr$\#|}øR sg˜;Œ€īúÍ)~YĀt‚m`Œ„ķ_!`į§×Ā7HJƒ&jˆjxŊ€AuŖŨ0Ķ‚=„ŗ âĸÚĀĪP?& Ō<ĸ§["á$͙R˜¯˛ŧ`ceˇāČæâĻį1'įđNđķ ø Ö}Qģ+AÔ—JÜĶ%Ŋ-k('Uგ ˛ĩJ˛jŊڜ:Ŗ†ŧĻ•V’vĩN‡îŪŠĩ!‹¯ą¤‰’ŠŽ™ĩšŗ…ŸeĒÕ9ë:x%xiˇâ™D•]l\#ö%ī?áVåŪé1J™õüâō!ų øÉûëX:y„Ä…&†e„gEäEæFŒ>“›WxātüɄôƒÉ‰1I҇“)‡R SÕČ§IåN§MßÉX=ļœ95Ũ–SwŧųÄėI–S†yņ§KōĪėJŸu;—VTWüĒ„xAŽÔãbNYSųdâ˛ČķʘĒãÕ 5CĩęhëeLŽy^oĖŊQuŗ¯i´yąågm;ī-éÛæwŧģÂēôš›×{ž¯ö^KĪũ;†N , ž~46ty8fD”4:ũ¸aėā¸ÁibæIũ̓ĪL&Ų&_?oĘ˜ļ{!đbķe˙Ė…Ųˆ9ŊW,¯>Í÷ž.}“°`˙Vf‘~ņĮģ'ī;–Ē—OHųû)hÅ˙sĀ— Õøĩœ¯ÕëĪ7ž{ūŨ ūéļŗŗ'0{f‚`/p‡@5˜‚3;Kč4…FœBü@† ßŖbŅt5Æ‹Įā Š‚ņ&Ô{"DfZ.: z5’-CcS%ķ}–u62ģGgW3÷ 2¯Ÿ+Ļ@›āŧ0^DZÔ\,Dü´Ä-ÉįR_ĨeTdåÂå‹šģ•ž)oŠ2¨ņī•S7ŌđԌƒŖáŒN™n•Ū ũ;ƒ†SF‹ÆĢ&ßMˇĖļ-P–´VŦÖÜ6ŧļ"vōöĘŠŽN&ÎĻ.&Žvû÷[šŲ¸ÛxØQ\=ŧėŊ},}ÍüLüu4Ղä‚ÅBøC9ØÃIt‘Ø(DÔVôZĖĮØˇq3&ã'<FĖĪ2ČöÉÉ>~íÄpî‡Sø<…ĶųQgŠ ē įĪĄŠÄ‹-ÎĮ””^č/ũXÆXŽrÉ­"įr˕é*DĩTGmÎÕļē…ēk×Ŗ/ܸųŖyO‹_kA[ī-¨Cęv@g靑nLöŨ”ŪŽžĩ~ūûĘö>ÔPT|¤8¤8Ŧ8"3*öX|Lxœ{‚ũ ãSÂ3ĒIhrûų§Š÷Ķī^ŧ{97ķfvfnîÕėü‹×ķo>,lŧŨy‡{Īž$ĩŦũÁöcø§Ŧ•ĒĪ_>¯ņ|5[OøVˇąđƒs˙Véöâß_ķô0ߒæ0ˎÁGˆr…ķö„â b )ƒĖGnŖBP¯ŅžčEL8f›‹Æ=  Åŗā{¨Ŗ „%b=M4­œGŽŅWŦ…™ Ļ9æ>–JÖ ļ@v;]N!.,×:÷žAr#o1_:¨€ĩ ĻŸ0ZxCdB´YŦDü°„줁YjkĪ3éz™#˛.rbōXų§ W(™+ +ī¨L¨VŠ%ėĩP×@iLi^Ķ:ĻíŖŖ¤K¯ģĸ7¨Ų ŅĐÕHŘɸ“É}Ķ2ŗxs[ KŦå+Ģë›h[c;Aģûg×3ŧœ]č\\Û÷åî÷sĶvgw˙čŅM)ô ķŌ÷æô^õšī[ėė¯ĀīõŊAį‚cC BšC×á}Ŋ>âh¤W”f4o ˆ™í‰+?ī P,‘>q#éåĄŪäēÃįSޤFqKŗ>Ē‘.™Á{Œ!ų#ëSö|ÎŗãŖpüôŸė<Ք×pē1ŋáĖՂŠÂËg/ž+-*/.>_^rņBeéPĒ\ūĨâÄåÎ+KUôÕ*5^ĩĮ¯ļ×-6°^3ųCãMÄf–ČÖúļOˇd;Üžs‡ÔÜ}ë.worßĮ~īûĶĻæš÷8f\˙‰ø3†į‚͆/“g?ΟX}—÷Áúķđ†Ķîü˙>[ÚŨ0ŠœuĀ™ kCrö Ô +"v*!Å ¯=ŌÉũ{˙`ĒđʑJ`ž8Ą ˜†Cų0ߛA`R{Dâ2bņɏ´F&!k“(|‚ā3ą!4­ŒA_BOa˜0V˜lL?‡5ÄÅöãˆ8\nžJ’*šĒĪ„÷Æß ÆRģSˇÂĖ'„pŸ(HĖ&ŽŌ8Ō´ÃlĻ„Ž@wn…>”ū)„´ÂÍđņé$3 s‹K;Ģ)ë [,;žŊ‚C›c’3œ‹ĢÛ™{‹§‚lIūÉ[ÃˇŸŸÄß'įú߄ڄ“E DŠE'Å*Äã%L$E¤ĐR3{ú¤Ģd˛dãä|ä÷)Ø*Z*é+¨ĢZ¨yė PĶHÕ,ĶjĶžÖų¨GŌW1đ3Ė3Ē1žlrŌ4Å,Á<Ü"Ö2Â*ÂÚĮ&Ô6Ė.Ų>Įá¸cĄSŊsË¨ëž7nwuGJĒgš×¤¯ŒŸˇQĀXÖ 9:ÎŲõ3Æ#ļų1>4a$Q!éR2ũáC);G‚Ķ>¤‡d,gúg}Ę ?ž‘›vJ$¯1ßôĖDáĄs†Åv%ÁĨGËZ. _AU)×D\Ŋ\?í†oĶ…–ˇí{;ĸ:‡ģ‰w)}-÷Ą‡ÎƒĨCKŖęc™ˇž‘ž[O§ŧėũ2ĪōÆč­ÍģØĨC’>Å|vYåY[X?ˇ!ņŊr“jËfÛíįá_ë‡ |žUúĀgˆ2†ĸĄRč!´Ž #Ė`_‰G"‘˛H 2Ų3rI”ĒõE렓ĐčL<æ6`õ°™ØĮ8Nœ?Ž•ŠŠĘ…Ē–ę'Ūæž>ÔŨAB áŅ”ØNCĻÉ Y§  }AgM×G¯J›¤@jbPcčf4bereZ`ŽaÁ˛\`Uf}ÂÎNÍ^ÃaÎąÆYÄĨÁĩÄ}Į”gƒ|7‡oŠŋLĀSPXpYčšđaKQ.ŅobCâW$ŽIúJf—ÁČŦÉÎË=–ŋĢĐĨxS NCUUÛÔ:÷ŪS‡YŌ{m”Ž°ž†ū>ƒÃBŖ:ãF“ĶZŗķ6‹~ËQ̧Ö36Ÿí {nIGe'{įh—L×ō}wöĪšc<¸)Ļž^ĮŊoøLûaũ|Īõ  ķ /‰xĸÕbbc¯Į}‰WNˆ8X—øífrúáTâ‹´˛Ŗ_2¤Žee>ÍæÎ‰<>K>uĒį4mžį™žBŪŗEEZÅK%EĨîeLåc9WĖĢĒßÖ6Ôå4x\WēÁys­yēĩ­ũfGIgJ—wkīŪ{ō÷ɉ6†gFûƚ'ĒžfOO™ŧИažũōjüuŨBęĸÃ{îĨĨˇ>e|6_ĨY{¸~fÃüqŗc;ô×ü̧HM` ’ƒ" Fh Ą€8€¸D ‘Į‘OP<¨`T+ƒvDWŖ71˜Ë˜ŦöŽ…{L%OU‚Įâ#áŦŌŽē— Nh%JoĐČĶ´ĐęŌĐšŅ­Ōg‘$Hƒ ąŒŦŒ™’˜Ĩ™įX YmØŲž˛ŸápæäįüÂÕÎ}ŠĮ‹,ĮKÍģĖwŋB C0LČUØLDCTJL\œO‚_’[Jd¤´’Œ‘ŦĢ\˜|ŽBĨâ°Ō7UCĩ¨Ŋuę šÜZû´‹ufô$ô“ ƍ؍ŖMÆĖÍOX,[ŲX_ĩeŗK˛_t4vjsásÍۏsKp_Ĩøz>÷ļõöŗđŋ¨ÔĸÚŽŅī ũąqcņî īã“6’3R8RĶ gxûžu>Göøxnä)B^{žÍ™íÂķįHEąÅS%Vē/*–U_âŽ(ŋ"TYį 7Ž*Õu4h]ëk4ž1×ŲŧۚĐļ}ëômÁÎĒ.ąîĢwĨzîI÷_}@ķ0gúQäĐüˆõčĩ1šņā‰OŸž|2Å:íôâė˧ŗLs6¯2æë_ß}3ĩ°ŗČôŽ˙=ßī2ĪŽlˇ?Ŋ\éü\ōÅUfuuíúאuōúġ˜ ÂFÅwųīw~˜ūx¸Š˛YĩŞ•¸u›iÛsģ~{ķ§áĪ“?'wøw‚wšwį?ĘWNvw÷A>~|šŗŗ*Ÿ_æ°}jggŗ|ggûL2āo ]ÁŋŋWėcā3÷ķ™ģčîõĒŨÛŋ•˙A4zXąî8” IDATxėœUÅõĮģôŽvEETTėÅŪ{7–Xb‰%vÍ?1šÄ’b{Ilą÷‚Ŋ"bƂ iģ°åũį;Ëy\.īí>–ŨĮ˛üf?wįÎĖ™33ŋ;÷Îīž™š¯ÅčŅŖ3&'„€B@!Đ$(i’ĩRĨ„€B@! ""kęB@! „€hˆŦ5á‹ŖĒ ! „€B@dM}@! „€M‘ĩ&|qT5! „€B@ˆŦŠ! „€B  # ˛Ö„/ŽĒ&„€B@‘5õ! „€B@4aD֚đÅQՄ€B@!ĐR!Đxd2ĢŽŽļožųÆ~øá›2eŠĩjÕʈįĀĩhŅ"ú /žxÜ~eŠ•–.Ø{o‹ĐÔî=ÛŲÖ—ŗOčmmÛ/Ä@#üSÔũļ°Ī›ÅŠŋ7Â-´ČTļĐĪM-2ėUp3F‰DmđāÁÖĻMÛyį­uë֑¤•––6ãÖ7īĻqmũúâūl’­Ōŗ“•Ō ī˙#ĪÔppƒ˜áBސĪŦ*üĢŦĘØØ§ŲƒwąÉ?Lŗ?]ģič#5īÎ>˜Öäj˜˙^ßBûŖËį+ôt=Ķá|yŋx!Āĩöū€ŋ8ô÷Å áÂjģ`¯ƒ…é””XĸH>؆-kģîēkÖĸƀY3°× ę r ĪÅbqÁƒëĖĩ7ÛŦŦÚlfU82%63ĩ˛p”ļÆAx&~H›ü˛ę’^bí—ílžļšMíÜÖø÷đyĆŧęĶKKJŦ$yĖąūrm^|á9ģãŽ;˛d8äņũPž‹˜4<—ūې÷NSŌĨiĐĻt5T—fƒļĘĘJƒŦ­ŋūúVUU÷ĒĒĘ8"Ã\ūâ…×Đ¯/×uԌŒMžYi-"šŠ×´†¸`KÃÎöĘŗ˙ŗmwÚ3†Â%/ŦkÁÂü˛ŠÖ§>öÄ-oÚĄĮöą–-[Æ>ŅĐ7‚סŽūHš•öÃč Á ÜÆĒŠpŦšBVj3fLˇgŸ}Ū<øP7nBčĮ˜C{ĒĒ­k×.a:¸ÆbŦ~Ũ|îëÅąŋĶ››Yk€+úķĪ?ÛĖ™3mšå–kmRą 0;Ö~øa;餓bv‹Æt”ųĶO?Ų#<’ŗLŌ+**ĸåĨgĪž¸UÅĸ6ģbv°˛ĩŽƒ2ÂiĶĻŲ}÷ŨgÆ ŗã?ŪÖ]wŨl.ģ랍ŋK—.Y‚įíōą1ÃĩÕË íÄáSŸd}“õ3fŒũį?˙ąĶN;-ʓ–L'rq ĶVpŒs§Udlæė`Z ķ%¨eÂŧ§wŋOŪlŸuĸũéĻnÖŖ­"NA2’ ŠĀØf…ŧ]ztļãKĸ>Č84´ĢĢ?ļlŲ*‹˙ÔŠĶėŊ¯ĘlŨ~+ŲĖō2kŲĒUĖ.ŗļíÛÛK/>g‡yŒ Ø`]›:ŖÂf•WZ‡ííŗĪ>‹D­}ûvŲĒ'û‘ {}Ņņæ›oÚøņãm¯Ŋöš§…Õ¯ü5œqŽĮâØßkZĐŧūk´דÎëĮ¯ũk;ôĐCã ;pāĀl<é ę\'ūŅG7[P]%īõÁ_c5lÔ¨QŲ67V™ųôz]H7nœŨyįYŅdZ6˛–ßB\R/ƒFēLt¸ĖŒ3â9֗ĘƊ9GĨUËEU o ö”{Ë-ˇØG}¯9kÛ:wîlåeåŅwŨu×ÅM ÕÁr|ÖBœ“?ú ÎW?HŖ—įõ‰í˜S~˛žÉúAÖūõ¯eë›Ôīú’ō´ˇŠ†i/ײVV™ąōp=gUVÛĖ@žĘƒOÜÔåvÃåÅnuãڔée63Ä#3ŗÂ‚œYā;6=ĕvngͧOĪöd_ôū4tčPÛlŗÍ˛2Äâ<mũŅņsŽKė›q-løč {ōņĮė‡ ­ėFXŲ”Ÿl­uÖĩÁo~bīŊ;ÄÚ´m,„Ą-چ|sû§__t-ĩÔRļÎÚëD ķl`ˇŪzĢ}øá‡ļÎ:ëIJb? øåģŪÉô÷Ū{Īž~úiK××Íu?,Éú‹Ũß éĶKĸŒ,k xՓČwß}מøâ‹0-đlÔRVV66dy;ŠûĮ?ū×8yŪ…Ņå:ÖOļ]<8;uę”UÛTęX(æŪž#FØ~ûíoL!:<Žv3đĖž=;NkÅÁ&„Ã(xâ+Æ#ī̝Ŋf‡v˜õë×/Æ ˙ęĢ0ø1UĶ+Cۊ@ö˛uÂ*%kū1d7d˜Š/×Gũ^ õ;lNũ¨CE )ŦÁqįå#ˑŽ/úĀ€4Ú’Տ>ΟÖ×TÃU W‡kB›hOyek›Ŧd-´fuI˜"­ Sžg¸Ũƍi­Û´ ū({â[mˇÃNą Hk˜: Įˊj̍kšÚĩ˛YŗfE’ŊÎ0sG˙xūųį=}Ō“ōķ$&ĩõGÚ@DdgVčŸC?›,Ā?Ûė“íß°VKí`īŋō”íŋÃÚ6eĻŲÃGÚĪS&ŲĒklp¨˛ņ“fŲŌŨJjÖe†rã­Đ.¯˙}÷ßgŊ{÷ŽŠQ¸æā÷ōË/×ô‹{S¸EŌũüŪ?8„.øÉûô\ũąĻ°€ĄëŸĄđŧ ÄŖ˜ũŨ¯™üųem~L ŠáÁ™ËŌįŸrmÛļ'ŌŽžújÛf›mėˆ#ް!C†dã §ŧļÜrËhi =>BŪŦwß}÷8Č˙ū÷ŋfŌøäƒåFmd[oŊĩŊõÖ[1Ī /ŧ`Xķ˜`:Îõ$ũ{īŊ×ĐõĢ_ũĘ>øāZķ}˙ũ÷ŅJ˜.įĒĢŽŠåyä‘öņĮgˁā0ũxĘ)§ØĢ¯žqŖlˆæŨwßåû؀lË-ļ0đņôm‚žģîē+ö/â3ŠúŊ3§~X‘ŠĮwß|um¸á†ąĖ—B|ô%ëûÔSOÅōļ õēíļÛâĩ‰eŲgžy&æķ‡Âô(zI;ũôĶíĻn°wÜŅūüį?GŊ'‡ž .ôËɓ'gÛąāđú.ĒđėĀ?™Î, SĄåŗƒe-0ށœ`×?ķ•]7įØîĀ“‚%­Ęf™éA~ry؜0­ÂFM ¸˛ÛîŸ|ŽkxÔQGeû8ũ˜ŝvÚ)bÉ=˜î‹čō8đ­Ģ?úõ™ņs™M™\HQKÛl§ĶŦ|ÆLĢž9ŌúŦšž;Û6Üd[ÛnĮ}lR`nąíåá…ŌŽ#ũ-ę™Ķ¨ƒ§š~^ryĻFž{ņÉ'ŸŒ÷ÕÆá:ŋøâ‹5iáú^úôzë­û}1âŧŋüå/ąÍƒĩņ ƒ˛>ø æųüĶOm=ö°ŋ˙ũīļÖZkYY°pģ<å ĪĶ<0–vž˙~6įŅaI÷8}Ž~Jũ>Ŗķúë¯ˇuƒEgSŋ^˙č7‘ūØØ÷Cąú;ũFn.˛ŦÍÅĸÎ3z8øaŌ˙Å/~a{îš§1|ōÉqŨÆwß}oōįž{.ŽCbĐš˙ūûcŪ‘#GF˛Å@ÖĄCģņÆíË/ŋŒSŠĻx 2ſ͐}ûíˇķԇ5R”M:]œ˙öˇŋoãŲgŸ‰+× 9ÖũéO˛ũ÷ß߸&¸|õ&íüķĪXöíÛ×nžųfĸb™ņ$ü‹–Pī#zâĘÃÚõŲÁ‚2=~k­Ú?üˆ8āB wÜq‡ 7;L­ױ͚UõLŸ>#ų?ūņa°>ÚvĖqĮ? ˛á†Ö/ųË0hīôgBŪés^ŠG rˇņƇ„[áIŅk¯A°KâËũÃ?,Ĩ]b~ė´ÁëĮāDũXĪtYĐĩÉ&›vk ËG]5dŊ&×÷œsΉÄŊīš}íļÛo‹x˙üķÔhEĮ¸?ܝl×@ØļŲvÛĐ[ŲčŅcėũ0x‚íōË/úŨķöIXË÷øã‡ēĸßæiõV™øô9VģF S‰ę „Ą"ņJûqzKë2)X‹Z´´JŦkaŨZØīËåÎ:ęŸá–5ÂX§…m¤cËÃåj×2ÄÕā‡ŸvÄay ŸZŠr¤s˙ņRtĪ=÷ÄŠA^n¸qČģÅ-Š7WŦ/ĶÃ3‡ûĶš™üōĐļĐ[­e§6vÜOļōrlåU–ˇiĶįZ¸âtgiM؟Wl:đõjXqˇß~{¸×ģ…Ī“´Ķũ|o]úV1^H!ôˇÜō/{!ŧņ3`ĀöŨwßĮg'ëŅûûß_‰ëĩ‹/ž8ėRŊĶ&Mš­ūƒmŦƒÃ5 ×)ɚūCĮheé_7ßü¯0-{›ũų˛?ĖĒc=>øāøåíˇß˛SO=ÕŪyûø’ĀR…ŊöÚ;ÔīģæÚkėŌK/ąn¸)Û˙B3‚ŽÆīąk7b˙Në*z§ĪČ͋€ČÚŧxâČÃíĖ3Ī´M7Ũ4Zgxëû÷ŋ˙ Oć%ƒ+rLb)Áō†ûÍo~‰įX§x]xᅑt@ėĐëú!-% ųIãAč:ąbáŧ™†˜ūņöČZō2RĪįqX\r•à ‰îd[¨kĢpäĮĒááĖZ”5×\Ķ–YfģöÚksæĨXe?üđhQ‚DPFrpIË`UA&ļ¤q@†¨CēāEŲ ÂCåQōāđ‰Ë×fH:Ø@Yŧ…C>Ņáƒ`Tūy}ø.„tņėŦšFáÁ>į#\5ōQ"ĘÕü‹ÍHŧ¨™6b=Û{īŊą~ã7ĸĩiÛ@t §´yß}÷YKäÅbÆZŸ–-KŖĩ‹v@´¸î8úqįÎ]bŊbÄžŦŠ›#\WIØHū]C⚤˜7Tk3ņũû÷Q[mĩU|i`@cĐŖŽ˙üįÍą<ˆ׌>JúąĮk+Ŧ°BĖסīš6qâÄH!xÄ'ۖ<Šđ/^+Ļ=)ƒ@´ס" ŌĄÚpÍZ„Ũžø5Ž×Ž~¸ôüiĖá ÂĒZ”Z›Ō°ƒ4|×û RIįņø8ú›ģ?üáÖ­[7ëͧO$DČäÂÄuäꏀîũĶuŗ#"VˆXe ;ŗĘ§ŲO_fwŌŨĸ´ĩmŊíîÁgø#ąĢíæúųŊPS—ššvīŪ=žpōR˜Ŧ_ÍnŌf–^ēģõYŖŨyםAŽ$Xė_‰ũ‚—Uôąŗ #î™gX~’ą+Žŧ"†ąŦŅ?[„kÂķį˜cŽņ^úĐŅšKį(ķæ›oŲW_ ũ AŌqGst|>´ChËE6ėĶaņš:xāQ怈÷ZuuÕ<ËU’퉂Íā_ė;EėīͲFi‚ČZ=`7Üôî3Čüīa{~4YĮÆ.A,]8Lō8’Ήƒ+¤ëVĒĩ×^{>9dąļy~t1ũØŽ]ģlĻÕW_=։tō”ÅÃĘķRˇtžUW]5–M9<Ė]éļP:] !oô=öX´örČ!ą}éŧāām‡ÔBtN<ņDÃÚåŠ2qčå[NXņN8á„(ƒ^ǝ¸âŠąŨčrŒ“õÉ×FČíڊķļ¸O\žz3ML[)Ëä9G':ŌŽëÆāåŸ4@ÆÃ>ˆ‡s?’a×AÆr1pā@c‘?X.ŊôŌ1]H6RĘpGũ˜†‚{™)Hœ‡‘įđ0y“íņēũ4Š‹]ÉüXM:vėõĄĮķãŗ 1}‰0×pĩÕV˖ÔCy‰ĀŌÆ=B`í28ōģūū5v[2qŧĩÖŅĘ0íÛ"Xũńr9\Sļ\cŋnî#C=q~oÆ@øGZ˛Oœûô#žô#÷„ëÅįpyGŽY^ŠyAÁBÎ=ãr¤ã<ŒĪ ÷_2žsžÜG8׏|÷Å=ėאvĢŋGPõoæ>Ņį‰V xXp͉°¸q—_~ųhqÁ‚ybĒ”ƒ‡˜wz|:ūǁ(-ģė˛ŅÚÆš2âHC'>0Öī`YcíqøX4&Mšå8įā ›|ž×ĪņŅËA]<Ÿ×|Ô \ēHX˛-”“$Ž^_H'SėX#ņXž’y)ŧåååą 4>åĀÒ:ēãœÁŸv&eЉnŦd`ëíNÖ|Ōmämŧk׎Y+[Î čd™õ‚!ōįĢ7TŪ꙲!klÜ%ëOapåÚsPOĖ8÷0ō<ä}€I†‰įˆ;ęÂųW_}§3ą4úāGŊÁåškމXē^/ƒöą~ŠJtũøãŅšPcɚ;øy=Ÿ×Ûë@اÜŅE}™–Ŗ? r^wĻÆÁ rķ)fd¨;yЇU•R†>/ Ÿ0÷׎u…Xįč_Ū>î ?ˆķsüÆ ;>^NûVĨŦĩ´á:Î9:KŲ†Ûíi“G}e?|<ØÆ}ũ‰m8h?ëâ;ˇid[Yû ÛĄui8JŦeXŗæ}&–øį}Ë}ú(ũįįø8×á˛12_W¤mā>;Ŧŋ++ŸeC_˙ˇŊ÷Âu6|čķņ“3mÛļ ä´ĨŊ6Üvķeößûn ;—ËY ­pÍrõ!ę€NīOø„=ŪĪũÚ{Ÿ{‘åXbéįŪ‡‘åå˜į ģŌŊņ Næįœō°æŌw8‡Ŧņŧ‚üƒĪīoԉ—:ÂŦ̃qŸá(ŸūNÚë¯ŋnÛoŋ}ļŊč-V˙ķ~WŦōŠŨß#Øú7˛ŦÍIŨÜŦÜôŦÂĒÁ ÖAAŧ8   Xʘd] œ?Pũœ…ß, įÍ0ũĐ%Œõ‰Eü<œ°Š1pąũoû[ü×J+­­Ŧ8p jŖķr’>ĶÉ|X\Î:ëŦXW6!đ2/įÜsĪå°¸ļļ0p°¸v2=6ÄQ—4A°"~•UV‰ƒņĨ—^:&Xˇ ¯+¯ŧr”aē,ЙŽëvÜ!CYG[ĀÆÛȃŸéBĻĶX( !d=ōü‹ŽÁ‚ö§ëÍõƒ4œqÆQËĐŪ{īÅŲËĮow <Č9Ā…4Îy‚aâTü /2ÉA6=°6ōĄ‡Šu€AvYO†,m§$ķz]ČG?b#Áˆ#"ÔÁ—íõ$}”Ëá:9g}ÜŅÅH/ ]ôuĻûY ȀGĮ‘ŸīÎŅtøõĄ¯ģËxÛ_ ›OX—H_Ą> ˛Ô%YOtĶ9V´—sHZû°Ū.SŦŌaj8ˆŖÄ:ĩīavšŨöûŖmßS/ /r+„éĪ€kČĮ"ųŠ(-­´Žŗ[Z§Žü6čŦØ Į‘€Ÿãû98xßÃ.O\ĪGzē?–\?ú#ēĪžÖ­…ŠĐ•ûnå?°É?˛‰ãGÚĖ­sæ{›0~l°pnÖ°õ ¸°#vÖĖ€E§˜—~Eųčrį×˝+>2~¸\:Ės…é{ˆ÷)/7äˆcV"ųlzāĸ*×Cš”…eĸĘaîsú0/m"nŧųķļÅ´'G:–,6ŦÔÍëMų”C<åpîōŧ}&ےŦĢëöüv˛äyŅézŠ7#Ę÷z{šŦW‚$yŧ×Įu’?í\Ÿ2hŖ—‹,ņKŋ..OSwŽG˛ ōģ㚃ĩJÔ=yŧ˜ĒæĄÎĻo'ņä§lÚHáāz⍋;/ĶãܧMX¸|*’xÖâ—´œ8f^rl\OÚčú)ú{›ŧ|ęäuäÜåŊ\ī'žßĶ‘wŦЏķ:š }Í­jŽģËš,õ‡āƒaįtŌõkŦ°cÂĩ„đßũM[eŠRËĐÆ’°Q 5o Wķą^i{w.ü-\gČZ8‚a,Ė"†¤•öíSė§aCíŒAmâZ+Ž!ä î`å÷aœcčí¤LĮ‡8Į§ūČz,Ę =ãÆO°#~˙-ˇÂ*aEš…)ë.Ą>­­eĐ?uÚDk9î^;ûŦ‹lfčĮ3gÎÍmHû×6p“îņŅ(›zzßŖž^ÎqԟÃÛCõNˇ‹tžܛž†Ŧ;ÚG˙ 9øŽ…—Kœ× ÂG{!¯čÆsv˛&“ž–ŧ>ų䓸ō‡E yî5äŊ­^VŽú{Ŋn‹[¸˜ũŨ¯Šüų˜ûj=šbę@€›“ˇ~nĀäAVnf'~ŖĪ9‡Ë—ËšŒ§ĄËõ$ox'#.į~˛œ´.Â<ÜÜš^Â^Ž—Ÿ¯-¤%u{ôxŧį%œ,‡G×#˙ņôDtŦįOęôōŊ,Į&)ÃÃÛãŊ\|HŒįĮO֛˛ŅA<×ܝ—“ÔīqXAyČ30P.iū$Ėšë÷:x„ũ Ë­ë"ƒ-q>hā&Íã8gšįõÄG†ö2ø¸CŽz1&ëäųŅåõB.F§Įį’ņŪd“õBu/d¨uußuz>/Ģ1Ã~Ũ¨õëÖŠŖuę~ >ā ҁũRƒwôį`jH›BsÂ5°Đ‚ĨĢŦĨĩ'm'žÚ¸Sļíž×ũt;)7įá|iĩõGú4íÂĩo×Öļ_ų‹đíˇoã‚ũjXeøÜŽ{ËÖöŪČ!öøC„ĨKėėⅸļÛv˙,éáĄĪą"¯_cęĮA?ōķd=Îۃ\ō™DzŌAnũ%ËķP–÷â<žúpŽižŽī˜$Ķ\Æå ÉŽG_{•h’ƒ÷-r÷‘ķ9?<ŨÚĐ%ü>H"ãåâû9ņŽsĪįqIŸsŌqž?™Nŧ‡9ĮšŧĮöÃuxyâ¨3.O~o ņÅt”Kų~´ëPĻ ķ".T5Ô,TgAHTŦŜĪy”–‰ŲU6rØ7öŅĶOؔĮgįzž8&šŌĒ :­Ģ?&¯IhJ œô ˆ~P?§˙ ƒpķ-Ŋ¤U‰zr\âœ8O#ί•ˇ+)īéÄyŧ_{#ƒK—E8ßáy]¯ËQĢŅjqwŠë÷8|^´ qäÅá'ۀīQ ũ+foF°5xS´f­Á!•Â%_§ÃÔkcXĖ:Öē0Ŋ”%_D÷AĖ}pķÄĪKđ}€qßķö) ˇ††eĖ—õ0>ō~ 9ęÅāėõķŧ„“qŽ‹|Éz“—<îHGÖãđ‰ķø¤×åupYęČ´l˛ŽŽŋX>XbMâZ2%†å”%ėrÆEũču9đĄ/° ›ŨÍX´ ~­ęĘ_hzĄũōÅT)빘¤}„”q ü lŽíÅz˚IÖ|ōn”‰l˛p}ŨĨûņŪČG:.)#Â?ī'Éēx^OÃ÷ƒ|Ž}āëõJęį9m#ŋ;äI§œ$žÜㄓeyžæâ/nũŊšāžn‡ČZ……ĀB"ƒž8rq0ä3¸1 3¨ņ€įáŸj+Ú’Úd|ĐB†s΃īįžŸtw~îžĮ{÷Ķņ.$_ZÆķâ§Ķ'ËäÜŠÖę€ IDATeđũ<ŠŖXį Ú ŪŦC„´AšĻNŌŌ}ē^´…ƒ5’|ŧB„t8YCCšBûŖcNŨ(ŸAÚ q8÷9÷ëāúéķœs¸.äōš¤Žēd\ļŽëžLOž{~Ęá<NĮ“7Ÿ<ī÷oR._;įøÅ­ŋ/ÎX×Vw­YĢ Ĩ z āƒ– Ķ(<ØyøqîoㅒĩzTĨŲgIēÅjŦ_Ã$™ņÁÛÉJ]õ"Ũû†[Ž{ßiČļ¸Î|ũ‘xę]WĖEJrĩĶårĨ5d욚޿ÚŪÅ­ŋ7ĩ~ŅPõYk($ĨG$đˇQtŧŨįoæ"kŽĘ‚ų‹rp¤lŽ3‡_KŽą_ī|­IæE˛F?á]áęꏔímđū˜¯ħąO‡sÉ4F욊Îtû›JŊĒÉ>ģ8ô÷†jwSŌŖiĐĻt5T! „€B@¤hœ×¸T! ! „€B@Ô‘ĩúáĻ\B@! „€( "kEY…! „€B ~hƒAũp‹šXDË'žúęĢøÛtĩŠâįMÖXc¸Mŋš/F­ Ĩ ! „€ †€6,^Q:šKŠß~䃘ŊzõĘģ“‹ŨUß}÷]üÎÖē뮛-ą1H›×íÃ?Œ? Îw›Ŗœl#ęyB=ų`ė×_mũû÷Zģž”9cƌø‘Úb•YOx”M! „@YÖ˛P,ø ß&²ļâŠ+æ%jŽ™QŖFÅīąMįĊķ[oŊ5ūžQåC™›mļYüŠ8i…˜¤.ō :4Zō kžVˆō6ĻķēPdŸarâäi…ÖųBd]/erŊj+ŗPčĘįBG>ŨŠB@%­YĢį5g@æ‹åūÍÎũ æūs$•5qūÁId‘!¯Ī9n—]vąÃ;,~o ˛åÎĶ=\—īōî×%ŋ¨ŌŊ~îRd9øy›{îš'‹cĄ:\Î}/“đË/ŋ‰įét—Ëį{ž…Ņ‘Oˇâ…€B`ÉF@–ĩ…¸ūLob؁œ…_o?|<÷'qPKšâ6ÂūÁI/ÖĶ {Z‡ĸČ ÃG}§ ų­ž 7Ü0ūž ō=ôP´J 2$~TsĀ€ļōĘ+g‰†ë~õÕWãīöQOŦXŦÃņ“Goŧņ†Mž<9æßzë­ã—õ™Bez2]ōÛoŋ?Ą´Å[dô8*›ķ/— uđāÁqĢ!māwŊ}î˙đÃöŪ{īŏ„ŽŗÎ:ņ÷Qûã?ÚÛoŋ%Įûîģoԇ•ė‘G1Ļ–{÷îm|đAÎz˙ũ÷öÖ[oEÜŗgĪXS/“×Ę=ztlã{ėۙŦ÷FmëM]ČŗéĻ›F]/žøĸõë×/ʧux9ČË ! „€¨"kõ@˜rŗĮ™ēŦ*­ĒUd Yōøîœ¤3&’ ˆÃ6Ûle!T„÷Ûo?›0a‚ŊûîģļÛnģÅŦĶĻM‹q{īŊw$2,sîĐËņéÖ­[$KX~úôéE eü&á ˛üsŽō zĄC9$æņ2’~ZÆq‚øņ;Š”ąüōË/mŊõ֋8¸ eŋųæ›ļįž{ÆßGüī˙kĢŦ˛J$X¯ŊöZ$™k­ĩVlJČâOŅA>ō¤uˆ¤˛œB@, "kõDĪI†˙îcmjÅ!ëų|' QÁ9Ō&MšÉB÷îŨc<–,dŪyįč;6’Cˆ‹kāX‡ÎqãÆÅ ¤šn,dãĮ7Č ė‰‡<Ž1"NŊúO͐'WyXÆ(ĢÔĶO?m›ožy–œ$ہž¤ V4ĘB'i1Ęį‡Íą†yģņŠ7dīã?Ļ1ßO?ũķAˆ°ĸ ‡<õĮšÅ2_Ŋ!q” žäį79‡u@úˆŖ ø~ Ÿ¸tŊŠĮú믯ãöÛooĪ>ûl$–Lōx~÷cÃ?ĮČÃō…€B@,"k ‚VJ–A"Ā ĪÁ œ˜‘ÁADõ0q>¨3Đã˜ĸ„`!ÃBɂÜ0-Š• ×+ė:%ŸįÁ‡°¸^ˇŪ!K–šgžy&’ŖĨ–ZŠč(O}ČCŊ]išĘķ2vØa‡ø™Ļũ˜ríÛˇ/Y˛šwÜ1’!d°BA˛ØH@Ŋ!J8/ĶëLũ)—ē{;ņģté×Ļ!Ŧ4ÎŊÎîOŸ>}>œHŖũdÎũ ž/Y×ë0]oޟ×ü¸ÖäĮ'žüŽũžFyrB@! ꋀ6Ô9eĶ{ Hzōđ8Ō‘Åy^?÷0> ÕV[-Ž%ƒ@p°:uęÔ)Ļņ™œ“,qœOœ81Ö9ˆē8°NAú Mԋ4,e‰•VZÉ˜ÚŖâķ•!å0…Ę&kģŧŪŪōģ ÄKzi–=Ļbiž×‘ŧœÅÍĪ ƒ>õvËú‘!:An į‰zcŨÃ篆ō2Åëõußąâú@ĐЇl˛ŪāîõĻžL­B^‰c y8Ø}ë:\o,P˙„€B@ÔŌŗÎ:ëâzæ]bŗų Y`ɉ!yaÃCē°A4ÜĄ‹Ažīĩ­žúę1ĩPLÕąŽ8Hä‚ôųįŸĮõUÖ_ĄÂõ駟Fkúq„!V]ģvyĐĮ7äą6௠‡é,úĮĸ—Ģ<ʓO>§j!†X֐GŽv ˙ņĮ2āŠcM„‹Ī–°æ Ÿé^,g䯚暑QwĻJ!T|h‹"æ€AØh?yŅ ŖîÔb•Ž7dō1%?kа.BŪX—Fŧ;ęĪua–ē“‚–ĢŪlĘ ” ŽlĒ€ŒCÜčŽŖW°&ēuÍqōōä ! „€(}ˇP¤rnyLAĸXœÎĀ]›ÃĘ1ŲjĢ­"đÁ] ÎŨ‘Î@‰ĀšdĀķ>øāƒqŗqČ&Éy\Kzœ˜¸ Ö)'›¤q`YĸN"ôp,q”aLĻšÕ b Irį:Šōé4ä\\“åēOĘSڅ^íŖĪ#Ã?â#dŠģן2ÉįĶnęčuJÖÛËņ4×īņøŽ¯]ģvķ”é˛ō…€B@,Zŗļ hĨdüą^aíÁēÅ Ë1€3ø'­9>¨#Īš-tN;ŌP%͐‡Ŧ¸Kįõ:šLēŌē,ž—‡ž¤N¯2É4¯2žNį8,W.ī>ņžN‡­¤L2ŪËÅ÷˛\õöüđ9oŋĮ%u{>Î1"Œķz§ķÔ¤Î%ŞNūdy.'_! „@}e­¨Ĩ­0,Žg x'Ž–œÁ›ŠRĻõÄ9ˆG–Ã-RäOģ¤>'ž—EõnŊIĻšĪë埔Kž'ķx>â¨ģËĨãIķtŌ¨?mņō’ōœģ|?§Œ´ŧ§šŒŸģŸĖ—<÷t|?wũČá¨ŗ“2d<Ũ¯+2Į9.Šp2=FØąqŸ89! „€õA`ŽIĻ>š—đ<>(ŗf O.˛Dirā°ųN:ÎÜCÜqžLķxÖrá< ßĪ]&I*<ÎeÜw^Ž—ÖGØe<Í}×A[Ōeē>—!OŌyēû.—”IÆ%ëáyÜ÷<Éz‘–L§ŽžžŦ‹_t¤ķ¸ŧëOę#.ŠĮeŨ÷<ō…€B@Ô‘ĩú ō0§‰‰‡“*}Ā&ÍâÜšü4đ0~2a?ĐCZōpŨøI9OęJĮ!ŸtšdI'žöx:žĮå*3—Nä“å%ĪŊ ĪGš—•N#\W^×ãyŊî^oō{ŽË}Ī›,ßãrųŽŗPų\:'„€BĀYs$Āg Į1•–ÜŲš*šĨ¨ãŌ,§F ! „€XDĖũvÁ"Ē€ŠB@! „€ȏ€ČZ~l”"„€B@EŽ€ČÚ"ŋĒ€B@! ō# ˛–Ĩ! „€B`‘# ˛ļČ/* „€B@üˆŦåĮF)B@! „€Xä´ŧųæ›y%T! „@>øÅÚĒĢŽEâûuū ŊīžûÎ^y啸;¸ųĘWŧB`Q#Đâ“O>ÉđÃÛüH6?`íąE]1•/„€ŠŠ 2dHümŨdAŠiK>ß>üđCûėŗĪlƒ 6Đ÷ŗ¨ęDĻ€Ī7^Tų]q~V˛%|Д„|?™Ô*¯:!°ä!Āŗiũõס/žøÂ&OžlÛnģm|VAŧ„°9QãĨôĩ×^‹ē jüT܂čYōŽ€Z,„@ąāšĮá­ExŗĖ˚5+ZÕøn9! „@S@r•<°°}ũõׯķjįw6~“WŅrĸ6sæL{öŲg#AëŨģw´¨e†s^\›BÛU! „ŋ’„-žP><Ã(D ̚?Ô“B`Q#āĪ$žOūŒ5j”9ŌvÚi'ëŅŖGŦbm„ÍŸiãĮˇįž{ÎVZi%[qÅã[+Cōķ+'„€h ø3‰įSĄ-FŒ‘á!čëÕüÁÖ*Ģ:!°ä"Āŗ˛ÆÁķɟSU6nüûjøįļÕV[ŲjĢ­AĘEØüyÆF‚Áƒ[Ÿ5Ö˛ž=–ĩš7VsMN9,šˆĢåB@4xžq`Y‹/”cƌ‰d‡šMĨ˛Ē‡K&ū,‡¨q0 :eú,3q–ĩ*­ļ•ĶíĢ/†Yŋ~ũ,Ŋņ€|î|#AŸžëXĻeG̍*ąåēˇąŽÛÄiP†ūpĖEú\—|! „@1H>"Y›8qbƧ’¸bTFe! ō!Āķˆg5–jŒžXno9Õ:ļĒļŽmĒ­kû*kmŗíË/ŋ°Ž]ģf7¸> &Mšd}ûö ’mlĘĖR›>ĢÄĻW”ØfkvļåģˇS < }1¯į—/„€X”8a‹ĪĻ)SĻD˛ļ(+¤˛…€šđ)ĐISgÛ-ĪO´V-*­kģ*[kŲ [Ē}Í[Čܡß~7°Ž­C‡6cƌ¸>…šL“Æ7Ķ0Ĩ0if‰}ņS+›\Vj™–vüŽŨmŠÎ­ŖeMkÖr]Å !°¨ˆdmęÔŠsį uTžB`nņĮŋ①ö͘rëÜļĘ­1Ûzu¯ĖnˆÂĮ–t› ll$`ÁrË-7Īô&Ŋ[ڋÃ[ÛÔōR[}šļvŪžKg­j"lę~B@4E´ũŠ)^ÕIH˛€ačŗíí¯+mj˜ž\qЌ­Ū3ÉU|ۜŗ‹“éˆYŸ>}ėŠ§žŠžĩ¤įäGúЋ~œÖĒEôO&ˆ€ČZŧ(Ē’5@Žî{cēU†O@VgZØö}Ēæą‚Ĩ‰XˇnŨlķÍ77|ŌŌé2âЃ>ôĸŸ89! „@SE@O¨ĻzeT/!°#ā›Ļˍ˛a?„)Ī€ÅĻĢVZ‡ļ5°\$ˉižžŒķs|ô Ŋč§œ—ú'„€h"ˆŦ5‘ Ąj!0?o/ 0âÃON­ĩĒqNŧœ”Ĩ ZméŽŖF_IÔO9rB@ĻŠ@ËĻZ1ÕK%Ŧ\#ÆWDZ—fÂĻ‚j+iČUØp€ƒųá›’–1OsB3ÍųGúĐ;ģĒE,‡ŧä‘B@45ęMÖĘfW‡éƒŲ6läl9ĄÂĻ•…/k_iSģžĒXŒȨȉ•ąū]ۅMsxDË ‰,â [šČZš€!‹C_— wüôöō§åöõOĐĶôO!°°”†‡ĖŌKŦgį–ÖŗKŠmŌģm—ÖKí“ĩąS*íū° ÷Ĩa3­lļØYŊPW&! Žmį}Öä"l˛4YKâDÍã;Ŋã§[Xŗ– GĪĶä ! ^ˇXŗíˇiG[w•6YÕÉįV62uR'YãčoĻO~0ŨnznĘ<$Yƒe:™unĮnJģ‚B@@`åĨJãĮnĶĒ’ļtZ:œ&j¤¯ŪĶŦUOÁ´&……€u#Āl㔙f“ÃQŗŖŨėõ/ĘâqĖv]ėđm:g•ÔEØZÔõQ\'k—=<Ņ^ü$”8Į­ŋ˛Ųļk˜õ]ÎŦ]ką4ĮEžB@! ’|?1c¯~iöæ×fåsŒøƒÖmoė×}ž%É|~^'YCđž×§Ûí/˙ķôV´_n IAså ! „€B .~ú9c×úČ;A[pm[™šs‰uhĶx5~šŧŧŧŪ_gũJÛļmã6ĮJëŸB@! šđ¨ãfė˛'Ēã6mžļ[—8š°å$kNÔÆ˙\io /MܲO [ļËÜÍŪndķ)O§ĨÃčHÆÍš5ËfĪžmmÚÔė’đ4÷“eúšûԁŧø:tˆŅšōĨ뚖q}øé´t8—ŒōĪE W:,üæīcsŅ›?MøÍ˙ŦɅ‰c˜NK‡Õ˙æīcŽ].l„ŸúŸÆĪyUܘFŽicƌą‰'ÚôéĶ­cĮŽÖŊ{÷ø{Å+­´’ĩk×n>>ŅoųļÁĘÕöŅŋŽqü ŽÖŽMé|r~Oæ$kžøî×åŲo§mˇVINR–žxž?–ᒁ°ŨrË-6aÂÃŌVZZj-[ļĖ~W p8p~^YYiK-ĩ”üņYĸ—Kw!åGÅsūĨåĶá\ešŋĸĸžûîģxAŠģëūāƒėņĮˇõ×_ßöŲgŸ¤ēŦL2Ōķ%ã8ŋķÎ;íÛoŋĩÃ?<ū¨u>Ŋųō˙ũ÷÷ž={ZĢVÁŦ\.Ų\qQ8!?zôhûōË/cĮíÛˇ¯'Gŋüž!—lޏ|ōšdsÅ) ilŌa¤rÅ ?á—Ģoäę+šâÔÔ—ūķĶO?ŲįŸɚ÷[üiĶĻÅcĈ6jÔ([k­ĩâø—”á|`ߒ@ÖjŦk,9Û¤OøŦF——ŦA„øĻŽUø†[¯Ĩ‹ķËT4HÆ;ėÉÚāÁƒmüøņ‘´‘†ŖnœģĪ9?Üėéĩ=Ž<ōH{ë­ˇĸūõęÕËvÛm7;äClųå—ĪÆ7Ö ėû˛Ë.ŗ×^{-2pĘiŨēĩŊūúë‘p~ũõ×vĪ=÷XYY™íģīžõŽÆ /ŧÛšũöÛÛkŦa…ęũûß˙nO<ņ„ũđC ûÁå˙øG;øāƒë]Žáoû[ÛoŋũėĘ+¯ŦˇeB@!Đ`,˙đÃŖaŠļú`uc<ßpà į#lũVĀV¸ ŋQ<Ë6ÍÍĮ_j%kãĻ֐ŖnaV1Ÿ‚Ú*YŸ4ŦdŦ=›˛æâ´9d­ũŧķ´„BW ÁJÆå:O2™ßË$Î-fl¸öÚkŖ•퀈ķÂXÄÉ貙3FŪë‘Ģ|/Ãķžxâ‰ļÉ&›Ø‹/žh'œp‚AJ° 1íZHū|õ÷r<=­ëíˇßŽú˙ûßĮŠNä.ŧđÂl™ņ$õ/ŠË“<Î}â“į.įņɰĮųõķ:ŋûîģQl˙ũ÷SĘÄ{ėą9õzYî'uĻĪyŖ0`@Ôí˙<Ÿûé<Äc ü÷ŋ˙mÛlŗgËúžĪũ\ųŊ]IWāqî+˙ŧũ'.¯ĮĮ}õõŸBú‚îŸæq˙`-ķŲ'3Oø÷ßŋ_â8[ˇöÚkĮ0DyÖ¯1Ķå}ŋKāWcÂį<øÉNŗđIKēœs›rTÍųąO~"ŒÉ%„!LLáŊôŌK‘øā§Ī!YÉŧœ{~÷]—[Îxāûß˙ūgŦíZvŲe­GŲ]ĸ:H۔)SâÁü0› œč%õį:…‡¤aíÁ͜93–EeīēëŽvÛmˇEŌĪ=÷Ü8]úņĮĮ8Ędú”ŠĘącĮFrŗņÆ$ ‹]éōYxˆ{˙ũ÷įK#Ūå9‡Hîĩ×^ÆT&ur}øĖƒC27Ø`Ûzë­íŠ+ŽČZĀ’:üÜũd‡Īá3čXŦôxĪC˜7° L:į.ģėb/ŋür”Å&\īķĪ??š}ÁK"ņW]uUVgR˛ v;î¸ŖŊōĘ+QæĮ´?üáą"˙oŧ‘ÍīurŸēržnS!y’2Ę?oŸNbSČšđ~É{ĩ>“”Q˙Q˙i ũ‡uØî/?ũôSƒ˜ąœ ‡O˜ø¤Å|ķÕŽĸę9ŧË ÛœčŦ7ŸeÍSjۜвæiIK‹Æ‡šŒžįŧ_ŋ~Ų Î“ PĻ[ĮØŠĩ RrĶM7e'¤ŒY'vŽ&MÖ<>ŸüŨwß“ˇÜrKcĒĮŽÄŗV΁…Š#Žō ŗŪ덪ŽŠ°đĄÅúŦ\nĪ=÷ŒCĻ\‡§Ų5’vā‰ĩoõÕW7Ļ!{ėą‡uęÔɯNDũ!Sš7ß|s$´ĮwÜ<Ǎ̎ÁŌaß}÷Ũã4(667PGÚâŽļCNépĢŦ˛Šad}!„ŧm€É%—\ĪWXa…˙ķĪ?Įxȝ—í˛2Ž8~ķÍ7vōÉ'„R‹5ޞ ęÂå–[.›ßë$_! „@1đéO/‹š4÷!jIK˛äķ1ĐķZ!pŠšõøŲøÔIN˛VCÔæŽĢŽ ģĶ)Öĩk×x`éJ;ZHPmų=Ö'kįu! RĪAÜHGŽļ˛ÃA~°Ū@x°Ž]zéĨŲ|^uq]žĪõ{<ÄqīŊ÷ŽĶ…ˇß~ģũå/‰–&,sšäŠ2oŊõV{衇ĸõŒéWŦg8/›ēŨ{īŊŅdĘŇŧą)9,~\t!„ Bƌ˙ū÷ŋq÷'zŌõuŊ#¯;rI×ĢW/ûį?˙igŸ}v$WL‡ūâŋˆaH9uĻŦ•W^9nBđ)ct ĶËdÖVŸ›ĪUļËBô!…āAd*yˇØb‹HĐØė€é˜vz9ņD˙„€B@,ø™qbŗV<¯§“ |ķ|ԉ8œ|)â ­8tzžtų„Ų8ĩņōË/ÖģĶN;-ZÆø\¤)Sô¸å a:îŗĪ>3ōēÃZååĻëëzÁÕe<_ŌĮšÅĸū?ũéO†…íŽ;îˆ×âĖ3ĪĖ– ‘‡´ķ2ŲqËĩņrr•í˛ƒ ĘbšîēëF˛) /Yו.Sa! „€ÅDã|Ō%-j>%šļŦ‘/=–UUˇ jX+?÷ŗdIŊ~žs͚'ÎájŲ`m'–ô§/˜czĢPŲâ 10P'Mä'Ū‰šôŽ—xâ]ÆĶōų§žzĒ]}õÕņ[b7ŪxcœjĖ'ÛņÛnģ­Ũwß}ņh´í™gž)¸äqXŽ tG}´tĐAķ×‚Ļšn˙øĮ?˛V:֜QĻ“'Žuc8ž§‡ķrŖ éB@!°0¸aÆu$‰ ƒŠ6—ÁOįKĻ9ßĘĮar’ĩ|Âķ(Îā3NÎ`|PuA„+=šÔáuÃwŌBē‡==™'ß9ëŽ=ôĐhÍēøâ‹ŗV=ŸŪcŽŠ9v&6´ãÂąVĮ´gĄnĩÕV‹ĸXŦ É#ŊëļPi9Ŧ˜>•ËgT°$ŽēęĒQ ËWc8_ˆÉ´'Î-¤é7˜Æ([:…€B@‚ËģÜąÛ7¸%-IØHw—Ėįq…úy§A U”ƒä°ž bĘ5īš”OŸCž 5Ŧj>í™&bČqxŧ<ō& \ZŽ0 ōąA˜ūÃBÅŽ]­X‘Øíč.—މc=k东ŏqãâÚ/ō3ĩX¨;đĀãÂEØ;;)™J„XŌvj:a.TŸËą‘ƒu‡m´Q\āī›/ø&;Eų„ Ö@6œqÆ1ĖÚ9,qėæŦÃljEįŌoĀ›Í8ŽaĻ{ą<‚ĶęrB@! ŒC|‚ãē‘Á}¯„ ĸæņäY˜ņĢAÉ•ÄZÔģwīėg ŧâ…ø-ˆ>Ė ArR1KZÍ<Ŋœû/pž ōë_˙Ú°Ŧą¸žOR@NXĮ† "wÎ9įÄÍÂ4í IDATC† YÕ9e!Ŧã'ĩp,°‡aF-Ôą† ’ÃÂ|vŒr@x ĘIŒ Õįr¯G}4nT Ë(›'ø/–Ķë¯ŋ>ŽgcÄđ7ŋųMŊÉģ]Ī;īŧ8íMßaŗ…›ŠąÎBĻéôü׉ˇrB@! Ŧyg†‹/@0ķä„,]‡Ÿ īŋ{ž–+$Ü"|bîļΐƒÁŪ-Uįß3Ų>]mŊ{TŲÛמÁ Âꒁ,°ëk ¤+m™s"â7O'žé?Ö:ąH}éĨ—ŽĢ¨‚Ōą2ąŗąĄĻŊĐI“&ŋ)Ëæ".Œcz’Αjëëy[ Í>í™Ģ~Xō˜ž„ĐÕ6Yŧ÷Ū{vÍ5רϛnwˇŌŋĻÉ2šžX!)+WzRVįB@! ЁŸ÷bω13Ÿcœ‡¨å›ŊúĨļöõøRëˇ|‰]~xˇhxa,Ou nYËWáBâ!.Xš°ŽĨ+šÎŸNg@Įē´°ä'YŽ[x’q qÎ.Tކpl2đOd4„>ŦYXģęr|īŖ!׍įs\kˆœœB@Ļ‚ ƒãÄ ÆQøéĩ…ą¨y[›YƒMĻw”zEå7/˜jöΧ4¯–Š5B@!°¤ Ā8Ö+|Ŗ”Ŗ1]“"kŲPénZ0 *'„€B@ԍ@ÎOwԝMB@! „€Å@@d­(Ģ ! „€B@Ô‘ĩz§lB@! „€(­Y›8qbøxëËŨĘB@! „ĀIJíB;ëūĩ§‚Č?˙sÎ1į,ĀŠ‘B@! „€(gŪ>Ö&?ĢÎĸ4 Z'DB@! „ĀĸC@dmŅa¯’…€B@!P'"kuB$! „€B@,:DÖö*Y! „€u" ˛V'DB@! „ĀĸC@dmŅa¯’…€B@!P'"kuB$! „€B@,:DÖö*Y! „€u" ˛V'DB@! „ĀĸC  _0XtÕ[¸’ĢĢĢí‹/ž°áÇ?™ÕĒU+Ëd2ņ@s‹-bÄ)Ü<đ¸íŠ+-]°wáō÷Xļƒ Úi;ō´uŦmÛVą?čŸB ĄиÔôĮŨĻ8Ž4[˛Æ ņĖ3ĪXII‰íŗĪ>ÖĻM›†žį¤¯ "°Ææã­×2­$q¸xøk™Šņ b† ”=vŗĒđ¯˛*ccœfŪ9ÄÎøåKvÍmƒBiļˇF ú/„@ŅиTtČëU`SGĖQ¯f/šLŸ~úŠÍš5ËvÛm7kŨēuŦ–´šAœŧæPx.ÍŸqŗÍĘ2%6ŗē…ÍÄd­,偭qž‰ŌfŋŦē$¤—Xûe;ہ§mn“Úˇ´;˙ųÉĸé´*Uf€ÆĨÅcÜmŠãHŗ4TUUŲĐĄCmŨu×5Î}𺤄ŽRÃâå7/&ÍČØä˛Ēx]ÃåŽ~ÍĶ“Z {åŲ˙Ųļ;íėjÁēūUWg‚u-X؂_VŅÂúīÔĮēõm;ö”ūa:ĩ´YjœÅC@ãŌâ3Ū6Åq¤ÁÉڔ)SlæĖ™ļüōËĮģ`˘1öĀØgœQđ]‘Îķį?˙ŲN9åëŌĨKA:¸)***ŦgĪžVYÉĀ]ސ•Á›ŋ9D͕%Ã?ũô“=øāƒvÚi§yr­ō%ķמīžûŦ_ŋ~ļūúëg dmō¤áré““O>9b’+Ũ jžüÍ5}ZEÆfëķ%áZg‚?gÔ>y°]|։ö§›ēY˙ļŠ× :ˆVÖVÛŦˇKÎöíXH\ĩȝGNA`aÆ%* į|aÁ/FcâŅĮ‘=î¸ãl¯Ŋö˛Ã;Ė6ÚhŖˆéØącí–[nq| ōĶyŽŊöZ›6mZAy‚,BF¸9ĒĒ*ãÁā› Ö“ęĒęO˜t¯ŧōŠũæ7ŋ‰á1ŖĮÄú&ĶŖ\§'tŌ|ų=Ũõ%ÃLÃBŅ÷Č#Ø§Ã>] üšę‹ūëŽģÎ ÆųŌsÕ?Wũš[ū˛ĘŒÍ GyečŅŗāOQn7\~QėC7^qĄM™^Ķg‚6ŗÂĸüŒāO˛ĨÛ،3 îoB nēví_Vy‘ßlŗÍėŖ>Ē;S=$† bk¯Ŋv=rž…įë‚ē—’ãHs{NįkOe%ãu͸ŧ(ÛßĮ‘ŗŦŊõÖ[öŲgŸŲ›ožû0sQ8Hŧe˖Ņįŧ4l2HZ’ŧ^5cfO=õ”í¸ãŽaĄy wÕ5ĶĻäķt—?ú˜cáĢŽz‰K§§Ã“™bŨ\ˇnŨbžH ƒ~t’?­/Žĸ.ŒēK§/‰árZ•˜XÕÂŋĪ3ÜnãF´ÖmÚ”=ņĀ­ļÛa§X đ5SĄČĪŦ¨ļа֭¤]ĢėõâíMN†AāņĮˇ•W^9Î\\}õÕvĮw4Œâ„–ŋŧũöۉ˜†=ŊķÎ;í…^0üB]}Æ%×Ŋ¤<Įīšį{éĨ—ė_ˇŪš ƒEŅūĻ8Ž4˜eõ=?üđC$lÜž}{ŧŦãĻämgĐ A6jÔ¨lüå—_nl°íˇß~öá‡fãķtĐA1ŦËAÖfĪžČŌė0đ‚›sđVđ™~ũõ×m‹-ļˆacēūúëmŨuÖą#<Ō>˙üķ(˙Ÿ0=J}‘!n¯=ö°ģîēË `ģîēĢ í÷ˇd^ 7ôöÛoåcyHūøãļûîģĮ6˙#”áō7Üpƒí˛ķÎļųæ›Û…^˜­…=B9[nšĨ]yÅYynūŪ{ĪhoŧąŊüōËŲöPV,/O{›súė`+›ÍThuôËãxĀ vũ3_ŲusŽí<ÉfTTšŒMÖĩÉåÕ6nZ…š˜^ krB@4|Bi­ĩÖ˛¯žú*p 'ØļÛnŸcwß}wļPf2ˆg|ā9ˆãŲuüņĮÛV[meũû÷ˇŸū9+ī'|Ēé€đ mēéĻöÄOÄg(y 8žá;‡g.åôéĶĮ9äGÚ;īŧ3Žŋüå/QŽ%:ú͟ėÅ_Œuøúë¯íĩ×^ŗ#Ž8‚luēBÆĨSÂōŒ<ķīŊ÷Ūės1‰øÍB{Ā#×sœĨ1;%ōú8°õÖ[Ø2Vŧō‚ÛąĮ—äėž–pđÁDųÃXôˇŋũ-Ģ˙đ0SƘK˙ndŠņšņüļÛnŗīŋ?Τí´ĶNq|c\:ujŧNXPO˙õ¯môčŅ1žq“qņŠ0ž1Ž ÚnģØ70j0“5(ŒĄĖÔř¤PˇsĩßÛëãj}ÃMqi0ËÚ&›lb'žxĸmŗÍ6vŪyįŲYg?›Aī…œ}ķÍ7ö^ Ŧ=ģ?\ÜŗĪ>;^n"Ū‚0]˙îwŋ‹7Um=ūŌK/ÍŽ‡ĢMŽOv`)// ¤mV<6’h)áŗ Ŧ^3ûnÄwļĖ2ËDR7;;,‚LÃļ ˜—^|ÉŽžæjģä’KėÆo˛ņãĮĮ´iĶĻÚ¤I“íŨОūë­,sOÚ\h÷„‹ÎÅģúŸ|ōɈ ō„é|<(ūöˇŋZYYšz襹ŽĩVßHŌ<ā°0ÁâÃåŋ8ʖ[vYûë_˙jĮ÷KÛa‡ĸUoúôéQ?mŋ3En–įž{ÖŽšæ°Á€˜ß˯i/’sÛ[ķĘŌ|Ã?N–ąqĄī…Ö‡W˛\†ąĀsãÛ˙°ŦfŨÚ´˛j[ō´k°Ûđ儀˜ƒƒ8Īśnē)æDŸ~úéqz”—õcÂėħŦŦĖūøĮ?Ɨ˙Ĩ—^:ôČBŒ† ÉCŽŲd˜ÍHž˙ūûøœ|ôŅG#!áYÉK4r|đ~øáöÉ'ŸDö‡?ü!ŽOååå1s7yōäđũÅļļÜrËÅņĨ3nYcm4cW!ސqéčŖŽļ5Ö\#n’;ķĖ3m÷ŨvˇōYå‘ĖŧúękÖ}ŠĨÂķĒ:, ĒW’ĪųŖBŪ5×y?jäŨ-ä%CĘ̝žj?üˆuîÔ)ˇéͧŲĶO?c?…vžøĢÃˇH'’5ÍÆĮA×Ņĸũ„9ggiĶ?Ž2Æ)ČöĶO?—=øāėØp īģ˙>ëØącø|ÖŗaėŧÁnŋũv;õÔSj7O>ų¤03÷–]wíuq{ūųįâuyō‰'yJ‡V„å,Ą~Éöú8ŪĐãZSG˞FGũŋ˙û?{衇âķ†Ũâ CŦm}ûöœxÖpqÃ]tŅEqQ?ė›¤6ˇæškZ§ĐŲęrŧŊaíãæĀįsÂ%%„KŦ$0ųvØ!†āõčŅ#ŧelíÚˇŗ<ĐŪxãPO6)ÔlN ?dšķĪ?ß:tčßĖ y”G:‹7GŪ>ŧ<ōŖo…V´ŪŊ{GR6xđā˜NøĮŅ?Ƈ u7.č õãÍōĸ‹~k˙ûßcÖ˛U˄~‹˜R‡5×ėI$ō^žˇoI ˇØÍĸĸĒEô+9S›~Ė įÄUFßB|‰#œÍ GU‹RkōˇĐGqëēŊ”.ę…V1H3 žél@. j 'YíÚĩ‹ĪGž‘ÉË<Ī1ĪSČÄ/~ņ‹hÅá™ZˆÃRÄŗ‹„Ãcē bDÆ_Ļâ2uų;w6ÚPˆ+d\ęŨ§w$¤´ÂČsą“œcŽ9Ú>ōQ\æããJōšß‡ŧŸ‹˜‘×ĮęÆēėŽ]ģD}Ī>ûŦíšį^Pu0ĘëÕĢWßj>(žįüã>ސÆ5\iĨ•Âtö*ą^Ā¸I“&Fũ7pžôŌKb[Cë7)ũŪžĩÖę?fÚé§Åņ­´´eļ=^o_C‡›â8Ōā&ČëÖ¸) _°k:¨ģäÍEgbũÂūûī“1]ûMéōõõ17ŖË‰š—ë>z!ŠÜœ,ÖGž0>2&?m 3ĸĪĶH§]ø¸HCē‡ß˙}Ûpà ŗadȋ—!ŽEˇÄņPÂÜĪ Ęķzķ@ã&Ŋė˛ËŒéZŪ ŨņĄ_tq ›<øîhĪ’n×ē…ulSƒHD4ÂŋŸĀ>üXM8Ä÷Ūh ØãØøžVˆ[UUØ=3fUYiûÖĄ|! ž °úęĢg5bņaiĖšįžŸsŲ„p‚%ėß˙ūw´|a8účŖ#áâŲzÕUWÅŲÖŗF­.įcPōy˜ÎÃķ’goōųœ–YØ0ēk— ̌|€ņįĪuÖt1-ĘėÍ9įœgfH÷į89œSÂÉķd˜xōyÛ Ô{īŊwÍōĸP>ã'ōųÆM/×Û ‘f& bĪF=žŌĀ×ŧžąQá_c„›â8Ō`d|Zƒ7". ū*ĢŦ™ąƒšö™gZôÆoŒ¤%ž+Ė4 _ø\éGĮäĸ';it*ķö˜ÂWXa…æĸ#ĪN@ŦdÄC°ŧŅÁHŖC%;[˛Ã’æa:Ų.ģė’ Så~ûíˇQf~Ū&ą82ŊĘ\>'ÚĮ›sí”Ã.XfZČŦëGį~ yœˇö,iáö­ÂˇmÍCÅÍÆāąáv{Úë÷ũÕĻOüÉÚvčjŸ÷ë,h@T6T†]Á%%ÕÖĄu¸†Zŗûū ÆF€™ŦRXk˜’äŲĮŒŒ¯9úå/cŦqG˛Æķ‘\ž›#FŒˆSr…ĩ|í@ßȑ#ŖUȟŲČ.Ļ1&āžüōKãŗKLŅâØ0ÆøāŽ:3#ŅĢËÕ5.1ÅČ, ëÉX„nÆŸĨ"ž0,‚8Î{^0c§­įEĮXÁ<ëËXŽ„Ĩ’õy”ÅléŨģwØrūØcōeė#Œ.S҇#GaĻ™ŠSÜ.ĮsØĪņ û˜J˜éî &dõą$‰8ϘYĶ6tčP[/,;ōö6æ8×Į‘#k,Nüío×`A‚`˙˜EųMÎ|ļĖį>°ÂņíąI“&şˆĘ'O< ųYW@g¨ÍņÖā Ÿį˜s!ī@ÄqŅä͍…Ē˜ry$Ū;#įčCWŽŽŠĖžLīz:qä‡Ôr“}üņĮŅĸĄÅŅÖûņ6ÁĸLÚˆŠš…Ÿäƒŧ]pÁY}^6úŊmɲĸŌ%đ_‡6ÕÁ˛Ö:b.O¸Fá8tjßÃ:írģí÷GÛž§˛îq…°îŖf­;|!lĨĨ•ÖqvKëÔqŽ%x „PMEC€Ú+¯ŧ2ސ.ž›ŒŠÕV[-ޟbį(Žg"ã ņ<Ųpļ°ŽY „āᇎę¨D"ÉæÆ*wøÎ%›n ‹íYCĮ6Ôåę—Āƒļ2CĩNØāFXģĮē06š­ēęĒq=˜%Į-Ę͕—5Ūägŧ@Ūķ sĻFŲđFY4Ⰸũë_˙ŠĶĐ´•4ÆŌĐÃ9c‡}Üņņ‘0˃ÜÂĮŌ%ϊ،WÛ¸IYŦ҆4˛ĻōyņÅĮ6s­YBD™ÅpMqi|֘_æ k…ÅÃĘĪŋg˛}6ēÚú¯ŌÆŽ:f™:1ō…t(.\ĄŽØBđ`Ņ ë¨?VĪú8tŌyčd^'Îqŧü:ėT(âŧíū–DXįų eôß}÷]\„ŠŲįåšU}XīüMĖĶŲí‚u’°Ÿ“?]—/´>K’ü5īVÚō=†Ąû…e…ŅšOGėŸWڞĮĶÃũ_CØÂŌʰ14ė­´oœbžøĖŽ8ĸW|x9v5šô_Æ@€ čŒLŅučĐ!Ãŗ‘t ÜČca[‡5‰ÍXŽĐĮŗ>}ŋ{Ŋr•ƒ¨Đ1kAÆ%d)—ą<WÁƒēV?œ×5=0^€%c8Xú—ōÉcÁÂh€rŠ>âŖŌú$˘ĮõJb[W~fšĀ•ú’—öp­ķÕŋ.}õI/æ8ræícmč÷ŗŦßō%vųáŨ"!uR›ėw JSykHŽGHTÛ9dĒĐN_›Ō¸ tl÷ķFDÜôėÛ},zXą<ėÕ700Ũę:ņ==-Ÿ3u‰ų ]2RuLëKĻ“×Ķũfķpē<…kXøtë~… [XįČZč 5„miãZ}ÁšáB֐´°g$ŧ˜„ķā‡įšĩ)ki­ÃI—é‡>´vļ_ċ¨B@4 c‡ģ4Q#ž—Ũ…%jŽß}/ßÃîį‹'}AÆ,žŅ…ŽK<Įxū“'9^qÅŗãBžį~rĄžšÆ˙üį?ņķXîØ Ë&Ļ“ōÔ7ÎW^.ũäËU˙Bô1#įųņ}üĢOų䯭~ųŌ›â8Ō d†7ĮÍÎ Íú0֝ššÖ/ļ×1ŊŨ:^ß0ßJËåęĢĪu)‚uPráqļk knØõXՒįҜ iKĩjŪBūĘVėQ9Ī€áøËB ų QņU…ŽKšžkÉú5D:ËkļKo˜úeĘKŽģ†ĐīēđG}Mqi–dŽĮÚ66.đ}7ÖĨaeKžą%;“Λí:„Ũœ4'XË d‘”Íi^ōŧEø|Ž´$ü‚Áė*;|¤}ņʋ6ãĮĪė°°^&ųđš“]žÍÆž›V,×ÔÆ%Ŧ–nšdēQn.Mqi–d &)•Í |÷/TĢ3Îíˆ:›,ą<¸ }†ž“~œ?‡b„€…# qŠpŦWÉÆGš%YãBëḊ3[°ųŗĪ]/ŽAõnxˆ˛hwŲđ‹ŧm‹¨5ÎŌ*–t4.5ßĐØãHŗ%kt Ācsß(ķE‹ÍˇĢ¨e ƒ}E$maT^!  A@ãR!(-ž29Ž4k˛æ—ģ1ô2ä ! „€(K…"%9(üchÂK! „€B čˆŦr(„€B@ÂY++I ! „€B čˆŦr(„€B@Âh° ˙üį? /U’B@! „€hÆœx≠Öē#küúvÛm×`“"! „€B@4FŒŋÅÉ'Áø&'>?gÉ÷ķ8p|Īĩ*üčôoŧŅ ÕÖ4hƒÂ)eB@! „€hX Y{ķÍ7ļuh+vyšĒĶ^ˇ m(vy Ķļ|yļ ųô*~Ņ"PYY+ā~CÔÆušß:ĨC!ĐT(:Yûá‡ė”SNiöWTTÔŠ§!Ę{āėāƒļ3fĖW^miIá5ÖXÃ>üđÃdT<_Đ6,lyķU GDsĀ,GŗÕDā§Ŋ&Mšd}úôąáÇĪWĢc=Öž˙ūûųâk‹¨Kgmy•&„€hęŦ]uÕUvÆg,4.X]6ÜpÃ:õ4DyģîēĢ 6,'YĢ--Yš‹/žØV]uÕdTœ×^Đ6,Lyķ^K 9`VKķ”´ˆXqÅ­[ˇnÖŗgO[f™e˛ĩ:t¨íŗĪ>6jÔ(;účŖíWŋúU6Í-f °éͧ›‡] ŸNO—/„€Xœ(*Yãmú™gžąÃ;,‹Ųģīžk[lą…õčŅÃÖ^{mûī˙ĶŽŊöZ[sÍ5íž{îą­ˇŪÚļÜrKģīžûbÄéŌK/5,@øÃâņčŖfuúIēŧŲŗgÛēëŽkk­ĩV|s‡ø0hüã˙ˆY˜jdŖČ.ģėbŸ}öYŒīÜšŗĩk×Ξzꊸ‰‚úÜ˙ũuĻ!0xđāhA žeee1˙ęۆÚę‚Ū|åyüųįŸIãFmdšĻVWĖÎ<ķˈķžûî vĀÄđnģíÃX57ß|skßžŊ­ˇŪzļĶN;Ų_|Ķ^|ņEÛyį "@˙Ø{īŊc|]˙ōõ]ōåĶÉu _÷īßßfΜiX‘°0]rÉ%ĩWWß2dHŧO–_~ų¨˙Ą‡Šúęēîųú<÷äméĨ—60ŨvÛmŖŪ>ú(ęÍW^­˜“xŨu×ÅßaũķŸ˙l]ētÉfšå–[l›mļąįž{Î^zé%ģā‚ ˛i'œp‚ 4ČĻL™bĮwœmļŲfŲ4NōéœGH! „ĀâŠĀÔŠS3ÉãįŸ΄;3nÜ¸ĖąW}™ŲėœĪ3'\˙m&LÖz„‡kØQģ Ræī˙{VhėØą™0}‘šķÎ;3ŗfÍĘŧđ ™đļ H”Ų`ƒ 2O>ųdæŽ;îČŦ°Â ™Ī?˙<ĻN2`eŅĘÜtĶMņxå•W˛zũ$]ņaĐËôîŨ;ŗÕV[e€š ¤)Ūčc–0eÂ`”ŠŽŽÎ\ũõ™_˙ú׎*,`™7Ū8æųĪū“Ye•U2ĖÅôÚŌ˜6mZ&ŧĖW_}•Õˇ0m¨OyļgéÍËEÄ<’l}üdqŌëēŌJ+e¸†80īÕĢWôéĪôĢ+¯ŧ2öë@ė3aOæĩ×^‹˛\×0íĪékģīž{<¯í_]}ˇ6”Oŋžøāƒx=ôĐė3 )úØce:uę1ã•B@īžû.ŽŸđ#žßđ"¸KXΟŊ<ĮƒÕ?ÆÁ‰ęâM¤Ã¯āYđ-ô2^ņŒMō2ÎėĶu‘UŦJXÉŪ˙ũŦ(V6Ŧ\GydŒãÍųC‰V+Ŧ l…ũã˙­\Œ3ÆîžûîĮ”âW\aųžc’ĢfaMÍ]wŨeXęJëØąŖ•––F9˙‡5Ĩžm¨Oyäa‹1m ¤7✴\ž8cÆuĨ/Ü{īŊŅröđÃÛ~ûíg`Čulķ9įœC3ŖåŒ8,\¸@œėøã–5ú} .WWß­M'–ģp“FëĐĻ›njáE¤Žâbzžžf´Tai/CQ6ŧLD+6ŧÚŽ{ž>O]mĩÕĸå9ŧÜX °°ŊūúëŅzKž|åԘBX6?ųäģũöÛŖ5īŦŗÎ2ŋfåååvöŲgGĢÛá‡nÔON!°$ PRŦFō>đĀãāéeB˜fI:ÂI’Äô¨;Ö¸đwĩ-ÎĪUžįÃO¯ ė܎8âÛd“Mâtįßūöˇ¸Ļ,™']wĩĨšL.ŋžm¨oyÁ2ĢÁĀĪ€›t‹;fLA‚ÕÅøHķI'›—ĢŸíĩ×^qÍ\ëĶN;-ęÛnģÍvØa‡$,9ĪséLöŨētvīŪ=ž80íœ^•ŗĀDdē‹ëĘ"{?˜>蠃˛šr]÷Búŧ+hĶĻM$}`[HyžoAü`aˇŽ]ģÚyįgÁĘn7ß|s6{ÛļmãË͟\ã•W^9›Ļ! „@sG (dÍ7Üpƒ…iÅyđdM e_;4~üøø@N–ųË_âÎ1HZ˜†ą0Eu`-`ũ Žõe,PÆå+/&æų÷ĶO?EkGŌ“ÅjĖ‘†,d YĪÚŌŌz<ŧ0m¨Oy^n.ŋ9`ÆZC,U%Č !ë­X›åV],D§Ÿ~ē}ûíŋŽ]eŖIDATˇŲt6z`Å}đÁŖÅˆõdĩšēú.eæĶÉú9ÖZōŅDČĮQG fmåՖF›GŽ×S˛î˜cމV§`ϝ-[ėĮXøjëķšÔˇŧ\ē’qaš:LÖÛąÉ%ũ‘mĘÅaãŪ‘B@,)…Ŧņ&Ėā…e,阆âmšŠ94ŗkHŌ"€k›öß˙¸Üu0Į4Ķ!XÅ|pĘWƒ5› ~äëׯ_\Ȍžå–[.NqŽžúęÖ>ÅÁ“iĻ^˜2ũôĶOŖ%Šú ͎oßø ’ÚŌĐKģ)‡ÅčlZāüņĮ')ēmC}Ë{įwâô2V Ļ”đ!ŋûŨīb=šf4„‚ /ŧ0ZĘbÃÂ?ĻÁMl Ą¯a)"Į”6͟,¤‡€ŗ[™ĩšēún><ōH$!aMBÜ´‚u“Í*§žzjmÅEĸ™¯īöęÕ+NBúÂZLc“Zøēvm×Ŋļ>˙›ßü&žHQ_6ĩ°ŸÅ˙&LČ[^­¨#ņę̝6,žėeša9! „€0kÁÂĩ$L`eajæü{&ÛgŖĢ­˙*mėĒcænąOĘû9ƒBúMØĶXia{}>Įā•܆;Ÿ~úé¸S4_>vÉq°6É]!åšlÚĮRץC‡8E•N#Æhû´Ģ---› ס õ-/YļŸ7Ėŧ-XĖr­gb ëmōsäaZkyå…"ŊžĐõæķsõŨ…Õ™¯ŦēâiVEĻ uuõųÚôÔ§ŧÚôÛŽ;îhoŊõVmbJB@ =,!*ôįĻ|6 ļŠžyûXúũ,ëˇ|‰]~xˇ8kĀ”^ĻT”š×åŌDOŒ=ژÁrīC瀯‘t…”—”OžŗfĻ6—‹¤š|mi.“˯oę[^Ž:4Ėŧ]šˆil,I5âčciĒK÷Ũ†ĐYŸz'š–ąPuõųÚôÔ§ŧÚôaŅdŠXN! æ"P˛6ˇ¸ÂĪ|„oĄÉ b"ĀÂÖ~åsásqz>_ēâ뇄šoāÉ ! „Ā\š,YcM‡œX°Ģ2|×kQ­2…€B@˃@Q6ĖSĸB@! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€#в`É_~ųå¤$"„€B@!P( FÖ6ŨtĶB˔œB@! „@h´@ ūŋŊķ€ąĒJãøĮ  ę‚ĸŦ b7̰–XvÕÄĩˇ‰-jÔĩĮK,ą—XbīËÚ FŊ#ģjėXШ…†˛ķ;oøxsŪŧÎ˃™˙IŪÜsŋķsîųŨû¸žsî}rjXĢuõ)" " " XĢ”ÜD@D@D@D $ÖĒA]}Š€ˆ€ˆ€ˆ@…$Ö*%7¨‰ĩjPWŸ" " " "P!‰ĩ AÉMD@D@D@ĒA@b­ÔÕ§ˆ€ˆ€ˆ€TH ĸ—âNš4É.žøö ›”›ˆ€ˆ€ˆ€ˆ@9“ęˇotTÎÍ*kũû÷ˇąÛŒĩ.]ē,Öā‚ šŲshÜq߯ōœ-–“w߯ōœ-–Ģžøų5âÛx}älą\׏ŽŋF|¯œ-–ëúŅõã׈oãõ‘ŗÅr]?ãúųė•ž6å×â3ß|ŋ"ąV[[kŊ{÷n^;X*šđ‚{ŗŦꗞ͠ƒø‰_ņĻÂåQ6ĢëG×ŽŸÅƒeŋ4ÁAß}–öûƒžĒ$U(ÖjŦoßžŠŊxQzŪˇ8xŪˇŅV*ŸķÍŲTßČ"Į*g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųÚÚvËϊÄZMM­õėŲ3My=¸ĸô2ļž(ķ}ĪGÕŋx=ø5ĸë§@ ōđ|äĨīž?ņzđkDß}üßŨ zÄŋņûâŒØVKŋÔÔĖoė}‡ĐbĒHŦŅ‚ĐˇŅæ=x™o‹íÅuJų•˛ĢūĸķPĖ"î‹ßâĶ‘GŠŧø-ēļ"ŖČĨĨ|,S}]\žâõP*¯—ųVõ "Ryņ[ū¯ŋŪKmõęŽRdde€€ÄZŅIxīŊ÷ė–[nąúúúĸ’ö۝={ļņē”YŗfũŠN˙ũwcûę̝Ú.}Åuûīŋŋ]vŲemŌWqŖįŸžŊņÆvŅEŲsĪ=gW^yĨM˜0ÁÎ9į›?ŸEˆ-§ /ŧ0‰÷ÚhŖėŅGĩ­ˇŪÚMËÜŪ °ûīŋßn¸áÛi§ė駟ļ3Ī<ŗéÁ”‰l­ŊöÚ)Ōôæ›oÚôéĶSÛ̝žÚŪyįëͧqÄæQ$7bωLŨ|ķÍIˆqÆ)útúé§Û¯ŋūj'žxĸíŊ÷ŪIzloģí6›:uĒŊõÖ[vôŅG§~˜úBD}øá‡Š­<°YŊØFĨyĸK}ô‘mŗÍ6ļņƧhŪú믟ƂxyûíˇmôčŅIŒYœõÔSÉ>vėXC€ fFŽ™¸ 8`°ÚjĢ%á†˙œ9sRūėŗĪNâ”åž{îiwÜq‡=ųä“éĐáAņ˛īžû&Ļ´KjĢ1§Æūá<0^Ä&ŧŗ¯ÛģôŌK“håŗī‘GIĩp?˙üŗ=ôĐC†c&1•ŒĀE´˛ū!Nâ âü>ø`[c5šlšôr¸ˇßtpú#" "Đá pbŠÕ’ĻåFŦ=AX *ˆˆ!ŊôŌK)"ōÄO¤2ÖA"ĮÍûÅ_´+ޏbąi.„RĖ'CøãkŋēwīŪTHŖøŖĮđîģīÚ AåĶ+4Y2‹X!ų¸J9Ō7Ņ´]wŨÕ?üđ´ļã¨ĢĢKę ķˇ"û8ƒD㈭ēęĒļĮ{XˇnŨŒ(Ĩ§•W^9E͘ФŪ/ŋü’ŠÚjĖŪoņÁFâžūúëIl˛žķĪ˙F¸HDZüņĮ5ŖÜ_ÜL„quÖIŒ˜b>|xōgL|ˆĀí¸ãŽ6pāĀfįŸōöæ›ND@D@:4f}jÜģ—4-7b(#Dˆ¯!Cā0IT„˜Â;å”S ŅAbʏč "ώžųæ›&>.ŽæÍ+˙2:*š?b‡iWDS‡—\rIS›&3tčĐTéȘŪ%y9yŽ…§]Ô0ũ“k´Á!ƒ ^Ë8~mz”ÉëˇÕ˜Ŋũâ­ HÄQPŽ›1rŽ<ōȤÎQG•„×ĀąĮkĪ<ķLĮĪ8aÄX‹ĮC{ŒÛ9÷Ŋ=ų÷¯}ŽEĄöāƒ&Ąīģ•Ž˛EąÖxO[fƒ#JrĐAĨĩHLrĶe=ŅÖ<í°ÃiÍ"„PãįŸžÖd1ŠųîģīŌxˆ<1­Ęš'„WK QÆtœ #ÚÄÆ´kĘxâ˛5Ķē|kLG’ˆ ŊöÚk)J§[™E Œ?>‰ /㸈0QVœ{Ŧ #RÅ:?ļŧ"„)ĮrŠ­Æėũrn™~|˙ũ÷“øũāƒŌÚŊu×]×6Ųd“äÆšcĒwË-ˇL‘CŒŦĶcŸénÎ9\¸&đƒĶÕ´ÍTiLĨDšû´7_īW[ŽG€ußQ¨ĄO<Í_øƒO ' ŨÜlÛâ}zÔÚԙ [kVŊ} ÜdyĨÆŗĪ>›ž eí¯ĩ@tøš4"0U†7{Ę3‡+_|ų°ĪÔeôMģŧŒzÅĶlŠ“ĨüÃąpDšxįũŅĮɇĩjŧÆĮ1Á†ņ’8.X9cė$ļ”sNYĪFû\<Ū\鋛pL.V¸AĮ_ Ī šaķņäyˆ#OØÜŽÍë"ÔH^æb [ņ‹'Ļ4>ļØĸ;c‹åØaÃąš€Œė°QŽ@ŠcĻíØûą^[Žš¸_ú.NœÎ%âĖŋrh—‹ķæ}P7Ö§œ­ŊųrJ" " ‡@%Bí̟ ĨÉĀ>qV,ԜHVŦšķđÁ]­GˇŲ6Ģ1 õÂĮsĒ&Öü`;ĶÁPœ8/ŧiŸhRëßÖgĒE@D ŗ`ˆ×Šy-QƒÉs ŗ}Ė^Žš•cMčJN’rãęYWc[ +¨Ŋˇŋœkŋ[jjA™v%Ā4¯ŋR¤];î$‰o'9ŅĻˆ€´„Y%Bí‡)ķėĨ˙ÄÚ¨ŋ˜ ėÛ|ę3^VŦ!ÔüŗĮČZëŪĩåšúŲz›1ģyÄ'6¨|ÛČEÜÚļĮÎÕēøvŽķ­ŅŠ€ˆ@k(Ž ī{?č¨ ™f-WkÛÎ# BÍu—ûÅmönXŦbũk…žū ŪnŊ ë÷¯ą˙Ŗ—­Ūŋ°(<6Ļŧˆ€ˆ€ˆ€ˆ@ž3”ž~šVøŊīŽœoûlŅ3͘ąŪÜ.@¸Å”k8 ÖX|Í"nÛĩ/Ėĩˇž.´KĻū6ŧÎū>ĸΆŽ,ҁ*/" " " N ~΂ô&k˙YRæiôš6nLˇ$Ôx€Žõčˆ5RYą†‘5žä‰Aĸk.Øyožũg‹Û)žníō~ūŊģ¤W|P_ID@D@D@:;ŪS;yę|ķ—߃Ĩe{ūuļŲ°k“Pã- ŧŊ€Wj 5ę4‹ŦaDŦųT(Ņ5^}€`ãCoü§]mâän/mÔShN {í|ĩVƒí4ŧÁVP—^GED ĄæQĩRëÖJ>+JJ(܆k˜­;hŽũō{Ŋũ÷ĮŽöی.6ĨžÆĻĪĒYL96?LYD@D@D@D s œÕĢn ę3ĪÖ8Ά šoŊ{đrũē$ĐXŖæ"­TDÍI•k8DÁ†P‹ļUj5×(â ?ˆíåÉID@D@D@D “đHkŅjk ŋĸƒ@C¨ņ! æ´„*+Öhņōø> ĶkÚbÔ ‰6((‰€ˆ€ˆ€tVč%RÔMŽhh¨\TÍësˊ5ī X°ÅNũg˜$֊‘j_D@D@D ŗ@3šnōee…[mĶÃqúŗ”PƒcIąF!Ŗ`ķNéĖEš¯eÃOQ5¨)‰€ˆ€ˆ€tvh&˙ Ɗ?^'ō-ĨŚ7ā‚ÍĻCgqÛRG*ÎDĀuSnëĘ 5üƊ5œŧĄ(ÚČ{Šų–l^Ļ­ˆ€ˆ€ˆ€tDŽ™|lžīÛbģ­HŦyÅ•ŗ{šļ" " " "ĐŲ ”ŌQå¸,‘X‹-m‡ą åE@D@D@D@Z&Pøuö–}T*" " " "P%kU¯nE@D@D@D k•P’ˆ€ˆ€ˆ€T‰€ÄZ•ĀĢ[¨„€ÄZ%”ä#" " " U" ąV%đęVD@D@D@*! ąV %ųˆ€ˆ€ˆ€ˆ@•HŦU ŧēJükm˜īČ#YjIENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Rename.workflow/Contents/document.wflow000066400000000000000000000160561445560650400312710ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx rename "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{191, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Revert.workflow/000077500000000000000000000000001445560650400246265ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Revert.workflow/Contents/000077500000000000000000000000001445560650400264235ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Revert.workflow/Contents/Info.plist000066400000000000000000000011671445560650400304000ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Revert NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Revert.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400303245ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Revert.workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001104711445560650400327610ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëUiCCPICC ProfilexÕYy8U]Û_ûĖŽs Į<ķ,ķ˜yžįšpĖķŒáˆ‚^'øÛ9ūeŗæíŖ÷—đ 00ūmƒ DīöÅĪ9_P˜éîāžŠĀ"á:H3  ôūĒ%/ ĀšXX‚ĀŒCāap›0“˙˛Ķũ‰Á¯v~pģ÷H^°mĖß}ūî ÷ųĮgđ†ņ9îcWˇ;ē(÷€Ôúücąëī×h¤kĨßIoũJ%‹R@é ÔQ(@F1ŖØ$JĨŒŌFiĸÔ` 0¯aĪ~Ƹë?¤Ņ7ölXŧǃ?ŦŨũīž´Āá—uĀßŋ˙c `hšeųĪˆö9ŋ膅ĮGøųG“ĩá7×G‚lę%%A–•–‘ŲU˙ŋ)ģkÖīÁŽÚüZ‹ æádūj¨-€E˙# ˜ öŧ˙Č:āđ fÔ+&2öˇ?Ôî ¯„´p„˛nĀDāį, áĩQ č` ė€3pƒãĮŽÁHA HŲā$8Š@)¸Ē@h- tƒ{`Œ€ 0fÁ°VĀ:؄  !ˆ â!qHR†4 }Č ˛œ!Č …b Dč” åAEPT ]‡Ú nč4 MBsĐ;č ôDŒ.„bBĄ0EØ!ö#üˆDââ,ĸqҌčF &ŗˆ%ÄW$@R#™‘ŧHI¤2Ri‰tAú"#‘‡YČd9˛ŲŽėGŽ!g‘ËČī( ŠEFIÂqj„˛GyĄ"P‡P9¨"TĒՋCÍĄVP?ŅD4'Z­Š6F;ĄũĐqčttú ē Ũ‡ž@ŋA¯c0fŒ0F c„qÆbbr0%˜Lf3ųŠÅbŲ°âXuŦ%–‚ÆĻcĪa¯bī`cß`7pÔ8œ,Îį‚ ÅĨâ p5¸NÜcÜ[Ü&• •*•%•7Uü4~•šššZ…Úš:€ú0õYękÔ÷Šį¨ŋH1‚.a!†p‚PIč"LV‰DĸQ‹čBŒ&ž Vī_7hh¤hŒiŧi’iŠišiĶ|¤Ĩĸ¤ÕĻuŖM - ŊA;LģLGE'D§KGĄ;DWL×F÷”î+=Ŋ Ŋ%}}} ũúE–$DŌ'y“ŌH—HwIķ H~]/†#  } o1ŒÂŒÆŒŒŲŒuŒCŒ+L$&y&ĻLÅLˇ™f™‘ĖBĖÆĖÁĖšĖĖO˜°pąhŗø°d˛ÔŗÆžĮÖaŸCĩÃ7G=Į<ĮY§=NINÎėÎέ.X—+._]õ]ΏžŲ§°/}ߓũÂûėāÆîėv۝֝â~ÃíáčQãąEऔSžz{ž÷\ņŌõ*ôZōÖōÎ÷~įŖî“įķÖWŨ7ĪwŅOŨī´ß;M˙˙åŨ€ĸ€ĪFĨß‚,ƒ*ƒv‚ƒBp!!mĄ¤Đ ĐŪ0î°aŖáâáéáŗĒg"V"M#¯DAQûŖZŖáäp0F$æhĖ\ŦFlqėFœC܍ôB ƋÅgÆŋM0H¸|uĐë`O"obJâ\’vRŲ!čįĄždūä´ä7‡ WĨāS‚RĨJ§æĨŽq<ŌžÆ•v8mū¨áŅÚtšôČô§jĨĮPĮŽ eĘežËü™åõ0[:ģ {+Į+įáq™ãgīœđ=1”Ģ˜{á$ædčÉ'§4OUåŅį%ä͟6?ŨœOÎĪĘ_;ã~æA|Ai!ž0ĻpöŦŲŲÖsįNžÛ*ō/š(Ö)n8Īy>ķüˇī’Į´.ԗr•f—ū¸pņY™aYsšPyÁ%ĖĨØK ũ—•/W_aŋ’}eģ2´rļĘĻǎZŠē熺&ˇQSûîęžĢ#uzu­õ’õe Ė Ų×Āĩ˜kī¯{\ŌhÚØsCųFũMÁ›į›š˛šĄæøæ•˙–ŲVįÖŅ6“ļžvĩöĻ[Rˇ*;x;Šo3ŨÎíÄwĻuîÜI¸ķĩ+ŧkšÛ¯{žĮŊgęŽĶŨņ^ëŪĄ>Ķžû÷ îŨí×îŋs_ũ~ĮÕm•ļ (4* 6=RxÔ4¤8Ô<Ŧ4Ü:ĸ2Ō>ēw´ķąæãî1Ŋą{ãÆãŖOėŸ<{ēīéė3īg‹“Á“ŸŸĮ>ߜ:<žÎzA÷ĸā%įËōŅ™†YÅŲÛszsƒ¯l_MÍ{Í/ŊŽzŊõ&m¸Pđ–įmõĸėbĮ;ƒw#ī]ßŋY _Ú\N˙@˙áüG‘7?i}\qZyķ9ōķǜUļÕĘ5ųĩž¯V__އŦo~ËÚ`Û¨úŽüŊ˙‡ãˇ›q[Ø­ŗÛĸÛí?MNī„ėė„S")ŋr$\#|}øR sg˜;Œ€īúÍ)~YĀt‚m`Œ„ķ_!`į§×Ā7HJƒ&jˆjxŊ€AuŖŨ0Ķ‚=„ŗ âĸÚĀĪP?& Ō<ĸ§["á$͙R˜¯˛ŧ`ceˇāČæâĻį1'įđNđķ ø Ö}Qģ+AÔ—JÜĶ%Ŋ-k('Uგ ˛ĩJ˛jŊڜ:Ŗ†ŧĻ•V’vĩN‡îŪŠĩ!‹¯ą¤‰’ŠŽ™ĩšŗ…ŸeĒÕ9ë:x%xiˇâ™D•]l\#ö%ī?áVåŪé1J™õüâō!ų øÉûëX:y„Ä…&†e„gEäEæFŒ>“›WxātüɄôƒÉ‰1I҇“)‡R SÕČ§IåN§MßÉX=ļœ95Ũ–SwŧųÄėI–S†yņ§KōĪėJŸu;—VTWüĒ„xAŽÔãbNYSųdâ˛ČķʘĒãÕ 5CĩęhëeLŽy^oĖŊQuŗ¯i´yąågm;ī-éÛæwŧģÂēôš›×{ž¯ö^KĪũ;†N , ž~46ty8fD”4:ũ¸aėā¸ÁibæIũ̓ĪL&Ų&_?oĘ˜ļ{!đbķe˙Ė…Ųˆ9ŊW,¯>Í÷ž.}“°`˙Vf‘~ņĮģ'ī;–Ē—OHųû)hÅ˙sĀ— Õøĩœ¯ÕëĪ7ž{ūŨ ūéļŗŗ'0{f‚`/p‡@5˜‚3;Kč4…FœBü@† ßŖbŅt5Æ‹Įā Š‚ņ&Ô{"DfZ.: z5’-CcS%ķ}–u62ģGgW3÷ 2¯Ÿ+Ļ@›āŧ0^DZÔ\,Dü´Ä-ÉįR_ĨeTdåÂå‹šģ•ž)oŠ2¨ņī•S7ŌđԌƒŖáŒN™n•Ū ũ;ƒ†SF‹ÆĢ&ßMˇĖļ-P–´VŦÖÜ6ŧļ"vōöĘŠŽN&ÎĻ.&Žvû÷[šŲ¸ÛxØQ\=ŧėŊ},}ÍüLüu4Ղä‚ÅBøC9ØÃIt‘Ø(DÔVôZĖĮØˇq3&ã'<FĖĪ2ČöÉÉ>~íÄpî‡Sø<…ĶųQgŠ ē įĪĄŠÄ‹-ÎĮ””^č/ũXÆXŽrÉ­"įr˕é*DĩTGmÎÕļē…ēk×Ŗ/ܸųŖyO‹_kA[ī-¨Cęv@g靑nLöŨ”ŪŽžĩ~ūûĘö>ÔPT|¤8¤8Ŧ8"3*öX|Lxœ{‚ũ ãSÂ3ĒIhrûų§Š÷Ķī^ŧ{97ķfvfnîÕėü‹×ķo>,lŧŨy‡{Īž$ĩŦũÁöcø§Ŧ•ĒĪ_>¯ņ|5[OøVˇąđƒs˙Véöâß_ķô0ߒæ0ˎÁGˆr…ķö„â b )ƒĖGnŖBP¯ŅžčEL8f›‹Æ=  Åŗā{¨Ŗ „%b=M4­œGŽŅWŦ…™ Ļ9æ>–JÖ ļ@v;]N!.,×:÷žAr#o1_:¨€ĩ ĻŸ0ZxCdB´YŦDü°„줁YjkĪ3éz™#˛.rbōXų§ W(™+ +ī¨L¨VŠ%ėĩP×@iLi^Ķ:ĻíŖŖ¤K¯ģĸ7¨Ų ŅĐÕHŘɸ“É}Ķ2ŗxs[ KŦå+Ģë›h[c;Aģûg×3ŧœ]č\\Û÷åî÷sĶvgw˙čŅM)ô ķŌ÷æô^õšī[ėė¯ĀīõŊAį‚cC BšC×á}Ŋ>âh¤W”f4o ˆ™í‰+?ī P,‘>q#éåĄŪäēÃįSޤFqKŗ>Ē‘.™Á{Œ!ų#ëSö|ÎŗãŖpüôŸė<Ք×pē1ŋáĖՂŠÂËg/ž+-*/.>_^rņBeéPĒ\ūĨâÄåÎ+KUôÕ*5^ĩĮ¯ļ×-6°^3ųCãMÄf–ČÖúļOˇd;Üžs‡ÔÜ}ë.worßĮ~īûĶĻæš÷8f\˙‰ø3†į‚͆/“g?ΟX}—÷Áúķđ†Ķîü˙>[ÚŨ0ŠœuĀ™ kCrö Ô +"v*!Å ¯=ŌÉũ{˙`ĒđʑJ`ž8Ą ˜†Cų0ߛA`R{Dâ2bņɏ´F&!k“(|‚ā3ą!4­ŒA_BOa˜0V˜lL?‡5ÄÅöãˆ8\nžJ’*šĒĪ„÷Æß ÆRģSˇÂĖ'„pŸ(HĖ&ŽŌ8Ō´ÃlĻ„Ž@wn…>”ū)„´ÂÍđņé$3 s‹K;Ģ)ë [,;žŊ‚C›c’3œ‹ĢÛ™{‹§‚lIūÉ[ÃˇŸŸÄß'įú߄ڄ“E DŠE'Å*Äã%L$E¤ĐR3{ú¤Ģd˛dãä|ä÷)Ø*Z*é+¨ĢZ¨yė PĶHÕ,ĶjĶžÖų¨GŌW1đ3Ė3Ē1žlrŌ4Å,Á<Ü"Ö2Â*ÂÚĮ&Ô6Ė.Ų>Įá¸cĄSŊsË¨ëž7nwuGJĒgš×¤¯ŒŸˇQĀXÖ 9:ÎŲõ3Æ#ļų1>4a$Q!éR2ũáC);G‚Ķ>¤‡d,gúg}Ę ?ž‘›vJ$¯1ßôĖDáĄs†Åv%ÁĨGËZ. _AU)×D\Ŋ\?í†oĶ…–ˇí{;ĸ:‡ģ‰w)}-÷Ą‡ÎƒĨCKŖęc™ˇž‘ž[O§ŧėũ2ĪōÆč­ÍģØĨC’>Å|vYåY[X?ˇ!ņŊr“jËfÛíįá_ë‡ |žUúĀgˆ2†ĸĄRč!´Ž #Ė`_‰G"‘˛H 2Ų3rI”ĒõE렓ĐčL<æ6`õ°™ØĮ8Nœ?Ž•ŠŠĘ…Ē–ę'Ūæž>ÔŨAB áŅ”ØNCĻÉ Y§  }AgM×G¯J›¤@jbPcčf4bereZ`ŽaÁ˛\`Uf}ÂÎNÍ^ÃaÎąÆYÄĨÁĩÄ}Į”gƒ|7‡oŠŋLĀSPXpYčšđaKQ.ŅobCâW$ŽIúJf—ÁČŦÉÎË=–ŋĢĐĨxS NCUUÛÔ:÷ŪS‡YŌ{m”Ž°ž†ū>ƒÃBŖ:ãF“ĶZŗķ6‹~ËQ̧Ö36Ÿí {nIGe'{įh—L×ō}wöĪšc<¸)Ļž^ĮŊoøLûaũ|Īõ  ķ /‰xĸÕbbc¯Į}‰WNˆ8X—øífrúáTâ‹´˛Ŗ_2¤Žee>ÍæÎ‰<>K>uĒį4mžį™žBŪŗEEZÅK%EĨîeLåc9WĖĢĒßÖ6Ôå4x\WēÁys­yēĩ­ũfGIgJ—wkīŪ{ō÷ɉ6†gFûƚ'ĒžfOO™ŧИažũōjüuŨBęĸÃ{îĨĨˇ>e|6_ĨY{¸~fÃüqŗc;ô×ü̧HM` ’ƒ" Fh Ą€8€¸D ‘Į‘OP<¨`T+ƒvDWŖ71˜Ë˜ŦöŽ…{L%OU‚Įâ#áŦŌŽē— Nh%JoĐČĶ´ĐęŌĐšŅ­Ōg‘$Hƒ ąŒŦŒ™’˜Ĩ™įX YmØŲž˛ŸápæäįüÂÕÎ}ŠĮ‹,ĮKÍģĖwŋB C0LČUØLDCTJL\œO‚_’[Jd¤´’Œ‘ŦĢ\˜|ŽBĨâ°Ō7UCĩ¨Ŋuę šÜZû´‹ufô$ô“ ƍ؍ŖMÆĖÍOX,[ŲX_ĩeŗK˛_t4vjsásÍۏsKp_Ĩøz>÷ļõöŗđŋ¨ÔĸÚŽŅī ũąqcņî īã“6’3R8RĶ gxûžu>Göøxnä)B^{žÍ™íÂķįHEąÅS%Vē/*–U_âŽ(ŋ"TYį 7Ž*Õu4h]ëk4ž1×ŲŧۚĐļ}ëômÁÎĒ.ąîĢwĨzîI÷_}@ķ0gúQäĐüˆõčĩ1šņā‰OŸž|2Å:íôâė˧ŗLs6¯2æë_ß}3ĩ°ŗČôŽ˙=ßī2ĪŽlˇ?Ŋ\éü\ōÅUfuuíúאuōúġ˜ ÂFÅwųīw~˜ūx¸Š˛YĩŞ•¸u›iÛsģ~{ķ§áĪ“?'wøw‚wšwį?ĘWNvw÷A>~|šŗŗ*Ÿ_æ°}jggŗ|ggûL2āo ]ÁŋŋWėcā3÷ķ™ģčîõĒŨÛŋ•˙A4zXąî8” IDATxėœUÅõĮĪîŌ;"ØÅЍ¨Ø;ŠŊwc‰-–Ø{Ī?௒bšhŒ%1jėŊ`¯ˆØ°Ą H‘ļ [ŪžŗœĮåōŪîcŲ},Ëoöswî˜93ķģsīüûJƌ“19! „€B@f‰@iŗŦ•*%„€B@!YSGB@! „@3F@d­_UM! „€"kęB@! „€hƈŦ5ã‹ŖĒ ! „€B@dM}@! „€Í‘ĩf|qT5! „€B@ˆŦŠ! „€B # ˛ÖŒ/ŽĒ&„€B@V‚@ĻC “ÉXMM}õÕWöŨwßŲäɓ­uëÖF<ޤ¤$ú /šxÜyu™••Íß{oIhj^ímËAËØūĮöąvíZĪÕb  ūŠ?ę~[ĐįÍĸÔߛāZh*KôsS {܂pâQ2dˆĩmÛÖvÜqGkĶĻM$ieee-¸õ-ģi\[ŋžøC>™hŊ{uļŌ@ēáŨá$ā™Zn3\Čō™U‡UÕûũT{āŽĄ6éģŠvųõ‡>RûîėƒimŽÆųīõ-´?ē|žŌIO×3ΗWņ‹\kīø‹B_´.Ŧļķ÷:X˜NI ÅäƒmĈҞļķÎ;g-j ˜ĩ{í Î §đ,<¸Î\ËqŗĖĘkĖfT‡#Sj3Y+GE`k„g⇴éÁ/¯) éĨÖaé.ļ˙)›Ú”.íėūŋ˜k@lˍ!ũąŦ´ÔJ“Įlë/׿ųįžąüãY˛Fōø~¨?ĪÁLZ‹JoĖ{§9éŌ4hsēĒK‹A€[UU•AÖÖ]w]ĢŽŽŽƒ{uuU‘áA.ҁkčחë:qzÆ&ͨ˛’HnjÂ5­%.ØŌ°ŗŊôô˙lëvĄpÉÁËëZ°°ŋŧ˛ÄėĐ×ģíu;訞ÖĒUĢØ'ûFđúÖ×)ˇ˛˛ĘžķS°ˇĩ*kn•ŲôéĶė駟ĩũ<ČÆû)ôcˇĄ=Õ5Ö­[×0\k1Vŋn9÷õĸØßéĮ-͉Ŧ5ÂũųįŸmƌļĖ2Ë4‚6И_ˆÆŽk˙ũīíøãŲ,šŌQæ?ūh=ôPÎ2I¯ŦŦŒ–—^ŊzâVxˆÚŦĘYÁĘÖ&Ę<§Nj÷Ū{¯ >܎9æ[{íĩŗm¸âŠ+ĸūŽ]ģf žˇËÄĻ ×U?,/´‡O}’õMÖī‡~°˙ûßvĘ)§DyŌ’éD.*aÚ .qŽņÔʌ͘Lkažĸ4ĩL˜÷ôî÷ŅģCėĸ3ŗËoén6Ø"â$# Ē ŒmfČÛĩg9ž4ęƒė€CcģúúcĢV­ŗøO™2ÕŪųĸÜÖîŋ‚ͨ(ˇV­Û[åŦrkץƒŊđü3vČ/´ë­mSĻWÚˊ*ëØąƒ}ōÉ'‘¨učĐ>[õd˙ rA¯/:^ũu?~ŧíąĮķā´ ú•ŋ–`‚3ÎņXû{m ZÖMƒ6āzŌyũ8ųä“í ƒŠƒė Aƒ˛ņ¤Ī¯søGqDÜqSĻWØMW^ģÕÍW]`“§•ÛŒĖŒJ rfīØ´WÖĨŊM›6-Ûw’}ŅûͰaÃl“M6ÉĘ_ˆķüuõGĮĖ9FN(ĩ¯Æ•؈1•öøŖØw?ĩļ×Ūiå“´5ÖZۆŧū‘ŊķöPkÛŽ}°†Z”´ ųæôOŋžčZb‰%l­5׊æõÖ[Īnŋũv{˙ũ÷m­ĩ֊eÅ~đËwŊ“éīŧķŽ=ų䓖ޝ‡›ę~XœõģŋŌ§GYÖæķĒ'oŋũļ}öŲgaZāé¨Ĩŧŧ|.mČōvŌ÷—ŋü%Žqōŧ ĸËu,¨Ÿl;ēxpvîÜ9ĢļšÔąPĖŊ=#GŽ´}öŲ' ۘBtxū\ífā™5kVœÖŠƒM‡Q6đÄW… GŪ—_yÅ9ø`ëßŋŒņÅađc:Ē2ĻW…ŧ•ėeë„U*JÖūcČnĖ0S_ŽúŊęwđėúQ‡Ę@RXƒãÎËG–#]_ôi´)4$Ģ}ž?­¯š†ĢAŽ ×„6ŅžŠĒ66+XÉJ´fMi˜"­Sž§îŋĶÆemÚļ ūh{ėūÛm—ƒO´ Hk˜: ĮŒĘĢŦ kšÚˇļ™3gF’ŊÎ0sG˙xöŲg=}Ō“ōs%&uõGÚ@DdgfčŸÃ>™,Ā?ÛŦé“ė­į_ŗÖKlgīžô„íģŨš6y†Ųg#FŲĪ“'ÚĘĢmp¨ļņgڒŨKk×e†rã­Đ.¯˙Ŋ÷Ũk}úôŠ­Q¸æā÷â‹/Öö‹{S¸EŌũüŪ?8„.øÉûô\ũąļ°€ĄëŸĄđlŧ ÄŖ˜ũŨ¯™üyem^L ŠáÁ™ËŌ§Ÿ~ríÚĩ‹'ŌŽŊöZÛjĢ­ėĐCĩĄC‡fã§ŧ6ß|ķhi =>BŪŦwŨu×8Č˙îwŋ‹fŌøäƒål`[nšĨŊņÆ1ĪsĪ=gXķ˜`:Îõ$ũũë_†Ž_˙ú×vā֙īÛoŋVÂt9×\sM,÷—ŋüĨ}øá‡Ųr 8L?žxâ‰öōË/GÜ(ĸųĪū3ĘyŪ4ˇÜrKl+íyéĨ—˛:“uĪ'ã:ŠO[*āųÁf›mļ™ˆĮvÛm-\ϝĪ=÷\û駟l§v˛‡~8ļÃËHכÁrĶM7¸ģUÍˌu``a älæĖ@Đ°Ļ…8âũĀõö[oŲ%—\bômˇŨÖ‡ƒzAp5ÁįüË/ŋŒuÜ:`vå•Wf÷įC[é7ôŠĢŽē*+īeŸŧ{íĩ— 8Đ6ßl3Oß*čģûîģc˙">“Ēß[ŗë‡™z|ķÕWQ×úë¯Ë|!äaĀG_˛žO<ņD,o‹P¯;î¸#^›Xf}ꊧb^00Lĸ—´SO=Õnšé&Û~ûíí÷ŋ˙}Ô{BčģāBŋœ4iRļ} ¯īÂ Ī ü“éĖō0Z1+XÖã´ßąvãS_Ø ŗmö?>XŌĒmz™ä'U„Í S+mô”€[ ką-áūÉᏆ‡~xļĶyQÜa‡"–܃鞈.ßúúŖ_Ÿé?—ÛäIåĩ˛Mv8Å*ĻΰšŖŦīęëØøąŗlũļļmļßË&æÛ^^( }á:ŌßĸžŲũˆ:xšëį%—gaäšüņx_mŽķķĪ?_›ŽīÕĄO¯ŗÎ:ąĐ3!ÎûËūđÛ4X8ā{īŊ÷bžO?ūØvÛm7ûķŸ˙lkŦą†• ˇËSŪčđ<Ũ˙ũcY`÷ūģīfĶyŨ–$pĶįč§ÔīãŲ:oŧņF[;Xyö0õëõ~3éM}?ĢŋĶoäæ ËÚ,ę=ãĄ‡ķ‡&ũÃ;Ėvß}wc ;á„âēožų&ŪäĪ<ķL\‡Ä sß}÷ÅŧŖFŠd‹ŦcĮŽvķÍ7ÛįŸ§! L đ@eŠÍ§-xčôėŲ3N—uëFâ1<.ŧđÂHŌ°n ¤m—]v‰Ÿ†ˆÍū7eĘ{ābŪÍ ̀ÎĮNE>)‘ĢžÆ+ŲÖWáh uáÁ)ä 6ČcŽŧā€ōüŖŊųæ›qŠÄq]åčĨe| ûúë¯įĒk¤(›tē8˙Ío~36ŪÆŗÎ:+WŽrŦēüōËmß}÷5Ž ._ŊI;īŧķ"–ũúõŗ[oŊ•¨Xf< ˙ĸe ÔÁû„ž¸Š°öĮC}V° L‹ßZĢąC94¸Âíˇß.ČÍ ĶEëÄul3gVD=ĶĻMDū˛Ë. ƒõļc`Ž>æčøIõ×ß°~õĢ_…A{û ?ōN›ũęL=j­Xģ 7Ü0ŧ Ü÷ĐHŠ^y‚]_č˙û߃Ĩ´kĖ=ƒ6xũœ¨뙮ē6ÚhŖ@ĀndųÃ¨Ģ–Ŧ׿ņúž}öŲ‘¸÷[ŊŸŨqįīŸž­(āx˙ũ÷…{ ŗíÛV[oú`k3æ{7 ž`ģė˛Ë„~÷Ŧ}Öō=účŖĄŽčˇšÚGũŖU&ū#}ļÕŽ ÃTĸ&a¨ DŧĘžŸÖĘēN Öĸ’VV…u-Ŧ[ û}šÜYGŊãĶ#üÃ˛F‹ãÔ°tlE¸\í[…¸ZüđĶŽ8,oáSKQŽtî?^Šîšįž85ČË ÷ yˇ¸%õæę•áebZxæp?°Q`Z 7ŗ‚_ÚzĢĩęÜŅÆŽûŅV\ĻŖ­Ø{Y›:mŽ…+Nw–Õ†ũyÅĻ_¯†wįw†{Ŋ{øūäcģčĸ‹Â.ÕģlâÄIŅę?xđļÁ*<$\Ŗp‘Ŧí?tŒ’(K˙ēõÖŋ…iŲ;ė÷Wü>`VëņŪ{īĮ%(ožų†tŌIö֛oŗ–*ėąĮžĄ~ĪŲu×_g—^z‰ŨtĶ-Ųūšt4}˙‹]ģ ûwZhTŅû;}FnnDÖæÆŖā@n§Ÿ~ēmŧņÆŅ:Ã[ßß˙ū÷đy,>,\‘cēK –7Ügœ‰įX§x]pÁ‘t@ėĐëú!-% ųIãAč:ąbáŧ™†˜ūņöČZō2RĪįqX\r•à ‰îd[¨kĢpäĮĒááĖZ”ÕW_Ũ–Zj)ģūúësæĨXe9ähQ‚DPFrpIË`UA&ļ¤q@†¨CēāEŲ ÂCåQōāđ‰Ë×fH:Ø@Yŧ…C>Ņáƒ`Tūy}ø.„tņėŦŊFáÁ>û#\ĩōQ"ĘÕū‹ÍHŧ¨™6b=Û;īŧą~íĩ×ĸĩië@t §´yīŊ÷ŽYKäÅbÆZŸV­Ęĸĩ‹v@´¸î8úq—.]cŊbÄlžŦŠ ›#\WiØHūZ]C㚤˜7Tk3ņ ˆQ[ląE|i`@cĐŖŽũë­ą<ˆ׌>JúQGeË-ˇ\Ėׯßę6a„H!xÄ'ۖ<Šđ/^+Ļ=)ƒ@´ ס2 ŌĄÚpÍJÂnOüZĮkW?\zū‡´@æ‚pPaÕ%eÖļ,ė Åõ>ƒTŌy<>Žūæîâ‹/ļîŨģ[ßž}#!B&&Ž#WtīŸŽ›Ąą˛@ÄĒŲ™Y1Õ~üōģ;î’˛6ļåÖģŸá#lŒÄŽ2´›ëį÷Bm]jkÚŖGøÂÉKa˛~ĩģIke˜XrÉÖwĩžv×ŨwšŌ`ą)ö ^VŅĮÎj,Œ¸§žbųIÆŽēúĒÆ˛F˙, ׄįĪ‘GãŊ<ôĄŖK×.Qæõ×ß°/žû‚¤ãŽ8ōˆø|BŪčyä‘híųÅ/~ۗΠŪvH-Dį¸ãŽ3Ŧ]N (‡^žå„īØc2čeĄúōË/ۍ.Į8YŸ|m„lŅ>đ ­8o‹ûÄåĢ7ĶÄ´•˛ü@žstĸ#í¸n ^ūId<ėƒy8÷#v}d,ƒ 2ųƒå’K.ķ`Ņ…aaƒĀa!Ĩ wԏi(°— ‘‚Äyy“7Ų¯¸ŅO“ē€Ņ•ĖÕ¤S§NQz›A°Ķ—s WYe•lŲI=´‘—,mÜ#ôÖn!ƒ#ŋëá_S‡ÁG9āŅžMøfZ8ĩą@ÍŖU-ūŸŊß>ōH¤oČ÷Ų`° Üí¨haĢ ëš°‚˛{túːŗCDō:ĘōÃËG˜öS‡dšãGéI—!īģPŗēC^,nUá‹píÚu˛žŊVļ6N´WGËŪÄl×= ͟áŗ%Æ[‡`­ Ķž%Á˛č/&”Ëáú˜˛åûusę‰ķ{3Â?Ō’ũˆxâܧņ, á¸'\/>‡Ë{š~ä͏/ęaŋ†´ŖXũ=‚Ēs!0į‰>W´… Ā›˜NĖ€Åģė˛ËF‹ ,ČSĨ<ÄŧĶãsĐņWDiéĨ—ŽÖ6֔G:ņy€ą~ËkŸˆÃĮĸ1qâÄ(Į9oØäķŧ~Ž^ęâųŧnäŖūXāŌå@’mĄœ$qôúB:™ę`ĮyˆĮō”ĖKyä­¨¨ˆm€ ņ)–ÔŅį ū´3)ƒNtc%[ow˛>ā“n#oãŨēuËZÜré@'ĶČŦ„ ‘?_Ŋą ōVĪ” ųXcã.Yâs€+מƒzú`Æš‡‘į!īL2LåŽ.ęË´ũ lķē35VkœO1#CŨɃ>Ŧǐ2ôyYø„šŋ¸vŦ+Ä:G˙ōöqoøAœŸã7eØņņr:´. d­•u ŋ@ĐiöŅ9XĘÖßfw›4ú ûîÃ!6îˏlũÁûX—ßĨmë ÛÚ:ŲŽmĘÂQj­Âš5ī3°Ä?ī[îĶGé8?ĮĮš—‘‰øúú#m÷Yaũ]yÅLöęßíįn°ލŸœi׎m §­ėå°ŲāŽ[¯°˙Ü{KØš\ČZ°h…k–ĢQtzÂ'ėņ~î×ŪÃøÜ‹,—ĀK?÷>Œ,/Į<_ؕîũˆgp2?ᔇ5—žÃ9dįäœxÎxŖNŧÔf]„Œû GųôwŌ^}õUÛvÛmŗíEoąúŸ÷ģb•WėūÁÖŋyemHęāfåāĻg-V ÖP° âÅÉ`ÅRÆô ëJ°ˆāüęį,üfa8o†é‡.aŦO,âįá„UŒ‹Åčú͟â7¸VXa…hí`Đ AƒP—“ô™ŽHæÃâræ™gÆē˛ ī”y9įœsN,‡…Āuĩ…ƒÅí´“é°!Žē¤q€ ‚ņŊ{÷ŽƒņĨ—^:&Xˇ ¯+ޏb”aē,ЙŽëvÜ!CYG[ĀÆÛȃŸéBĻĶX( !d=ōü‹ŽÁ‚ö§ëÍõƒ4œvÚiQËО{î™ÅŲËĮow <Č9Ā…4Îy‚aâTü /2ÉA6=°6ōÁŒu€AvYO†,m§$ķz]ČG?b#Áȑ##ÔÁ—íõ$}”Ëá:9g}ÜŅÅH/ ]ôuĻûY ȀGĮ‘ŸīÎŅtøõĄ¯ģËxÛ_ ›OX—H_Ą> ˛Ô%YOtĶ9V´—sHZ‡°Ū.SŦŌaj8ˆŖÔ:wčiœrĨŨņģ#lī“. /r˅éĪ€kČĮ"ųĘ(+̞NŗZYįNü6čĖØ Į‘€Ÿãû98xßÃ.O\ĪGzē?–\?ú#ēΚÖ­…ŠĐb?´I?ļ ãG،éŦKæ[ûiüØ`áÜ0Ŧaë,paGėĖ‹Î1/ũŠōŅåί™_W|düpšt˜į Ķ÷#îS^ nČĮŦDōŲt˙ũ÷GUއr) Ë,D•5ÂÜįôa^Úxޞf˜— ˇĐą‰ˆĪ‹@îXŪáēPĖZ:ČĪ',˙čæ œ¤œˇ§%øŪFúįMŲß[^MÕũ6č| ë=|D<Üxķįm‹iO:2Žt,7XlxČ⏙s9כNKƓ—pXÁ(‡4ęĀA<– ’ūĐHĻsîēüœ|X7¨›×›ō)‡xĘáÜåyûLļ%YW×íų=ė>dÉķĸĶõRo,F”īõö48X¯Iōx¯ë$Úš >eĐF/Yâ!–~]\ž8ĻîdäwĮ5k”¨{ō x1UÍCM#ŪNâÉOŲ´‘>ÂÁõĀQw^ĻĮšO›°pųT$ņŦÅ#.i9qĖŧ 䨏ž´ŅõSõ÷6yųÔÉëČšË{=¸6ŪO<ž§#īXĄįurúš[Õw—sYęÁÃ$Îé6¤ë×TaĮ„k á˙įW]­÷e–ĄĨaŖ@ kŪŽæ#ŊÚv?úø[¸ÎĩpÃX˜E ;HĢėëī'ۏÇŲiƒÛÆĩV\CČÜÁĘīÂ8ĮĐÛI™ŽqŽO!ũ‘õX”A{ƍ˙ÉũŨWļĖrŊÊ4 SÖ]C}ÚXĢ ĘÔ ÖjÜŋėŦ3/´ĄΘ1=|4ˇM í_Ú zÄkD?ĸlęé}úz}8ĮQoqÔ;Ũ.Ōy~poz˛îhũƒ~äXā;^.q^'í…ŧĸĖŲ=ƚLúZō~øčŖâË5äš×÷ļzYšęīuöē-jáböwŋĻōįE`ÎĢõŧiŠŠn>LŪúš“Yš™LøJ<į.O\.į2ž†.דŧᝌ¸œûÉrŌēķpsįz {9^~žļ–ÔíyĐãņž—p˛zy\OŒHüCÆĶŅą>ž?ŠĶË÷˛›¤ o÷rņ!1ž?YoĘFņ\sw^NRŋĮaå!ĪĀ`@š `¤ųC0įŽßëāeöƒ8,ˇŽ‹< @ ļÄų O˜4ãœiz|œ×ÚËāã9ęÅ`˜Ŧ“įG—× ¸tŸKÆ7x{MÖ }ÔŧĄ~ÔÕ}×éųŧŦĻ ûuŖ>Ô¯{įNÖšKø5Pøh€/DöK jŨįŸ€Š%ilBÍ ×ĀB?–ŽōVÖ&œ´›đvhãŲļ{^÷Ķí¤Ütœ‡ķĨÕÕéĶ´ ץ};ÛvÅĪ¡ߞŽ ök`•ás#¸­ÚØ;Ŗ†ÚŖū9–Žąo°‹âÚ~ë}ŗ¤‡k„>ĮŠŧ~ŠũČĪ“uö8orÉgéIšõ—,ĪCYŪOˆķxęÃ9ōčåĀ œ”ĄoąNÍåy?Æ÷gr„Ŋ|ôxũŧĖE=ė×°˜ũŨą—?9Oæ9q:+ŋMž§Ã¤%d:ņ<,đĶ74rįy\ņœ{ŧûžîa—ķ›ĖËņ2].ésîÎË ŋģdÄšNO÷8|/ßĶŌy“ņ~ížĮã'ã’:Ŋ<|ޤl:OLLčJc”ΛĖīy]&Wq<Čą,ą3’Ÿ"cPáÁGY^xœcĖĩIēd[< ŨŽÃķ&Ûëi.GžŽīõÅwō ‡īéčFžA)?F.Įķâã’åzßËķz—<÷žęų=-™/YļįĮwרé^ļë_rIÖō…zķ4 4z Ûc9=2üÃĒÆe†ŦÕ’S6n¸-×~rė/éēzø¤y:žc’Ls—ķü„ë돎5Sü'œ°w\Ŗ…Ĩ>KŸõ(+ uæ¨đmģ°Nr‹mbŸčųb{°q|ŧo{<ž°—E8Üyģ<.ŲFd’a—ņļē~ÂÉzpîyņI÷ƒ´¤NÖÄq¯zž˜1ücS ›Č\oŌOŪ7Ž×ķá—t‹Z˜ļ&ë\ŦūžÄLįņŅ" EĀ;Ŧûé‡QĄz$ˇx @˙`kģø€&ģ}íUr I Ūˇ@ČeÜGÎäüđtįB—4ōû ‰Œ—‹īįÄģ>Î=ŸĮ%}ÎIĮyūd:ņæįōOØ×áaä‰ŖÎ¸d<ųŊ-ÄĶQ.åûŅžce˜. Ė‹¸PÕPŗPŲ!Qą’ŲŸķ(+ ŗĒmÔđ¯ėƒ'ŗÉ#?ŒĪÎõ8āûãžį!ėSn ! ˘.ë`|äũ@rԋÁŲëįy 'ã\ų’õ&/yܑŽŦĮáįņI=ŽËëā˛Ô‘iŲd]]ą|°ÄšÄĩdJ Ë)K ØåŒ%ŠúŅęsāC_`6ģ›ąhA üZ՗ŋĐôBû#䋩RÖc15Hû;)ãøAŲ\ڋõ˜5“Ŧųä#܄)ŲdāúēK÷!âŊ/t\R.F„ŪO’uņŧž†īų\'úĀ×ë•ÔĪ9r8ÚF~wȓN9I<šĮ 'Ëō<-Å_Ôú{KÁ=Ũ‘ĩ4" D€=pä â `,Čgpc@fPãĪÃ?9(ÔU´$uÉø … įžßĪ=?éîüÜ}÷<î§ã=\Hž´ŒįÅO§N–ÉšËôÎôķ IDATāûyRGąÎ´ŧY‡iƒ„sM¤ĨútŊh k$ųx+„=čp˛†ūÆr…öGĮœēQ>ƒ´âpîsî×ÁõĶį9įp]ČåsI]õɸl}×=™ž<÷ü”Ãy:œŽ'o:?y<ßīߤ\žv,Ęņ‹Z_”ąŽĢîZŗV:J @Ā<,8ĻQx°ķđãÜ߯ %k ¨J‹Ī’t‹ÕXŋ†I2ãƒˇ“•úęEē÷ ˇ\öžĶ˜mqųú#ņÔģžū˜‹”äj§ËåJkĖv57]-ĩŊ‹Zonũĸąę#˛ÖXHJH āoŖ č>x1(ē#ÎßĖEÖ•ųķæāHŲ\gŋ–\cŋŪųZ“Ė‹”šÉ&›Ä¯ˆ“V‰Ię"ΰaÃĸ%˛æi…č!oS:¯ e@Öø&'NžVh=‘/DÖõR&×ĢŽ2 ՉŽ|Ž1täĶ­x! „€XüКĩ^sdžXîߜáÜŋ`î?GRYUįœDōúAņœãvÚi';øāƒã÷– [î<ŨÃõų.ī~}ō +Ũëį~!õ@–ƒŸˇšįž{˛8ĒÃåÜ÷2 ŋøâ‹‘ČqžNwš|žįYųt+^! odY[€ëĪô&–ČYøõæđÃĮs~ĩ¤ų a#ėœôb=°§uėØ1Z€œ0|đÁqēßę[ũõãī "˙āƒFĢÔĐĄCãG5h+ޏb–h¸î—_~9ūnõĊÅÚ9?yôÚk¯Ų¤I“bū-ˇÜ2~YŸ)TĻ'ĶåA ŋūúëøJ›mļYöGŖ˛Ų˙rÉ@P‡ §ąŌ~ŅÛįūwß}gīŧķNüHčZk­/ĩß˙ŊŊųæ›Yrŧ÷Ū{G}XÉzč!cjšOŸ>öŪ{īåŦ÷ˇß~koŧņF$ÁŊzõŠ5õ2 p]Ąü1cÆÄ6îļÛnąÉzo°ÁąŪԅ<oŧqÔõüķĪ[˙ūũŖ|Z‡—ƒŧœB@† ˛ÖÔ€9 W|yœŠËę˛ę:5A֐%āžÁIÚ?üÉÄa̭*ÂûėŗũôĶOööÛoÛ.ģėŗN:5Æíšįž‘d@Ę°ĖšC/ħ{÷î‘,aųéÛˇo”ņ›„ûíˇ_$HČōcĖšĘƒčA†~ņ‹_Ä<^FŌOË8N?~G‘r –Ÿūš­ŗÎ:—Ąė×_Ũvß}÷øûˆ˙ųĪŦwīŪ‘`ŊōĘ+‘dŽąÆą=X(!‹=ö˜Ņv\žz“öę̝ÚāÁƒ#ÇĪ–K$Š:@r—[n9[zéĨrˆK×ûŗĪ>ŗõÖ[/D~„›ßúDųȓÖ!’ĘrB@!° ˆŦ5='ūģuŠA‡ŦįķAœ0D7jÔ(›8qb$ =zôˆņX˛yë­ˇĸ?vėØH!~8,:ŦcM:Į7<æēą?Ū ƒ,°'ō8räČ8õę?5Cž\åaŖ<ŦRO>ų¤mēéĻYr’lz’2XŅ( ¤AÆ(Ÿ6ĮæíÆ§ŪŊ?üjÄ|?ūøcĖ!ˆ.ōÔįË|õ†ÄQ6x’Ÿßä1bDÔé#Ž6āû~âŌõĻëŽģnŧŽÛnģ­=ũôĶ‘XB0ÉãųŨ ˙#ËB@!0?ˆŦÍZ)Yeˆƒ>ƒrz`FAÖÃÄų Î@cŠB€… $ rô(V&ÜJa×)ų<>„ÅõēõYŌ°Ė=õÔS‘-ąÄDGyęCęíēHËUž—ąŨvÛÅĪ”0íĮ”kŋ~ũȒuČmŋũö‘ !ƒ ’ÅFę QÂy™^gęOšÔŨۉßĩk׸6 yd qîuvÚ´iķāDí‡$sîuđ|Éē¸^'€ézsũŧāĮĩ&?>ņäwč÷4ʓB@!ĐP´Á Č1(ã˜Ūƒdp@ Г‡Į‘Ž,Îķúš‡ņą­˛Ę*q-„‚ƒÕŠsįÎ1Ī„āœ4`‰ã|„ ąČAĐŁu Ōiĸ^¤a)ƒHŦ°Â ÆÔ埯<Čy(‡)TĻ0YÛåõövße žXōĐK°ė1KûđŊŽäåœx,n~NėđЎ[ÎЏ iÔ rK8NÔëÖ56$—)^¯¯ûŽ×‚†>d“õw¯7õdjōJkØČÃÁî[×ázcú'„€B ”yæ™50īb›ÍaČëČ HNÄ ÉŗŌ…ĩĸá] ō|¯mÕUWiŦ…bĒŽĩpÄA‚ ¤O?ũ4ޝ‚°ū ŨŽ?ū8ZģЏ# ąęÖ­[˃>Ö¸!ĩ‰5V8ä8HgŅ?Ŋ\åAPüņ8U 1IJ†<úp´ũ>úh”Hkâ \|ļ„5oøL÷b9ƒÔ° õÕW„Œē3U ĄâCÃXų˜0„ÂFûɋ^u§ĢtŊ!Ŗ'ˆ)ųYƒ†uōÆē4âŨQŽ Ķ°Ôŧ´\õfSu LpdSdâF?p+kĸ[×'/OžB@BĐGq E*!į–Č$ŠÅé Üu9ŦL“-ļØ"ŧŅÉāāÜé ôœËA<ī<7‡l’|ĮåĐą„P Į‰‰Ë`r˛I–%ę)BņČGYÆdš[Ŋ ϐ$wŽ“: ŸNCÎeđÁ5YŽëņø¤<õĄ]čÅŅ>Ęņü12ü#Î1B–ē{ũ)“|Ž1íĻŽ^§dŊŊOsũīúÚˇo?W™.+_! „Āü  5kķƒVJ–ÁëÖŦ[ Ōš8ƒԚãƒ:ōœ;ŅBá´#Ũ U2 yȊģt^¯“ˤË!Ũ  Ëâ{yčKęô: ÑLķ: ãéÄqŽÃråōîīéÄq8ŅJĘ$ãŊ\|/ËõPoĪOųķö{\RˇĮáCā#Â8¯w:OmęRėéäO–įrō…€B@4YÖ€ZÚ ÃâxωwâájĀŧ™*eZAœƒxd9Ü"Eū´Kęs2āyYTī֛dšëđŧ^ņIšäy2į#Žēģ\:ž4O'úĶ//)ĪšëÁ÷sĘHË{šûČøšûÉ|ÉsOĮ÷s׏Ž:;)CÆĶũē"ãqœã’ú'ĶĶi„÷‰“B@!Đæ˜d’{1Īãƒ2kϰđä"[@”&›ā¤ã<Ė9dĀįÉ4g-ÎĶđũÜe’¤Âã\Æ}×áåxŲi}„]ÆĶÜw´%]Ļësō$§ģīrI™d\˛žĮ}Ī“ŦiÉtęčéÉēøu@G:Ëģū¤>â’z\Ö}Ī#_! „@CYkj!qš˜x8ŠŌlŌü ΝëÁOã'ķö=¤%׍Ÿ”ķø¤ŽtōI—K–tâi§ã{\Ž2séD>Y^ōÜËđ|¤yYé4Âõåu=ž×ëîõ&ŋ—áēÜ÷ŧÉō=.—ī: •ĪĨCqB@! ‘5Gb>|zSiɝķĄĸEŠ:.-˛qj”B@…„Āœo,¤ ¨X! „€B@üˆŦåĮF)B@! „€XčˆŦ-ôK  ! „€B ?"kųąQŠB@! :"k ũ¨B@! „€ȏ€ČZ~l”"„€B@…Ž@Ģ[oŊuĄWBB@äC€_ü4h­ŧōĘQ¤1ž_įßĐûæ›oėĨ—^Šŋƒ›¯|Å ! 6%}ôQ†ŪæG˛ųkˆ-ėŠŠ|! „TVVÚĐĄCãoë80 JCH[ōųöūûīÛ'Ÿ|bë­ˇžž—˜EU'B@4xžņĸĘīŠķŗ’­ˆāāƒĻ$äûɤæPyÕAÅžMëŽģŽ}öŲg6iŌ$Ûzë­ãŗ â5?„͉/Ĩ¯ŧōJÔQã§âæGĪâwÔb! ŠĪ=įh%áÍ23sæĖhUãG¸å„€ÍČUōĀÂöå—_ĪĢwÜŅøM^\!Dˉڌ3ė駟Ž­OŸ>Ņĸ–}Î~qmmW„€üJF´øB9bĈ S 5ŦjūPLB@…€?“x>ų3jôčŅ6jÔ(Ûa‡ŦgĪžąŠu6Ļ?Ūžyæ[a…lų嗏o­< 9ČĪ[ŦœB 9 āĪ$žOL…–Œ92ÃCĐ×Ģųƒ­9TVuB`ņE€gdƒį“?§*+ĢmÜøŸė‹ŸÚ[laĢŦ˛J)aķį † b}W[Ãzõ\2XÔjßXũÍ59å°ø"Ž– !Đ\āyƁe-žPūđÑŦņPķŖšTVõB`ņDŸEø5ĻA'O›i?L˜i­ËjŦ¤jš}ņŲpëßŋŋĨ7Īo$čÛo-Ë´ęd•ÕĨļLļÖ­SÛ8 ĘÐÃŽšHŸë’/„€(ÉįQ$k&LČøTCōWŒĘ¨ ! „@>xņlÂĸÆR1*ėÍΧX§Ö5ÖŠmuëPmml–}ūųgÖ­[ˇėÆ×Ác#Áĉ­_ŋ~A˛­MžQfĶf–Ú´ĘRÛdõ.ļlvqЁ‡Ą/æõüō…€ 'lņŲ4yōäHÖf…TļB >:qĘ,ģíŲ Öē¤Ęēĩ¯ļ5–Ž´%:ÔŽą…Ė}ũõ×qãëØ:vėhͧOëĶX˜Ë4i|3 S g”Úg?ļļIåeV™ieĮlßÖčŌ&ZÖ´f-×Pœ HÖĻL™2gž`a×Hå ! f#āüĢúÉžúĄÂē´ĢļÁĢͲ•zTe7DaãK:ŒÍ66°‰`™e–™kz“‡ŪČ ­ėųmlJE™­ēL;;wī%ŗV56u?! š#ÚūÔ¯Šę$„@$YĀ0ėģYöæ—U6%L_.ŋDÆV핉ä*žmÎŪÅÉtÄŦoßžöÄOD߉ZRŽsōŖ}čE?NkÕ" ú'„@3D@d­^UIZ W÷ž6ÍĒÂ' k2%ļmßęšŦ`i"ÖŊ{wÛtĶM Ÿ´t:„Œ8ô Ŋč'NN!Đ\ĐĒš^ÕK,Æøf§ÉĶĢmøwaĘ3`ąņĘUÖą]­, s"Fš§'ãü=čC/ú)į寀ū ! š "kÍäB¨B@ˋ›#ʃŒøđ“SËC­j/'ei‚VWēë¨ÕWõSŽœB š"ĐĒšVLõB`ņF+×Čņ•„6e™°Š ÆJKš p2?|3BŌ2æiNčbĻŲ˙ˆCzgU—ÄrČK9! „@sC Ád­|VM˜>˜eÃGͲQ?UÚÔōđĨqí+mn×Wõ‹05Ą*Öŋ[û°Š`6‚h9a#‚Ed+YK0dqčëôŽŸVb/~\a_ūøÚbšū ! ˛đY˛KŠõęŌĘzu-ŗú´ ᲊo˛6vr•Ũäž0|†•Ī;kęĘ$„Ā|!ĐŠŨÜΚ\„ R–&kéBœ¨y|į wü4 kÖ2á¨ĩâyš|! „@c"Ā âf̎ˇ}6îdk÷n›U|ne#S'õ’5€ūfúø{Ķė–g&ĪEԘ5XĒŗY—öŧáĻ´+(„€hV\ĸ,~ė6­*iaK§ĨÃiĸFúĒŊĖZ×ûLkRX!P?Ė6Nža6)ĩ;ÚÍ^ũŦ<GnĶÕŲĒKVI}„­¤žâ:YģâŋėųB‰ŗŨē+šmŊšYŋeĖÚˇKs\ä ! „€B ‰Āˇ2öōįf¯iV1ۈ?xívū>=æY‘Ėįįõ’5ī}ušŨųâĪ1OĪ`EûՖ44QžB@! ęCāĮŸ3vŨŗf?ÔR*;}ˇîļķzęËfu’5Ėr…MgŨÅÂ[ŗeēšũvĪë KZŊĀJ@! „€if„õū˙÷ߌũÖË23yëqŊâ_r––'œwĩ†ĪŸ>ôVĐ\ģÖf§īXjÛ6Edލ¨hđ×ÄYŋŌŽ]ģøŖÍąŌú'„€B@f„<ę˜Aģⱚ¸€M›§ėŌ5N‡æ#l9ɚĩņ?WŲ#*b7ī[bKwŗŲĀۍl>åé´tɸ™3gÚŦYŗŦmÛÚ]žæ~˛L?wŸ:ŋcĮŽ1:Wžt]Ķ2Ž?–į’Qū9¤ņJ‡…ßŧ}lzķĻ ŋyŸ5š0q Ķié°úßŧ}ĖąË…đS˙Ķø9ˇąŠ{͍QŖė‡~° &Ø´iĶŦS§NÖŖGø{Å+Ŧ°‚ĩoß~>ŅŲ[oÅûā;‹_×8fp'kßļl9ŋ's’5O|ûˊėˇĶļYŖ4')K_<Ī‹ŸNK‡sÉ@Ønģí6û駟 K[YY™ĩjÕ*û]%ĀáĀųyUU•-ąÄvĖ1Įd‰^.Ũ…”Īū—–O‡s•QhūĘĘJûæ›oâĨîŽûŊ÷ŪŗG}ÔÖ]w]Ûk¯Ŋ’ę˛2ÉHĪ—ŒãüŽģî˛¯ŋūÚ9䐸ŖÖųôæË˙íˇßFÜ{õęe­[ŗjpšdsÅEá„ü˜1cėķĪ?ˇ_ŋ~žũBō{†\˛šâōÉį’ͧüĩ¤ąI‡‘Ę'ü„_Žž‘̝äŠS˙Q˙YTúĪ?ūhŸ~úi$kŪoņ§N‘#GÚčŅŖm5ֈã_R†ķAũJYĢĩŽąälŖžáŗy\^˛â›j¸Öán+-Yœ_Ļ‚ A2ļÛnģHֆ bãĮ¤4uãÜ}ÎųáfO¯ëđË_ūŌŪx㍨‡+­´’í˛Ë.ö‹_ü–]vŲl|SĀž¯¸â {å•W"§œ6mÚØĢ¯ž į—_~i÷Üs•——ÛŪ{īŨāj<÷ÜsąÛnģ­­ļÚjV¨Ū?˙ųĪöØcŲwßēX^vŲevā6¸.\Ãßüæ7ļĪ>ûØÕW_Ũ`=Ę(„€B 9 ĀXūūûīGÃR]õÁęÆxžūúëĪCØú/‡Ŧ&p~ŖxĻm>š›ŋÔIÖÆMŠ%GŨÃŦb>uU˛!iXÉX{6iŌ$;ūøãmŠĨ–ŠäĻC‡ŅÂCš[Ô𓎲æí4hMŸ>Ũ>øāģéĻ›"␍Ļv•'žx `‡zh´8=ûėŗąM^7ęĀy2<ŋõJæMŸ'ÃIŊO?ũtÄĸk׎vūųįĮĩƒĪ<ķL$Áųō$ķį;_}õÕíČ#´uÖYgžÚÄ[ÉŨwßm]ētąSO=5ŸzÅ ! „€(/,jĖâÖZk->|ø<å{÷ĶyˆĮø÷ŋ˙ŨļÚj+Ī–õ=Ÿûšō{ģ’2ŽĀãÜWūšûO>\„_-Žûę?ę?…ôŨ?-ãūÁZæŗO2fžđīģī>ŋÄqļnÍ5׌aˆōŦ_cĻËû ~ם~Ÿķā';}ĖÂ'-érÎm"ČQ=ûĮ>ų‰2&”†01…÷ /D⃟>‡d%ķrîųŨw]n9ģ˙ūûí˙ûŸąļkéĨ—ļž={fw‰Bč m“'OŽķÃl.pĸ—ÔŸë<ū‘†ĩ7cƌXq”ŊķÎ;ÛwÜeH?įœsâté‡~ã(“éSĻ*ĮŽÉ͆nh0,v8tĨËgá!îŨwߝ'x—į"šĮ{S™ÔÉõá3É\oŊõlË-ˇ´ĢŽē*kKęđs÷“ex>‡oĖ cąvĐã=aŪĀ‚2éœ;í´“Ŋøâ‹Qk˜pŊĪ;īŧhö ,‰Ä_sÍ5YIYČ*ØmŋũööŌK/E™īŋ˙Ū.žøbŠŽX‘˙ĩ×^Ëæ÷:šOŨ 9OˇŠëŗršŨwß=Z ™r1bDœnd×Hځ'ÖžUW]՘„îļÛnÖšsg ŋ:õC„ lLåŪz뭑Đ}ôŅsŠĸŽŪOH‡=~×]wĶ XØØÜ@i‹;Ú9ĨÃõîŨÛ°N˛žBNŪ6Āä’K.‰įË-ˇ\Œ˙ųįŸc<äÎËvY×ŋúę+;á„ B ŠÅGYuHá2Ë,“Íīu’/„€B ˜øô§—‰EÍ šûĩ¤Ĩ Yōųčy­ÖÎ8Eízül|ę$'YĢ%jsփÕT‡Ũ ‰éĮ”ëÖ­[<°tĨ-$¨ŽüžkŽ“5ķē)Čį n¤#WWYČá ?Xo /‡ē¸.Īįú=â¸įž{ÆéÂ;īŧĶūđ‡?DK–š\rE™ˇß~ģ=øāƒŅzÆô+Ö3œ—MŨūõ¯E“)ōÆĻä°øqŅ!„& 2ūķŸ˙ÄŨŸčI××õBŒŧîČ%ŨJ+­dũë_íŦŗÎŠäŠéĐÃ;,†!åԙ˛V\qŸ Á§ŒŅN/“5fX[}n>WŲ. ҇‚#‘]¨äŨlŗÍ"AcŗĻcÚéåÄũB@!°āķi—$lšˆōäKŋ5qĩY-csž3Ą ys’5”’)üį4L‡Ö‹Rí÷ÖbDŽË/ŋ|œ’L&ąN k™B€Lā JNĐ|`§ĩõĒ%#œ{y8G‡j‚¸´sũXîødĉÍXņŧžN.đ=ÎķQ'âpōAψƒ´âĐéųŌåfãÖÆ+¯ŧ2ZīN9å”hãs¤ LŅã–7,T„é¸O>ųÄČëk•—›Ž¯ëW—ņ|Ik‹ú/ŋürÃÂöü#^‹ĶO?=[.D ŌÎËdĮ-ׯËÉUļË<8‹åÚk¯É¤,ŧ d]WēL……€B@ PŒķI—´¨ų”hÚ˛FžôXV]Ķ.¨a­üœĪ’%õúyÎ5kž8›Ģeƒu@Zԟž`Œé­Bd‹ƒÆĀ@4‘Ÿx'j>Đģ^â9ˆwOËįŸtŌIvíĩׯo‰Ũ|ķÍqĒ1ŸlSÄoŊõÖvīŊ÷Æo Ņļ§žzĒābĮaš‚ĐqqÄvĀĖE^ V˜äēũå/ÉZéXsF™Nž¸ÖMáøžÎËiŠ2¤S! „Ā‚ ā†ב$j4 *NØ\?/™æ|+‡ÉIÖō ĪĨ8G€Īl89ƒAōAÕųuŽôThR‡× ßI éöôdž|įŦģ:蠃ĸ5ëĸ‹.ĘZõ|zM8ĻæØ™ØØŽ ĮZ9Ķž…ēUVY%Šbą‚t&ôŽÛBuĻå°búT.ŸQÁ’¸ōĘ+G1,_Má|!&Ķž8ˇĻß`šĸléB@!P,īrĮZlßLā–´$a#Ũ]2ŸĮęį-TAR’Ãz&ˆ D(×ŧkR>}ų‚€@Ö°Ēų´gšˆ!ĮáņNđț$piũšÂ,ČĮrQ`ú Sp8vĩbEbˇŖ¸\:æ'ŽôŦ‘ãsãÆ‹kŋČĪÔbĄn˙ũ÷ aīė¤d*bI؊鄚P}.ĮFÖn°Áqŋožā›pėå*XŲTpÚi§Å0kį°Äą›ŗ!Ģ&5>œKŋo6⏄™îÅōnLĢË ! „€XX0ņ>ŒëF÷ŊN6ˆšĮ“gAƯF%kTkQŸ>}˛ŸđŠâC´ jXpø0+ÉIÄ,i5ķxôrîŋ`Āųü8HČÉ'ŸlXÖX\Ī') 'Ŧc‘;ûėŗãgĖ, IDATf€ĄC‡Îęœ˛ւņ“Z8ØC‚0ŖęXÃÉaa>;F9 <å$F…ęs9ˆ×Ã?7*‡e”ÍüŒËé7Ū×ŗą €bxÆg4˜ŦąÛõÜsĪĶŪô6[¸Šë,dšNĪ/ pØy+'„€B`a!šwf¸ø3ONČŌõņxø ōūģįišBÂ%á3sļ}† önŠ:īžIöɘëĶŗÚNÛļî …VŸ d]XS ]i˜ˇ¸y:ņL˙ąÖ‰EęK.šd}E”Ž•‰5ĩč…Nœ8ŅøM1X6qAĶ“tˆTcX˙X/ČÛmöiĪ\õÒĮô$„Ž!ø°ÉâwŪąëŽģÎ6Ūxã¸ģ•6ø5M–ÉõÅ IYšŌ“˛:B@!P øŧ3MŒ™ųãĨeĩL­B@ÅÆą•Â7J9šŌ5+˛Ö” •îæ…Ķ rB@! „@ũäütGũŲ$!„€B@!P D֊˛ĘB@! „@Yk pĘ&„€B@b PКĩ &„ˇžXŒú¨ ! „€B@,L(ß&´ŗū_{*ˆŦņķ?gyöbœ)„€B@b púcmŌˇ3ë-JĶ õB$! „€B@,<DÖö*Y! „€õ" ˛V/DB@! „ĀÂC@dmáa¯’…€B@!P/"kõB$! „€B@,<DÖö*Y! „€õ" ˛V/DB@! „ĀÂC@dmáa¯’…€B@!P/"kõB$! „€B@,< úƒ…WŊ+šĻĻÆ>ûė31b„ņ“Y­[ˇļL&4—””ĈS¸eāqĮUĨVV6ī %áō÷\ēŖ ŪĄˇũō”ĩŦ]ģÖą?čŸB ąиÔüĮŨæ8Ž´X˛Æ ņÔSOYiiŠíĩ×^ÖļmÛÆžį¤¯"°ÚĻãmĨĨēXi âpņđ?Ö2SëÄ ({ ífÕá_UuÆÆ~?Õ¸k¨öĢėē;‡ūŌboZô_ĸ# qŠč7¨Āæ8ŽĖŸ ĸAÍ^8™>ūøc›9sĻí˛Ë.ÖĻM›X ,iĩƒ8yíĄđ,Z>ãf™•gJmFM‰ÍĀd­<­qžŌĻŋŧĻ4¤—Z‡ĨģØū§lj;´˛ģūúŅÂé´*U€ÆĨEcÜmŽãH‹4TWWÛ°aÃlíĩ×6Î}šŗ´”ŽRÃâåˇ,&NĪØ¤ōęx]ÃåŽ~íĶ“Z‰Ŋôô˙lëvvĩ`] ˙jj2Áē,lÁ/¯,ą;ôĩoĶŽ:q@˜N-k҇'„@ņи´čŒˇÍqit˛6yōd›1c†-ģė˛ņ.øá‡ėūûīˇĶN;­āģ"į÷ŋ˙Ŋxâ‰ÖĩkׂtpSTVVZ¯^ŊŦNJģ&!+ƒ7ŗ‰š+K†üņG{āė”SNņä:åJæ¯+|īŊ÷Z˙ūũmŨu×ÍČēäIÃåŌ&'œpBÄ$WēÔ|ų[júÔƌMÖ5æ;KÃĩÎö ¨}ôîģčĖãėō[ēۀ ļˆ× &ˆÖÖVÛːˇkĪ.öõXH\ČGNFA`AÆ%* į|­aÁ/FSâŅĮ‘F=účŖm=ö°ƒ>Ø6Ø`ƒˆéØącíļÛns| ōĶyŽŋūz›:ujAy‚,BF¸9ĒĢĢâÁā› Ö“šęšO˜tÂ/Ŋô’qÆ1üØb}“éQ.ČSã?~žüžîú’aĻa!€č{衇ėãáĪWū\õE˙ 7Ü`ã|éšęŸĢ~--yUÆf„Ŗĸ*ôƒč‹Yđ§L¯°›Žŧ0öĄ›¯ēĀ&O+é3A›QiQ~zđ§Ų˛.ímúôé÷7 !P?Ũēu‹/ĢŧČo˛É&öÁԟŠC‡ĩ5×\ŗ9 ĪÂķu~ŨüŽKÉq¤Ĩ=§ķĩ§ĒŠņēv\^˜íoŽãHŖYÖŪxã ûä“Oėõ×_}˜Žš0$ ŪĒUĢčs^6$-I^¯Ú‰1ŗ'žxÂļß~û°Đ<ģšÚiSōyēËq䑁đÕDŊÄĨĶĶáILąnŽ{÷î1O$A?ē ɟ֗WS—@FŨĨĶĮp­ÚŒ LŦjá_„įŠûī´qcFY›ļí‚?Úģ˙vÛåā-PøÚŠĐ@ägTÖXeXëVÚžuözņö&'„@ã đčŖÚŠ+Žg.ŽŊöZûĮ?ūŅ8ŠZXūōæ›o&b÷ôŽģî˛įž{Îđ u —\÷âōŋįž{ė…^°ŋŨ~{v6 Fû›ã8Ōh–5Ö÷|÷Ũw‘°p‡𲎛’ˇÁƒÛčŅŖŗņW^yĨ­ˇŪzļĪ>ûØûīŋŸĪwrĀİ>Y›5kV KŗÂĀDlöÁ[GfvøÕW_ĩÍ6Û,†ũéÆo´ĩ×ZË~ųË_Ú§Ÿ~å˙ĻGŠ/2ÄíąÛnv÷ŨwہmįwļŅĄũū6€Ėķá†ŪvÛmŖ|,/Éīŋ˙ŪvŨuרæŋ„2\ūĻ›n˛vÜŅ6ŨtSģā‚ ˛õãĄ°[(gķÍ7ˇĢ¯ē*+ĪÍ˙Ū;Aƒlà 7´_|1ÛƊååioKNŸŦc庘 ­‰~E `ƒö;Ön|ę ģaöąÍūĮÛôĘę —ąiÁē6ŠĸÆÆM­´ŅSĶ dMNĻA€O(­ąÆöÅ_ÄŽ=öXÛzë­ãsėŸ˙ügļPf2ˆg|ā9ˆãŲuĖ1ĮØ[la °Ÿū9+ī'|Ēiŋũöķ mŧņÆöØcÅg(y 8žá;†g.åôíÛ×~ņ‹_Ä8ŌŪzë­štüáˆr,ŅšüōËíųįŸuøōË/í•W^ąC=”lõēBÆĨÃōŒ<ķ˙õ¯eŸëŒIÄoÚšžã,Ų!‘×Į-ˇÜŌĀ–ąâ…܎:꨸$gīđĩ„<Đ ŌČ߯ĸ?ũéOYũ‡„™2Æ\ŌXÎtg SŒ×ŒįwÜq‡=pß}q&m‡vˆããę”)Sâu‚zęÉ'ۘ1cbū|ã&ãâUa|cŧÍ6ąo`Ô`&kpC™Š‹3IĄ>nįjŋˇ×ĮՆ†›ã8Ōh–ĩ6ÚȎ;î8ÛjĢ­ėÜsĪĩ3Ī<3~6ƒŪ 9ûę̝ė@.X{v_¸¸guVŧ ÜDŧaēūíooĒēzüĨ—^š]W—ŸėĀ*RQQHÛĖxm$ŅRÂgXŊföÍČolŠĨ–ФnV vX™†m,0/<˙‚]{ŨĩvÉ%—ØÍ7ßbãĮiS§Ną‰'ŲÛĄ=ÖY'XæˇķĪŋĀî 7‹wô?ūøãä ĶųxPüéO´ōō ;蠃b'\c~‘¤íŋßūaa‚ŇËa‡nË,Ŋ´ũņ´Ŗū•mˇŨŅĒ7mÚ´¨Ÿļ߈"7Ë3ĪĮÛÖ>nüx>;\ZJ¸ÔJÓßnģí˛a^Īž=Ã[ց֞C{Û˙ũíĩ×^ õd“BíæōC;īŧķŦcĮNņÍ ’Gy¤ĶąxsäíÃË#?ú–[nyëͧO$eC† ‰é„ŋķ}|˜P×qゎP?Ū,/ŧđ7öŋ˙=b­ZˇJ衈)uX}õ~‘D"īå{ûˇp›€ŨŦ@Œ+ĢKĸ_Åy˜Úôcf8'Ž*úâK-álf8ĒKĘŦmČ_ĸâÖw{)]4Ŧbf|ĶŲj\@Ô @N˛ÚˇoŸ|#“—yžc8ž§‰Ã;,ZqxĻâ°ņŦÄĸápĮ؄.ˆ$‘ņ—ЏL}~—.]Œ6â —úôí )í†0ō\gėdįČ#°†~—ųø¸’|î÷%īĮÃ#fäõq€ēą.ģ[ˇŽQßĶO?mģīžG TōVZiĨ0žÕ~P<9ÎųÆ}!k¸Â +„éėŪą^Ā¸‰'Dũ7pžôŌKb[Cë7)ũŪž5Öč?fĘŠ§Äņ­ŦŦUļ=^o_c‡›ã8Ōč&ČëÖ¸) _°k:¨ģäÍEgbũžûî“1]ûMéō õ17ŖË‰š—ë>z!ŠÜœ,ÖGž0>2&?m 3ĸĪĶH§]ø¸HCē‡ß}÷][ũõŗadȋ—!ŽEˇÄņPÂÜĪ Ęķzķ@ã&ŊâŠ+ŒéZŪ ŨņĄ_tq ›<øîhĪânßĻÄ:ĩ­Å$"á߇ĪŪoy¤6âûl0ØîvT|_Ģ Ä­ē:ė ‹é3Ģ­ŦC‡Pžˆ_XuÕUŗąø°4æœsÎ‰ĪšlB8Áö÷ŋ˙=Zž0qÄ‘pņlŊæškâlëYŖVŸķ1(ų­ÁŋwīŪ‘;¨iŸųwĻEožųæHZŌéšÂLú…Ī•îqtL.z˛“‘F§âĀ1o)|šå–‹a.:ōėÄJF< ËŒ4:T˛ŗ%;,iĻ“í´ĶNŲ0Pî×_õ`æįm‹#ĶĢĖåķpĸ}ŧŲ1×N9ė‚åaŠ…Ėē~ôqîē‘ĮyûhĪâîĐ:TÜl ëoŗģŊzīmڄ­]ĮnvāšąÎÁ‚D•asAUØ\ZZcۄk¨5kąßčŸhj˜YĀ*…ĩ†)Iž}ĖČøšŖ_ũęWq0ÆwD k<yÁåš9räČ8%WYË×ô5*Z…ü™ėaĒcîķĪ?7>ģÄ-Ž cŒî¨33BŊú\}ãSŒĖ˛°žŒĨAčf\ņY*â cÁ"ˆķįŧį3vÚz^äqŒŒČŗžŒåHX*YŸGYˆ‘ŪŖGˆ-į<ōˆņ!_Æ>Âčō1}8âq¤qfš™:0Åír<‡ũŸ°Š„™îū駟˛úX’DSĖŦi6l˜­–y{›rœkŽãHŖ‘5'ūæ7ŋ‰k° A°Ėĸü&g>[æsXáøöØÄ‰ãODå“'ž…üŦ+ 3ÔåxkđN…΁ķ Ė9 ˆw â8‡hōæÆBULšŧ ī‘sôĄ+WGEf_Ļw=8ōCjšÉ>üđÃhQ„Đâhëũx›`Q&mÄTÍÂOōAŪÎ?˙üŦ>/ũŪļdYQébø¯cۚ`Yk1 —'\Ŗp:wčiœrĨŨņģ#lī“X÷¸\X÷QģVž*ë4Ģ•uî4ĮŧB¨& ĸ!Ā íÕW_Į HĪMÆÅ*ĢŦ×OąsĮ3‘q†xž‰l8[PĮŦ„ Bđß˙ū7ĒŖˆ$›ĢÜadā;—lN¸=,ļg ØtPŸĢo\ÚĘ ÕZaƒu`íëÂØhļōĘ+Įõ|`–ˇ(7W^Öx“Ÿņy΃>ΙeÃeAԈÃ"öˇŋũ-NCĶVŌcHCįŒ5öqĮĮGÂ,r K—˜*f3^]ã&eąFŌȚFČįE]ÛĖĩf eÃ5Įq¤$,øŦ5ŋĖFÖ ‹‡•ŸwĪ$ûdL čŨÖŽ9rŠz1ō…t(.\ĄŽØBđ`Ņ ę¨?VĪú8tŌyčd^'ÎqŧœvĒ@qŪvKĸNŦķ|…2úožų&.BÅl‹ķōÜ*ˆ>Ŧwū&æéėvÁ:IØĪÉŸŽ‡ËZŸÅIūēˇĢlŲ^ÃĐũ²ÂčܧŖ?ō×Ģm÷ŖĪ‰éáū¯%laieØvVŲ×ßOļŸ>ûÄŽ:tĨøđrėj5éŋMĐ ˜ĸëØąc,†g9$"鸑ĮÂļ k› °Ąg}ú~÷zå*+PĄcÖüŒKČR.cx0Ž‚uŦ~8¯kz`ŧKÆp°ô/3ä“Į‚…Ņä}Ä3FĨõĪO˜1ë•ÄļžüĖ4+õ%/íáZįĢ}ú’^Ėqäô;ĮÚ°ogZ˙eKíĘCēGBę¤6Ųī•Ļō֐\,¨ŽsČTĄž.=¤qAéØ,îįˆ:šéŲ/ļûXô°byØ/Ēo``ēÕuâ{zZ>fęķ/ēdū¤>ę˜Ö—L'¯§ûÍæáty ײ2đéŪ9ü A÷°Î#ĩĐj ÛlŌÆĩ8âüs…Ŧ%iaĪHx1 įÁĪ5k[ŪĘڄ“ŽĶ> }hÍlŋˆQ˙„€h2 8ÆwiĸF?gÉ÷ķ8p|Īĩ:üčôk¯ŊÖ¨ÕÖ4hŖÂ)eB@! „€h\ Y{ũõסõh+vyšĒĶ^7ŋm(vy Ōļ|y´ ųô*~á"PUU+ā~cÔÆušß:ĨC!Đ\(:YûîģīėÄOl”öWVVÖ̧1Ęģ˙ūûíĀ´éͧĪS^]iIáÕV[ÍŪ˙ũdT<Ÿß6,hyķT GDKĀ,GŗÕČŌwsÉO{Mœ8Ņúöík#FŒ˜G䍪ޞoŋũvžøē"ęĶYW^Ĩ ! š;E'k×\svÚi Œ V—õ×_ŋ^=QŪÎ;īlÇĪIÖęJKVîĸ‹.˛•W^9įĩᎠRŪ\…×h ˜ÕŅ<%5…ŪšŠZ~ųå­{÷îÖĢW/[jŠĨ˛"Æ ŗŊöÚËFmGq„ũú×ŋÎĻšÅlā6mÚ4ķ° äĶééō…€‹2E%kŧM?õÔSvđÁg1{ûíˇmŗÍ6ŗž={ښkŽi˙ųĪbÚõ×_o̝žēŨsĪ=ļå–[Úæ›on÷Ū{oLƒ8]zéĨ†čâ‹/ŽĮÃ?œÕé'éōf͚ek¯Ŋļ­ąÆņÍâàņ—ŋü%faĒ‘ ;í´“}ōÉ'1žK—.Öž}{{â‰'â& ęsß}÷՛†Ā!Cĸú–——Į<ükhęĒ zķ•įņįw^$l°åšZ]T1;ũôĶ#Î{īŊ70Ø~ûíÃģė˛K cÕÜtĶM­C‡ļÎ:ëØ;ė`Ÿ}öYL{ūųįmĮw4ˆũcĪ=÷ŒņõũË×wɗO'ׁ~=`Ā›1c†aEÂÂtÉ%—ÔY\}}wčĐĄņ>YvŲeŖū|0ęĢ—|ųę*¯Đž›¯A7ÜpCüÖß˙ū÷Öĩk×ŦØmˇŨf[mĩ•=ķĖ3ö /Øų៟M;öØcmđāÁ6yōd;účŖm“M6ÉĻq’Oį\B ! UĻL™’I?˙üs& ؙqãÆeŽēæķĖ&gš9öƯ3a °Î#<\Ã&ˆē]2ūퟺBcĮŽÍ„é‹Ė]wŨ•™9sfæšįžË„ˇíL QfŊõÖËp<ūøã™üã™å–[.ķ駟fÂÔI&ŦL Z™[nš%/ŊôRV¯Ÿ¤Ë#> B™>}údļØb‹LP3aāɄ7ú˜% \™>ø SSS“šņÆ3'Ÿ|˛ĢĘ Xfà 7Œyūũīgz÷î d.Ļו†ĀÔŠS3āežøâ‹ŦžiCCĘŖā°8Ho&X."恔dëã'‹*f\×VX!Ã5āųJ+­}ú3ũęę̝Žũ:ûLØÅ“yå•Wĸ,×5LģÅsúÚŽģîĪëúW_ß­K'å͝'Mš”ī /ŧ0,UuĶōõ]îŲ@Ō2aŠ<ęƒ@‚2~øaėīųpŠ+æ+¯Đž[oƒRīŊ÷^ŧNtPöyä‘G2;wŽ˜qĘ ! ЉĀ7ß|ĮOøĪoxÜ%, ‰Ī^žãÁęãāDõņ&ŌáWđ,øz¯x6'yį–Žh*˛Ŧ™`Qˆƒ§ƒ ƒ<$Ũ)§œ’áĀAJž|ōÉlō•W^6"gÅWĖĻĨOr•į2aũXæķĪ?÷`Ögp;ûėŗ3ÁÉU°>eĶŌuųã˙˜ oū1ŊŽ4W0hĐ šČņ mCCË k3ÁRĢÄ@ ųMēEŗË.ģ,sÎ9įÄ&ҎÎ8ãŒxūĀDr”l+?„ Ŧ6™`iËĢc†ø`ŊIŠæ<¯¯īÖ§“ëĀũpØa‡åԟ/2Wß}ėąĮâĩüÃūņ#Xî2W]uUT“—úō‘9WyÄ××w‘iˆãšpŸëv$׎#XĨ3Á™yã72ĢŦ˛JæĢ¯žō$ųB@ĸ °0ÉZŅĻAīŧķNÛ˙ũ­S§NY#$Ķ‚K.šd6Ė áät!ĶŖîXãÂwN܅ÃOįņs•—J¯ WÚ=ôPÛhŖâtįŸūô§¸Ļ,™']—>ú(›\WZV(ĮICÛĐĐō‚e"ւoĔ””ĖUŖE3ĻĮ‚ÕĶ‚ÕÅøHķņĮÛ—ĢŸíąĮqÍ\ëđ‚`eeevĮwØvÛm7.ššt&ûn}:{ôčŋĶôszũUŽō’qéžË.Ž+‹ėũ`úķ€ˆŲōáR_>/3]žĮ×Õw]f~ü`aˇnŨēŲšįžkÁĘnˇŪzk6{ģvíėîģīŽĶŸ\ãđĸ–M͉B Ĩ#P˛Æbä›nēÉ´â\xkS|(ûÚĄņãĮĮrr° –‚¸s ’vķÍ7[˜"‰:øëW8pŦ/c2._y11Īŋü1n ØgŸ}"Ąd@Hģ0…‹%Ԑ… $ëYWZZ‡¤ )ĪËÍåˇĖXk¸ņÆGōy ĶŨąŠ[oŊu\Ÿ÷îģīÆp˜"ĩSO=Õžūúëlz°VZ°@Y°ÂÅĩŦ'ĢËÕ×w)3ŸNÖĪąÖ’&˛öęđÏŗŽōęJŖÍŖFŠë)|ĖÍ8{IDATYwä‘GZ°>Y0ĶĮlųpŠ/_]eÖÕwëĘWWZ˜ĻŽ“õvlrId›úâX[HųrB@Åĸ5ˆƒ–ą¤cĄ5oĶ'œpBÜdĀbpŦ!n@–ˇzŦ]lØwß}ãBp×Ádj30aķÁ)_y Ölb€ø‘¯˙ūq!3ú–YfÛvÛmmÕUWĩ°Æ'žl`8ëŦŗėöÛoˇ?ū8Zĸ¨2ũúõ‹Ÿ Š+ Ŋ´›rXŒÎĻÎ}ôQ’ĸ›ß64´ŧˇŪz+nŠĀjQQQ­Îßūöˇą-3 Á\-eąaá_X_¯!›Ø@†–ļmÛÆxdøL›؜gˇ2ęrõõŨ|:zčĄHBÂrƒ¸ië&›UN:é¤ēŠŗēúnX›gXE!}a-ĻąÉ€ -|]Û].\ęĘWWyŽ3_ßõôųõ¯ŊöZÃâÉ.PîEÂrB@!`VŽ%`:+ S3įŨ3É>SczˇĩkŽœŗÅ>!ž=… ¤ß„=‘ļ×įs ^ɝaČąc1ŦY‹;Eķå k¯Œ#9ŊZHyųôaŠëØącœĸĘ%Æhû´Ģ+--› 7´ -/YĖŧ-XĖ điĮô(Ö[,MIĮt ×ōĘ ĶĄķãrõŨÕ9?å'eiVEĻ Ķ..ČՕ/­'ÎÕw“éķ{nÛoŋŊ…ĩiķ›UōB@&EC˙Ė”ûXųķũܔĪÔUŠĶīkޝiũ—-ĩ+ég ƒŌ˔Š2—pČ!‡ÔUט–&j|â`˘1ÆÔ€|ŌÅz´  ŦōōUˆ53uš\$ÍåëJs™\~CÛĐĐōrÕĄ%`æíĘEÔHã†J5âčc]mˆK÷ŨÆĐؐz'š–1­#.õåKëI†sõŨdúüžcŅdŠXN! æ P˛6§¸ÂĪt|„oĄÉ b"ĀÂÖ~åsásqz>_ēↄšoāÉ ! „Āš-YcM‡œX°Ģ2|Æca­2…€B@Ė…@Q6ĖUĸB@! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€# ˛V0TB@! „@ņY+>æ*Q! „€#ĐĒ`É_|ņŤ$"„€B@!P(FÖ6ŪxãB˔œB@! „@h´@ $&„€B@…€ČÚÂ@]e ! „€Bā˙Û;ĢĒ4ŽĖĀĐQą .(ŅČ *vŗ k‰eWM\{‹1‘ØĸF]{ŒąÄ{‰%öŽąŦŊ`ÔØ;˛ĢƎJQ`(;ŋķø†7įÍ{āĖ<˜ųŸäÍ=÷;ß9įžßŊûį;įŪW!‰ĩ AÉMD@D@D@ĒA@b­ÔÕ§ˆ€ˆ€ˆ€TH@b­BPrjXĢuõ)" " " XĢ”ÜD@D@D@D $ÖĒA]}Š€ˆ€ˆ€ˆ@…*z)î¤I“ėâ‹o¯°Iš‰€ˆ€ˆ€ˆ€”#0Š~ûF—AåÜŦ"ąÖŋģÍXëŌĨËb .X° ™m1‡Æ÷ņm,ĪŲb9y÷ņm,ĪŲbšę‹Ÿ_#ž×GÎËuũčúņkġņúČŲbšŽ]?~ø6^9[,×õĶ9ޟĪ^ékS~->ķÍ÷+kĩĩĩÖģwīæĩƒĨ’ /¸7ËĒ~yáÛ Z0ˆŸø˙g*\eŗē~tũčúY<QöKôũŅ÷giŋ?čĢJR…b­Æúöí›Ú‹Ĩį}‹ƒį}mĨō9ߜMõņ,rŦrļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜¯­m`ˇlĒHŦÕÔÔZĪž=Ķ”gņAЃ+J/cë‰2ß÷|ôW}ņ‹×ƒ_#ē~ "ĪG^úūčû¯ŋFôũŅ÷Į˙mĐũˇ Güģŋ/ΈmĩôKMÍüÆŪįq-ϊÄ-ø}mۃ—ųļØ^\§”_)ģę/:Å,âžø->y”Ę‹ßĸk+2Š\ZĘĮ2Õ×õĮõā)^Ĩōøz™oUŋ@ ō(•ŋå˙úņëŊÔV¯î(EFvXHŦ„÷Ū{Īnšå̝¯/*iŋŨŲŗg¯K™5k֟ęô÷ß7Æ3eʔ?ÕNGŽüÃ?$FsįÎ]âaŠī#SĨ Pņ4čR´Ũ*U˜GŪe—]šÚ=ąŊúęĢíwŪą>}úØGaEBđp#fJ‘ČÔÍ7ߜ„Øgœ‘ĸO§Ÿ~ēũúë¯vâ‰'ÚŪ{īĄ÷ĮöļÛnŗŠS§Ú[oŊeG}tꇩ/Dԇ~˜Ú:đ›ՋmTš'ēôŅGŲ6ÛlcoŧqŠæ­ŋūúi,ˆ—ˇß~ÛFÄ‘Åɓ''!7fĖCpPĄG4ލãyįg+ÂoܸqŠîˇß~k×\s}öŲg‰ÕÎ;īlûíˇŸ!˜.¸ā‚äO§5×\ĶN=õTã…Čm5fgC˙ˆ%"[Æ ŗ¯ŋūÚ^yå•ÄD9ŋũö[bC4Ž÷ū}ōÉ'vë­ˇÚ§Ÿ~šöĪ:ë,[oŊõlƌvĶM7%DE7Ûlŗ]|øá‡íąĮŗ8ĀîŧķN;á„ė‹/žH6Î)¯§!ĸ×Ū|ƒļ" " ŸĀĖ™3­W¯^K4Đå"˛Æˆž˙ū{ģįž{ėŽģî˛#FQ#7_D΍7Ūh[mĩ•]~ųåiŊ7éëŽģΆ ’|h1ãĻī븘fũ駟˛kÔöŲgŸ$˜–#ęEzüņĮíÕW_ĩĢŽē*‰ŋÍ7ß<Ų˙ė ĮˇéĻ›6EŅˆĻąŨ#‰ëSO=•ėcĮŽ5bfäȑ‰ ‚Ģ­ļZnøĪ™3'åĪ>ûė$N‰PîšįžvĮwؓO>™Dņ/ûîģobJģ¤ļsj|áÎãEl›1ûēŊK/Ŋ4‰VÎ1kđyä‘T ÷ķĪ?ÛC=dø0fSÉ\D+ëâ$ž Îīāƒļ5ÖXŖÉæ‘K/‡{{ņM§?" " ž÷!–Z-iZnÄŅ„ĸ‚ˆŅŌK/Ŋ”""O<ņD*cM$"qÜŧ_|ņEģâŠ+›æBđ!Å|2„?žöĢ{÷îMõ‡4Š?ęp īžûŽ Tū7ŊB“%ŗˆ’Ģ”#}MÛu×]íđÃOkÛ8ŽēēēôĄ>Ņ0+˛1H4ލŅĒĢŽj{ėą‡uëÖ͈RzZyå•S4ŠHęũōË/Ѝ­Æėũol$Îáë¯ŋžÄ&ëų8˙üo„kD¤õĮLQ3ĘũÅÍD×YgÄˆ)ÖáÇ'ÆÄ‡܎;îhlvū)oožéāôGD@D C`ÖĄÆŊ{IĶr#ֈr1B„ø2͘DExđ€)ŧSN9Å$ĻüˆŽ!bzë›ožiâãâhŪŧō/ŖŖ’û#v˜vE¤1uxÉ%—4ĩųg2C‡Mՙé]’—“įXxzŅE Ķŋ1ųąFŒ"<¸ā尌ãGđŅĻG™ŧ~[ŲÛ/Ūē€DŒå¸#įøČ#LQAęuÔQI¨q {ėąöĖ3ΤąqüŒFŒĩx<´Į¸Cq˙ØÛ“oq˙ÚčXj>ø`jņž[é([k÷´e&18ĸ$tPZ‹ÄT 7]Ö#]aÍĶ;ėÖ,!B5~ūųįiMS ˆīžû.‡ČĶĒŦyBxĩ”eLĮš0ĸMlLģąĻŒ'.[#1­ËąÆt$‰Ōk¯Ŋ–ĸDqē•)QĘøņ㓨đ2Ž‹eÅ ąĮš0"UŦķcË+B˜r,—ÚjĖŪ/į–éĮ÷ß?‰ß>ø ­Ũ[wŨum“M6Inœ;ĻzˇÜrË9ÄČ:=ö™îæœÃ…k?Ø1]MÛL•ÆTJ¤šO{ķõ~ĩčxX÷…úÄĶü…?ø´p˛ĐÍÍļ->`ЧGA­Mš°ĩfÕÛ×ĀM–Wj<ûėŗéÉPÖŽņZ D‡¯I#ӄLq1U‰ČâFžũöÛ'@ģíļ[[ŧւp¤G¯rŖaŨk XãÅÚ(ÖB1Į)ĸÅû­‘8.žú$zxōÉ'S¯Œ 1rüņĮ/Öc:÷Üs“ !šČú*Ķ—< Áz,ʙæôDԌöY{ĮCDŽx%НįrŋÜļ­Æė}ņĮ!‡’ÎŅ3zā!"bˆLĸĨœ¤ā\"N™ĘDh3åÍØ6Ø`ã\‘Ž;‘‡,đįĄĻÂ+Mí͡Ō㒟ˆ€ˆĀōE€ ëŦŅ|Í÷<Ō”}5 O‹ą3ëŌeYL‰!h›ų­ã§ÛÃī4XMŖfģc\?ëYWP딸ō!ą–‰ pŧĘØ'†ČÁŽßü‘næÜ´YhO"īSeøqŗ§Œ1#pø¸ōŗûL­QFß´Ë{W<͖:YĘ? ĮA¤‰wŽŅ}pœ|XĢÆkLpl/‰ã‚‘3ÆNbK9į”õl´ĪÅÃĶ”ė;ę9SęEæm9fú…/ÉĮČąúšÆN9ĮÍzEÖĨqœ7cc‹/Įëœ(ĮŸëļ+ ?ˇ´mÕâËq(‰€ˆ€t,ÅB Ũ@ĐĮ…ŖũוĶŦĄq5Ö^›uŗC˙Ö/é îyÜĮbj1˛ļūęĨG˜n¤š6zE‘šØH[įã͕ž¸ Įäb…tüåō š6OžwA€8ō„ÍíØŧ.Bäe.’ą˙¸xbJčc‹] *°3ļXŽ6› ČČå¤8fڎí°ëĩ嘋ûĨīâÄ9ā\"ÎüXđņë ĮvšØ9oŪuc}ÚČŲڛ/ĮĄ$" "ĐqT"Ôžúš10ąPš ėSgÅ"͉dŚ;ÜÕzt›mŗZ/|<§jbÍļ3m ʼnķ›ö‰)ĩ>ņm}ĻjQD@:fx­˜GĐr5˜<7Ą0ÛĮėå¨ĄY9քŽä$)7Žžu5ļÕ°‚Ú{ûËš6ņģE¨Ļ”iWLķú+EÚĩãNŌ™øv’­aŠ€ˆ@@˜U"Ô~˜2Ī^ú_AŦú‹ŲĀžÍ§>ãáeÅBÍ?{ŒŦĩî] QžĢŸ­ˇŗ›G|bƒĘˇ-\Ä­m{ė\­‹oį:ß­ˆ€´âZņž÷ƒŽēāŅ™iÖ˛qĩļí<ĸ Ô\wš_Üf0ā†Å:!ÖOąVčéęíö× ēnp˙û÷?zŲęũ ‹Âccʋ€ˆ€ˆ€ˆ€ä 0CIāë§i…ßûūįČųļĪ=͌ëÍũá„[LYą†bÅ×,âF°]ûÂ\{ëë‚@ëҏdęoÃëėī#ęlčĘm¨ō" " " "āęį,Hi˛öŸ%ežF™kãÆtKBčXŽX#•k8YãÉAž$ēæ‚í‘÷æŲ&°¸}‘âëÖØ.īéßģKzÅõ•D@D@D@D ŗā=ĩ“§Î7ų-„đÆÚÕ&NîÖØų"ŅF=%æē×ΡQk5ØNÃlĩuéuTDÔjU+ĩn­äŗĸT@áĄôˆ˛ņAĀm¸†Ų烿Ø/ŋ×ÛėjŋÍčbSęklúŦšÅ”cķÔED@D@D@:ÂYŊ樠>ķlíķlØ ųÖģ/ׯK5j.ŌJEԜTIą†Clĩh[ĨļĄņQĶy"ŽđƒØ^žœôGD@D@D@:9”ą­ļļđ+:4„būPAK¨˛bÆ_QŦ҈īĶ0ąĻ-FŨđ‘hƒ‚’ˆ€ˆ€ˆ@g%€^"EŨäÚ ††ĘEÕŧ^1ˇŦXķŠ[ėÔ†Ib­ŠöE@D@D@:;4“ë&_VVˆ°Õ6=L§?K 58–kR1 6ī”Î\¤ųZ6üUƒš’ˆ€ˆ€ˆ@g'€fōĸŦøãep"ßRjQŦy.Øŧa:tqˇ-u¤2čL\7åļÎĄœPïŦXÃÉŠĸŧ§˜oÉæeڊ€ˆ€ˆ€ˆ@G$āšÉĮæûž-ļû~KۊĚ7PÜQ9ģ—k+" " " @)UŽË‰ĩØØŌvÛP^D@D@D@D e…_goŲGĨ" " " " U" ąV%đęVD@D@D@*! ąV %ųˆ€ˆ€ˆ€ˆ@•HŦU ŧēJHŦUBI>" " " "P%kU¯nE@D@D@D k•P’ˆ€ˆ€ˆ€T‰€ÄZ•ĀĢ[¨„Ā˙ƒ&ĸ6ˆEuũIENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Revert.workflow/Contents/document.wflow000066400000000000000000000160561445560650400313310ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx revert "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{170, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Switch....workflow/000077500000000000000000000000001445560650400250325ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Switch....workflow/Contents/000077500000000000000000000000001445560650400266275ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Switch....workflow/Contents/Info.plist000066400000000000000000000011721445560650400306000ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Switch... NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Switch....workflow/Contents/QuickLook/000077500000000000000000000000001445560650400305305ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Switch....workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001105661445560650400331720ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëUiCCPICC ProfilexÕYy8U]Û_ûĖŽs Į<ķ,ķ˜yžįšpĖķŒáˆ‚^'øÛ9ūeŗæíŖ÷—đ 00ūmƒ DīöÅĪ9_P˜éîāžŠĀ"á:H3  ôūĒ%/ ĀšXX‚ĀŒCāap›0“˙˛Ķũ‰Á¯v~pģ÷H^°mĖß}ūî ÷ųĮgđ†ņ9îcWˇ;ē(÷€Ôúücąëī×h¤kĨßIoũJ%‹R@é ÔQ(@F1ŖØ$JĨŒŌFiĸÔ` 0¯aĪ~Ƹë?¤Ņ7ölXŧǃ?ŦŨũīž´Āá—uĀßŋ˙c `hšeųĪˆö9ŋ膅ĮGøųG“ĩá7×G‚lę%%A–•–‘ŲU˙ŋ)ģkÖīÁŽÚüZ‹ æádūj¨-€E˙# ˜ öŧ˙Č:āđ fÔ+&2öˇ?Ôî ¯„´p„˛nĀDāį, áĩQ č` ė€3pƒãĮŽÁHA HŲā$8Š@)¸Ē@h- tƒ{`Œ€ 0fÁ°VĀ:؄  !ˆ â!qHR†4 }Č ˛œ!Č …b Dč” åAEPT ]‡Ú nč4 MBsĐ;č ôDŒ.„bBĄ0EØ!ö#üˆDââ,ĸqҌčF &ŗˆ%ÄW$@R#™‘ŧHI¤2Ri‰tAú"#‘‡YČd9˛ŲŽėGŽ!g‘ËČī( ŠEFIÂqj„˛GyĄ"P‡P9¨"TĒՋCÍĄVP?ŅD4'Z­Š6F;ĄũĐqčttú ē Ũ‡ž@ŋA¯c0fŒ0F c„qÆbbr0%˜Lf3ųŠÅbŲ°âXuŦ%–‚ÆĻcĪa¯bī`cß`7pÔ8œ,Îį‚ ÅĨâ p5¸NÜcÜ[Ü&• •*•%•7Uü4~•šššZ…Úš:€ú0õYękÔ÷Šį¨ŋH1‚.a!†p‚PIč"LV‰DĸQ‹čBŒ&ž Vī_7hh¤hŒiŧi’iŠišiĶ|¤Ĩĸ¤ÕĻuŖM - ŊA;LģLGE'D§KGĄ;DWL×F÷”î+=Ŋ Ŋ%}}} ũúE–$DŌ'y“ŌH—HwIķ H~]/†#  } o1ŒÂŒÆŒŒŲŒuŒCŒ+L$&y&ĻLÅLˇ™f™‘ĖBĖÆĖÁĖšĖĖO˜°pąhŗø°d˛ÔŗÆžĮÖaŸCĩÃ7G=Į<ĮY§=NINÎėÎέ.X—+._]õ]ΏžŲ§°/}ߓũÂûėāÆîėv۝֝â~ÃíáčQãąEऔSžz{ž÷\ņŌõ*ôZōÖōÎ÷~įŖî“įķÖWŨ7ĪwŅOŨī´ß;M˙˙åŨ€ĸ€ĪFĨß‚,ƒ*ƒv‚ƒBp!!mĄ¤Đ ĐŪ0î°aŖáâáéáŗĒg"V"M#¯DAQûŖZŖáäp0F$æhĖ\ŦFlqėFœC܍ôB ƋÅgÆŋM0H¸|uĐë`O"obJâ\’vRŲ!čįĄždūä´ä7‡ WĨāS‚RĨJ§æĨŽq<ŌžÆ•v8mū¨áŅÚtšôČô§jĨĮPĮŽ eĘežËü™åõ0[:ģ {+Į+įáq™ãgīœđ=1”Ģ˜{á$ædčÉ'§4OUåŅį%ä͟6?ŨœOÎĪĘ_;ã~æA|Ai!ž0ĻpöŦŲŲÖsįNžÛ*ō/š(Ö)n8Īy>ķüˇī’Į´.ԗr•f—ū¸pņY™aYsšPyÁ%ĖĨØK ũ—•/W_aŋ’}eģ2´rļĘĻǎZŠē熺&ˇQSûîęžĢ#uzu­õ’õe Ė Ų×Āĩ˜kī¯{\ŌhÚØsCųFũMÁ›į›š˛šĄæøæ•˙–ŲVįÖŅ6“ļžvĩöĻ[Rˇ*;x;Šo3ŨÎíÄwĻuîÜI¸ķĩ+ŧkšÛ¯{žĮŊgęŽĶŨņ^ëŪĄ>Ķžû÷ îŨí×îŋs_ũ~ĮÕm•ļ (4* 6=RxÔ4¤8Ô<Ŧ4Ü:ĸ2Ō>ēw´ķąæãî1Ŋą{ãÆãŖOėŸ<{ēīéė3īg‹“Á“ŸŸĮ>ߜ:<žÎzA÷ĸā%įËōŅ™†YÅŲÛszsƒ¯l_MÍ{Í/ŊŽzŊõ&m¸Pđ–įmõĸėbĮ;ƒw#ī]ßŋY _Ú\N˙@˙áüG‘7?i}\qZyķ9ōķǜUļÕĘ5ųĩž¯V__އŦo~ËÚ`Û¨úŽüŊ˙‡ãˇ›q[Ø­ŗÛĸÛí?MNī„ėė„S")ŋr$\#|}øR sg˜;Œ€īúÍ)~YĀt‚m`Œ„ķ_!`į§×Ā7HJƒ&jˆjxŊ€AuŖŨ0Ķ‚=„ŗ âĸÚĀĪP?& Ō<ĸ§["á$͙R˜¯˛ŧ`ceˇāČæâĻį1'įđNđķ ø Ö}Qģ+AÔ—JÜĶ%Ŋ-k('Uგ ˛ĩJ˛jŊڜ:Ŗ†ŧĻ•V’vĩN‡îŪŠĩ!‹¯ą¤‰’ŠŽ™ĩšŗ…ŸeĒÕ9ë:x%xiˇâ™D•]l\#ö%ī?áVåŪé1J™õüâō!ų øÉûëX:y„Ä…&†e„gEäEæFŒ>“›WxātüɄôƒÉ‰1I҇“)‡R SÕČ§IåN§MßÉX=ļœ95Ũ–SwŧųÄėI–S†yņ§KōĪėJŸu;—VTWüĒ„xAŽÔãbNYSųdâ˛ČķʘĒãÕ 5CĩęhëeLŽy^oĖŊQuŗ¯i´yąågm;ī-éÛæwŧģÂēôš›×{ž¯ö^KĪũ;†N , ž~46ty8fD”4:ũ¸aėā¸ÁibæIũ̓ĪL&Ų&_?oĘ˜ļ{!đbķe˙Ė…Ųˆ9ŊW,¯>Í÷ž.}“°`˙Vf‘~ņĮģ'ī;–Ē—OHųû)hÅ˙sĀ— Õøĩœ¯ÕëĪ7ž{ūŨ ūéļŗŗ'0{f‚`/p‡@5˜‚3;Kč4…FœBü@† ßŖbŅt5Æ‹Įā Š‚ņ&Ô{"DfZ.: z5’-CcS%ķ}–u62ģGgW3÷ 2¯Ÿ+Ļ@›āŧ0^DZÔ\,Dü´Ä-ÉįR_ĨeTdåÂå‹šģ•ž)oŠ2¨ņī•S7ŌđԌƒŖáŒN™n•Ū ũ;ƒ†SF‹ÆĢ&ßMˇĖļ-P–´VŦÖÜ6ŧļ"vōöĘŠŽN&ÎĻ.&Žvû÷[šŲ¸ÛxØQ\=ŧėŊ},}ÍüLüu4Ղä‚ÅBøC9ØÃIt‘Ø(DÔVôZĖĮØˇq3&ã'<FĖĪ2ČöÉÉ>~íÄpî‡Sø<…ĶųQgŠ ē įĪĄŠÄ‹-ÎĮ””^č/ũXÆXŽrÉ­"įr˕é*DĩTGmÎÕļē…ēk×Ŗ/ܸųŖyO‹_kA[ī-¨Cęv@g靑nLöŨ”ŪŽžĩ~ūûĘö>ÔPT|¤8¤8Ŧ8"3*öX|Lxœ{‚ũ ãSÂ3ĒIhrûų§Š÷Ķī^ŧ{97ķfvfnîÕėü‹×ķo>,lŧŨy‡{Īž$ĩŦũÁöcø§Ŧ•ĒĪ_>¯ņ|5[OøVˇąđƒs˙Véöâß_ķô0ߒæ0ˎÁGˆr…ķö„â b )ƒĖGnŖBP¯ŅžčEL8f›‹Æ=  Åŗā{¨Ŗ „%b=M4­œGŽŅWŦ…™ Ļ9æ>–JÖ ļ@v;]N!.,×:÷žAr#o1_:¨€ĩ ĻŸ0ZxCdB´YŦDü°„줁YjkĪ3éz™#˛.rbōXų§ W(™+ +ī¨L¨VŠ%ėĩP×@iLi^Ķ:ĻíŖŖ¤K¯ģĸ7¨Ų ŅĐÕHŘɸ“É}Ķ2ŗxs[ KŦå+Ģë›h[c;Aģûg×3ŧœ]č\\Û÷åî÷sĶvgw˙čŅM)ô ķŌ÷æô^õšī[ėė¯ĀīõŊAį‚cC BšC×á}Ŋ>âh¤W”f4o ˆ™í‰+?ī P,‘>q#éåĄŪäēÃįSޤFqKŗ>Ē‘.™Á{Œ!ų#ëSö|ÎŗãŖpüôŸė<Ք×pē1ŋáĖՂŠÂËg/ž+-*/.>_^rņBeéPĒ\ūĨâÄåÎ+KUôÕ*5^ĩĮ¯ļ×-6°^3ųCãMÄf–ČÖúļOˇd;Üžs‡ÔÜ}ë.worßĮ~īûĶĻæš÷8f\˙‰ø3†į‚͆/“g?ΟX}—÷Áúķđ†Ķîü˙>[ÚŨ0ŠœuĀ™ kCrö Ô +"v*!Å ¯=ŌÉũ{˙`ĒđʑJ`ž8Ą ˜†Cų0ߛA`R{Dâ2bņɏ´F&!k“(|‚ā3ą!4­ŒA_BOa˜0V˜lL?‡5ÄÅöãˆ8\nžJ’*šĒĪ„÷Æß ÆRģSˇÂĖ'„pŸ(HĖ&ŽŌ8Ō´ÃlĻ„Ž@wn…>”ū)„´ÂÍđņé$3 s‹K;Ģ)ë [,;žŊ‚C›c’3œ‹ĢÛ™{‹§‚lIūÉ[ÃˇŸŸÄß'įú߄ڄ“E DŠE'Å*Äã%L$E¤ĐR3{ú¤Ģd˛dãä|ä÷)Ø*Z*é+¨ĢZ¨yė PĶHÕ,ĶjĶžÖų¨GŌW1đ3Ė3Ē1žlrŌ4Å,Á<Ü"Ö2Â*ÂÚĮ&Ô6Ė.Ų>Įá¸cĄSŊsË¨ëž7nwuGJĒgš×¤¯ŒŸˇQĀXÖ 9:ÎŲõ3Æ#ļų1>4a$Q!éR2ũáC);G‚Ķ>¤‡d,gúg}Ę ?ž‘›vJ$¯1ßôĖDáĄs†Åv%ÁĨGËZ. _AU)×D\Ŋ\?í†oĶ…–ˇí{;ĸ:‡ģ‰w)}-÷Ą‡ÎƒĨCKŖęc™ˇž‘ž[O§ŧėũ2ĪōÆč­ÍģØĨC’>Å|vYåY[X?ˇ!ņŊr“jËfÛíįá_ë‡ |žUúĀgˆ2†ĸĄRč!´Ž #Ė`_‰G"‘˛H 2Ų3rI”ĒõE렓ĐčL<æ6`õ°™ØĮ8Nœ?Ž•ŠŠĘ…Ē–ę'Ūæž>ÔŨAB áŅ”ØNCĻÉ Y§  }AgM×G¯J›¤@jbPcčf4bereZ`ŽaÁ˛\`Uf}ÂÎNÍ^ÃaÎąÆYÄĨÁĩÄ}Į”gƒ|7‡oŠŋLĀSPXpYčšđaKQ.ŅobCâW$ŽIúJf—ÁČŦÉÎË=–ŋĢĐĨxS NCUUÛÔ:÷ŪS‡YŌ{m”Ž°ž†ū>ƒÃBŖ:ãF“ĶZŗķ6‹~ËQ̧Ö36Ÿí {nIGe'{įh—L×ō}wöĪšc<¸)Ļž^ĮŊoøLûaũ|Īõ  ķ /‰xĸÕbbc¯Į}‰WNˆ8X—øífrúáTâ‹´˛Ŗ_2¤Žee>ÍæÎ‰<>K>uĒį4mžį™žBŪŗEEZÅK%EĨîeLåc9WĖĢĒßÖ6Ôå4x\WēÁys­yēĩ­ũfGIgJ—wkīŪ{ō÷ɉ6†gFûƚ'ĒžfOO™ŧИažũōjüuŨBęĸÃ{îĨĨˇ>e|6_ĨY{¸~fÃüqŗc;ô×ü̧HM` ’ƒ" Fh Ą€8€¸D ‘Į‘OP<¨`T+ƒvDWŖ71˜Ë˜ŦöŽ…{L%OU‚Įâ#áŦŌŽē— Nh%JoĐČĶ´ĐęŌĐšŅ­Ōg‘$Hƒ ąŒŦŒ™’˜Ĩ™įX YmØŲž˛ŸápæäįüÂÕÎ}ŠĮ‹,ĮKÍģĖwŋB C0LČUØLDCTJL\œO‚_’[Jd¤´’Œ‘ŦĢ\˜|ŽBĨâ°Ō7UCĩ¨Ŋuę šÜZû´‹ufô$ô“ ƍ؍ŖMÆĖÍOX,[ŲX_ĩeŗK˛_t4vjsásÍۏsKp_Ĩøz>÷ļõöŗđŋ¨ÔĸÚŽŅī ũąqcņî īã“6’3R8RĶ gxûžu>Göøxnä)B^{žÍ™íÂķįHEąÅS%Vē/*–U_âŽ(ŋ"TYį 7Ž*Õu4h]ëk4ž1×ŲŧۚĐļ}ëômÁÎĒ.ąîĢwĨzîI÷_}@ķ0gúQäĐüˆõčĩ1šņā‰OŸž|2Å:íôâė˧ŗLs6¯2æë_ß}3ĩ°ŗČôŽ˙=ßī2ĪŽlˇ?Ŋ\éü\ōÅUfuuíúאuōúġ˜ ÂFÅwųīw~˜ūx¸Š˛YĩŞ•¸u›iÛsģ~{ķ§áĪ“?'wøw‚wšwį?ĘWNvw÷A>~|šŗŗ*Ÿ_æ°}jggŗ|ggûL2āo ]ÁŋŋWėcā3÷ķ™ģčîõĒŨÛŋ•˙A4zXąî8” IDATxėœUÅõĮĪîŌ;"Ø;(ĸĸbī(öŪ%ļXbī=ųĮcIąFFM4ƒØbī{EĆ A@Š´]Øōūķå<.—÷vËîcY~ŗŸģsgæĖ™™ß{įwĪĖÜW2zôčŒÉ ! „€B@4KJ›e­T)! „€B@ˆ€Čš:‚B@! š1"kÍøâ¨jB@! „€YSB@! „@3F@d­_UM! „€"kęB@! „€hƈŦ5ã‹ŖĒ ! „€B@dM}@! „€Í‘ĩf|qT5! „€B@´B@4™LÆjjjėë¯ŋļīŋ˙Ū&Ožl­[ˇ6â9p%%%ŅWxŅÄãÎĢËŦŦlūŪ{KBS{ôjo[ \Æ8ގĩk×zŽžMđOũQ÷ۂ>oĨūŪˇĐBSYĸŸ›ZhØĢāŒ€/ˆÚāÁƒ­mÛļļĶN;Y›6m"I+++kÁ­oŲMãÚúõÅüéD[ŠWg+ ¤ŪūGžŠåā1Å\!ŸYuøWUąą?Lĩîb“žŸj—_ŋIč#ĩīÎ>˜Öæjœ˙^ßBûŖËį+ôt=Ķá|yŋh!Āĩöū€ŋ(ô÷E áÂj;¯ƒ…é””XŦH>؆-kģė˛KÖĸƀY;°×ę r ĪÁbQÁƒëĖĩ7ËŦŧÆlFu82Ĩ6#ĩōpTļÆAx~H›üōšŌ^j–îbœē™MéŌÎî˙ĮđšÄÆŧŌËJK­4yĖļūrm^xūYûį?˙™%kÄ!ī‡úķ,¤%āą¨ô÷Æŧwš“.Mƒ6§ĢĄē´x°UUUdmŊõÖŗęęęx0¸WWWŁäō-¸†~}šŽ§glԌ*+‰äĻ&\ĶZâ‚- ;ÛËĪüĪļŲq —<ŧL°Ž [đË+KŦ˙Ž}ėņÛŪ°ƒîc­ZĩŠ}ĸąo¯o}ũ‘r++ĢėûŅ?+p[ĢĄÂąæY™MŸ>͞yæ9;⠃mܸŸB?Æ|ÚS]cŨēu ĶÁĩcõë–s_/Šũ~ÜԜČZ#\ҟūŲf˘aË,ŗL#h“ŠųE€hėØąöĐCŲ 'œŗ3X4ĨŖĖüŅ~øáœe’^YY-/Ŋzõ Ä­:đĩY•ŗ‚•­M”yN:ÕîŊ÷^6l˜{ėąļÎ:ëdÛpÅWDũ]ģvÍøā[{íĩcYąüō]īdúģīžkO=õ”ĨëëáĻēgũÅîī…ôéÅQF–ĩųŧęÉä;īŧcŸūy˜x&j)//ŸK˛ŧ4Äũõ¯kœ<ī‚čr ę'ێ.œ;wÎĒm.u,soΈ#lß}÷ˆ7Ļž?Wģxf͚§ĩâ`Âa”<ņUa`Ñ÷•W_ĩC9Äúõëã†ųeü˜ŽĒŒéU!oe {Ų:a•Š’ĩ˙˛3ĖԗëŖ~¯†ú2ģ~ÔĄ2Öā¸ķō‘åH×}`@m ÉęGŸįOëkŽáę@kÂ5ĄM´§ĸĒÍ V˛’0­YSĻHĢÃT`€įéûī´qŖGZ›ļí‚?Ęŋ˙vÛõ“,HŌĻÃ1Ŗ˛Æ*kšĻö­mæĖ™‘°d¯sĖÜŅ?ž{î9FŸô¤ü\‰‰@]ũ‘6ĐŅŲ™úįĐO' đĪ6kú${û…×­õÛÛ{/?iûmŋ–Mžaöųđ‘öķä‰ļĘęĒmüęļd÷ŌÚu™ĄÜ¸F+´Ëëī}÷ZīŪŊkkŽ9øŊôŌKĩũ"ÄÆŪn‘t ŋ÷Î#Ą ~ō~ =WŦ-,`čúgG(<īņ(f÷k&^dY›“‚bxp`æĮ˛ôŲgŸÅ‡\ģvíâÉ´k¯ŊÖļŪzk;ė°ÃlȐ!ŲøAƒÅ)¯-ļØ"ZH¤‡7ëŨvÛ-ōŋûŨī⃙4>ųĀ`šá†ÚV[meožųfĖķüķĪÖ<Ļ˜Žs=I˙ß˙ūˇĄë×ŋūĩtĐAuæûîģīĸ•0]Î5×\Ëũå/i}ôQļĶ't’ŊōĘ+7ʆhūë_˙Šrž7Ã-ˇÜÛJ{^~ųåŦÎdŨķɸNę“Ä– x~°ŲvÛmįÁâąũöÛG ׇéëķÎ;Ī~úé'Ûyįí‘G‰íđ2Ōõf°ÜlŗÍ"înUķ2cÆDXXƒ9›934Ŧi!Žx?°DŊķöÛvéĨ—}cģíļŗAá ^\Mđ9˙ę̝bˇ ˜]yå•ŲÁũ…ĐVú }ęĒĢŽĘĘ{ä'īŪ{īm °-6ßÜĀĮ͎úîžûîØŋˆĪ¤ę÷öėúaEĻß~ũuÔĩÁÄ2_ yđŅ—Ŧī“O>ËÛ2ÔëŽ;îˆ×&–dŸ~úé˜Ė ĶŖč%í´ĶNŗ[nēÉvØaûÃūõžú.¸Đ/'Mš”mĂÃëģ°Âŗ˙d:ŗąŨwßŨūō—ŋؚkŽiåÁÂíō”7*×!1čÜwß}1īȑ##Ųb ëØąŖŨ|ķÍöÅ_Ä)EˆSĄ'Ž"ŦũÁņPŸ,(ĶâˇÖjėĐC‹.¤p‡ļrŗÂtŅēqÛĖ™QĪ´iĶ#‘˙ũīë#m§0Āsė1ņ“ l°Ą1`ũęWŋ ƒöA&ä6ûՙzÔZą wm´QxA¸=î!‘Ŋú*ģ4ž 0Đ?ôЃÁRÚ5æĮžAŧ~ NԏõLW]oŧq `ˇ˛üQÔUKÖkķx}Ī9įœHÜûŽŅ×î¸ķŽˆ÷Ī?O‰Vpŧ˙ūûÂ=ĐŲv „mëmļ }°ĩ=ÆŪ ƒ'Ø.ģė2Ąß=g‡ĩ|=öX¨+úmŽöQ˙h•‰˙HŸmĩkÂ0•¨É@*¯˛Ļĩ˛Žƒĩ¨¤•Ua] ëÖÂ~_.wÖQīøô˙°ŦÆâ85l#[.WûV!Ž?ü´#Ë[øÔR”#û—ĸ{îš'N ōrÃ=ˆCŪ-nIŊšúcex™˜ž9Ül˜ČÍŦāW„ļ…Ūj­:w´ąã~´—éh+Ž´ŦM6Į§;ËjÃūŧb́¯WˆģķÎ;ÃŊŪ=|ž¤]œîį{ƒŧčŌ°ŠņB ĄŋíļŋÛķᅈ—˜Öˇoŋũ.>;YīˆŪßũîâHüXį9bġöøãOØŖųd{û­ˇãKKöÜs¯Pŋįíēë¯ŗË.ģÔnēé–l˙ Í:šž˙ÅŽŨ„ũ;­?4Ēčũ>#77"ksãQpˆ ˇ3Î8Ã6Ųd“há­ī˙øGx€<– ŽČ1]ˆĨËîĖ3ΌDsŦS<ˆ.ŧđÂH: včuũČ„„ü¤ņ tXąp^„Ė CL˙x{d­ yŠ‹įķ8,.šĘaDw˛-ԉĩU8ōcՁđđf-ĘkŦaK-ĩ”]ũõ9ķŌŦ2‡zh´(A"(#9¸¤e°Ē “[Ō8 CÔ!ŨFđĸÎla!Žō¨?ypøÄåk3$l ,ŪÂ!ŸčđA0* ˙ŧ>|BH:Žxv Ö^Ŗđ`ŸũŽZų(åj˙ÅĮf$^ ÔLąžíŨw߉XŋūúëŅÚ´M :SÚŧĪ>ûÄŦŽ%ōb1c­OĢVeŅÚE; Z\wũ¸K—Žą^1b6_H֏ŠT†ÍŽĢ4ė$­Ž!qMRĖĒĩ™øūũûĮ¨-ˇÜ2ž40 1čQ×ŋũíÖXćkF%ũčŖļå–[.æëÛw ›0aB$„<â“mKžĮ Eø¯Ķž”A ڄë[éЌ@m¸f%aˇ'~­ã5‚Ģ.=˙CZ sA8¨°ę’2k[v†âzŸA*é<GswÉ%—X÷îŨ­OŸ>‘!“ בĢ?ē÷O×͎PˆXY bUėĖŦ˜j?~õŠŨHwIYÛj›Ũ‚Īđ6FbWÚÍõķ{Ąļ.ĩ5íŅŖG|áäĨ0YŋÚŨ¤ĩ2Ė,šdëŗzģëîģ‚\i°Øŋû/Ģčcg5FÜĶOŗü$cW]}U cYŖ–„kÂķ፪ŽŽņ^úĐŅĨk—(ķÆoڗ_ũ AŌqGud|>´}hËE6ė“aņš:pĀūQf˙ũ÷÷ZMMõ\ËU’퉂-ā_ė;Eėī-˛&i‚ČZ`7Üôî3Čüīa{~4YĮÆ.A,]8Lō8’Ήƒ+¤ëVĒĩÖZk9dąļy~t1ũØž}ûlĻÕV[-։tō”ÅÃĘķRˇtžUVY%–M9<Ė]éļP:] !oô>úh´öüâŋˆíKįo;¤ĸsüņĮÖ.'P”‰C/ßrŠwÜqĮEô˛P}ų嗏íF—cœŦOž6BļhxĐVœˇÅ}âō՛ibÚJY~ Ī9:Ņ‘v\7/˙¤2öA„<œû‘ ģ>2–‹‹üÁrÉ%—Œy°čBа°AⰐR†;ęĮ4ØË„HAâ<Œ<‡‡É›l× Üč§I] ĀčJæĮjŌŠS§¨=žŸÍ XˆéK„š†ĢŽējļė¤ÚČK–6îúkˇÁ‘ßõĮˆđ¯ŠÃ≪đhß&|3-ÚX æŅĒ– ˙GĪŨoŸ ~4Ō7ä{o8Čė~t´°Õ„õ\XAŲ=:}fČŲĄ "yeųáå#LûŠC2Íņ#Žô¤K÷GԐ÷]¨YŨ!/ˇĒđE¸ví:YĪ^ĢX›ū'ŲkÃeoâ‹ļ۞‡…éĪđŲ’ ã­C°ŽV…iߒ`YôĘåp}LŲrũēš õÄųŊáiÉ~D/HÜÉxÎypá\?ōiÜõ°_CÚQŦūAÕŋš˜ķDŸ+ZBāaÁML'fĀâÆ]vŲeŖÅ 䉩RbŪéņ9čøĢĸ´ôŌKGkkʈ# ø<ĀXŋƒeĩOÄácҘ8qb”㜃7lōy^?ĮG/uņ|^7ōQ,pér aÉļPN’8z}!Lu°c<ÄcyJæĨ<ōVTTÄ6@Đø”KęčŽsڙ”A'ēą’­ˇ;YđIˇ‘ˇņnŨēe­@n9ƒt “idÖ B†ČŸ¯ŪXPyĢgʆ|Ŧąq—Ŧ?q„9Ā•kĪA=}0ãÜÃČķ÷&&ž#î¨ Sä_~ųeœÎÄŌčƒõ—ëŽģ.bézŊ ÚĮú=Ļ*ŅõÃ?DkB­%kÎāįuô|^o¯aŸrGõeZŽū6ČyŨ™+Č5ט‘ĄîäAVUHúŧ,|ÂÜ_\;ÖbŖyû¸7ü ÎĪņ›2ėøx9Z—˛ÖĘ:†_ č4ûč,elģ‡MõĨ}˙Ņ`÷ÕĮļÁ }­KˆīŌļumm‚lĮ6eá(ĩVa͚÷™XâŸ÷-÷éŖô?œŸãã\‡ËÆČD|}ũ‘ļûŦ°ūŽŧbĻ }íöîķ7ØđĄĪÅOδk×6ĶVöJØlpĮ­WØīŊ%ė\.d-X´Â5ËՇ¨:Ŋ?áöx?÷kīa|îE–K`‰ĨŸ{F–—cž/ėJ÷~Ä38™ŸsĘÚKßá˛Æķ ōNŦÛq‡ mdMmo#~Ļ ™NcĄ0„õ|ČķSP,: ڟŽ7×Ōpúé§G9,C{íĩWg/ŧŨ1xđ įŌ8įF„‰gPņƒŧČ$dØôĀÚČ|0ÖŲe=˛´>Ėëu!ũˆ#FŒˆ8Pw^ļדxôQ.‡ëäœu<ôpGk 8ŧ,tŅיîg- }G~ž;G[Đáׇžî.ãm9l>a]"}…ú0ČR—d=ŅYLįXŅ^Î!iÂzģLi°J‡Šá0?ŽRëÜĄ§xę•vĮīŽ´}Nž,ŧČ-Ļ?Ž!‹ä+C ŦŦĘ:Íje;ņÛ 3c3G~Žīįāāa|ģ/šcy‡ëB1ké s<Ÿ°üŖ›ƒr’rŪž–ā{éGœ7eo x5UôÛ ķŦ?ôđyņpã͟ˇ-Ļ=éČ8Ō9°Ü`ąá!ƒãfÎå\o:-O^vÂaŖŌ¨ņX&xHúC#™ÎšëōsōaŨ n^oʧâ)‡s—įí3Ų–d]]ˇį÷°û%Ī‹N×KŊąQž×ÛĶ|ā`Ŋ$ÉãŊ>Ž“üiį2ø”AŊ\d‰‡Xúuqyâ˜ēs<’eß×Ŧ}PĸîɃ|āÅT5u6x;‰'?eĶFú×G]Üy™į>mÂÂåS‘Äŗ¸¤åÄ1ķ2cã xŌF×OyÔßÛäåS'¯#į.īõāÚx?ņ<øžŽŧc…~œ×ÉečknUsÜ]ÎeŠ? “8§ÛŽ_S…Ž%„˙__wĩ•–(ŗ m, Yķļp5ũÛÕļĮ1įÂßÂu†Ŧ…#ÆÂ,bØAZeßü0Ų~6ÔNÔ6ŽĩâBžpāV~?æĀ9†ŪNĘt|ˆs| éŦĮĸ Ú3nüOvØīžļe–[)ŦHŗ0eŨ5Ô§ĩ ú§L`­ÆũÛÎ>ë"›úņŒĶÃGsÛŌū• ܸGŧFô#ĘĻžŪ÷¨¯×‡sõįđöGŊĶí"į÷ϧ!ëŽöŅ?čGŽžcáåįu‚đŅ^Č+ēņÁœŨŖŦɤ¯%ī‡?ū8žüaQCž{ yoĢ—•Ģū^g¯Ûĸ.f÷k*^æŧZĪ›Ļ˜zāæcĀ䭟0y•›ŲɄߨÄsÎáōÄår.ãičr=ÉŪɈ˚Ÿ,'­‹07wŽ—°—ãeāįk iIŨž=īy 'Ëa Į‘ĮõĈÄ?d<=ëãų“:Ŋ|/ËąIĘđđöx/ãųņ“õĻltĪ5wįå$õ{VPō ”ËÁFš? sîúŊ^a?ˆÃrëēČÃÄ`Kœø„Iķ8ΙĻĮĮy=ņ‘ĄŊ >îŖ^ †É:y~tyŊЁK‡Ņéņšd|#ˇŲdŊĐGĀ ęG]ŨwžĪËjʰ_7ęCũēwîdģ„_…øBt`ŋÔ ÖyÁš˜Z’Æ&„Đœp ,ôƒ`é*oemÂIģ ī„6î˜mģįu?ŨNĘMĮy8_Z]ũ‘>MģpÚˇŗíVü<|û훸`ŋV>7‚ëŅĒŊ;rˆ=öā_aéûģx!ŽíˇŲ/Kz¸FčsŦČëטúqЏüœ#^ŦĀIúëÔÜQž÷c|v GØËÁG×ĪË\ÔÃ~ ‹Ųß{ųs˜ķdž§ŗđŅäy:LZōHĻĪÃ?}C#įqžĮõĪšĮģīév9ŋÉŧ/Ķå’>įîŧ ōģK–AœëôtÃ÷ō=-7īįî{Ųî{<~2.ŠĶËÃįHĘĻķÄĄŽ4FéŧÉüž×erĨĮƒË;#ų)2|”ååņ€Į9Æ\›¤KļÅĶĐí:.YއņŊ<¯qÉsīĢžßĶ’ų’e{~|wîeģū%—d-_¨7OĶp`Aã ē=–ķØ#Ã?Ŧj\fČZM 9eã†Ųrí'Įū’ŽĢ—Oš§ã;&É4—q9ĪO¸žūčX3Åâ‰ûÄ5ZXÚčŗ¤ņY˛˛@PgŽ ßļ ë$ˇÜ6öˆž/ļĮĮûļ×Áã {Y´ÃˇËã’mD&voĢë'œŦįžŸt?HKędM÷Ēį‰Ã?6ĩ°‰Ėõ&ũä}ãz=>qIˇ¨…ik˛ÎÅęīIĖt-‚ĄPŧÃēŸ~ĒGr‹ôÖaąļ‹h˛ëŅ×^%šäĀā} „\Æ}ä|`AÎO÷p.tI#ŋ’Čxšø~NŧëãÜķy\ŌįœtœįOĻīaÎq.īņ„ũpFž8ęŒKƓßÛB|1åRží;V†éÂĀŧˆ U 5 ՙM+™ũ9˛Ō 1ĢÚFûÚ>|ęq›<âŖøņė\ĪĮ$WZBuA§õõĮä5 M „“~Ņęg÷tđnžĨ—´*QOރë BœįiÄųĩōv%å=8÷kīadpé˛į;<¯ëu9ęāqĩZ-î.uũ‡Ī‹$Žŧ8üdĐãũ1 ´ Åėī-ļFoŠÖŦ5:¤R¸¸#āët˜bm ’YÃZĻW˜˛ä‹č>ˆšn>øšc郞0î{Â>eáÖŌ°Œųá˛ūÆį@Ūô GŊœŊ~ž—p2Îu‘/Yoō’ĮéČz>qŸÔãēŧ.K™–MÖÕõËKŦI\KĻİœ˛¤€]ÎXĸ¨} >>ôvaŗģ‹¤Ā¯U}ų M/´?Bž˜*e=Sƒ´°“2ށ”Í5 ŊXY3ɚO>ÂM˜2‘Möޝģt"ŪûųHĮ%åbDøįũ$YĪëiø~Īuĸ|Ŋ^Iũœ#‡Ŗmäw‡<锓ē{œp˛,ĪĶRüE­ŋˇÜĶíYK#ĸ°X@xĐķįAÎÁ ÎÆ‚|7d5đ<ü“ƒB]Eû@R—ŒZČpîyđũÜķ“îÎĪŨ÷xĪã~:ŪÅäKËx^ütád™œģ ĩ6›ˆ IDATžŸ'uëœA›Á›uˆ6H8×ÔIZz O׋ļp°F’ˇBˆĐƒ'kčo,WhtĖŠå3H;!į>į~\?}žsׅ\>—ÔUŸŒËÖwŨ“éÉsĪO9œ§ÃéxōĻķ“ĮãņũūMĘåkĮĸŋ¨õ÷EëēęŽ5kuĄŖ4!Đ|0`ĀãĀ2c…;?ÎũmŧP˛Ö€Ē´ø,ÉAˇXõk˜$3>x;YН^¤{ßpËaī;Ųי¯?OŊë돚HIŽvē\Ž´ÆlWsĶÕRÛģ¨õ÷æÖ/Ģ>"k…¤ôū6ʀĸ;âüÍ\dÍQ™?aŽ”ÍÁuæđkÉ5ö띯5ÉŧČCÖč'œŖĢ)\}ũ‘˛Ŋ Ūķĩƒø4öép.™ĻhWsŅ™nsŠWcÕ#Ųg…ūŪXínNz4 ÚœŽ†ę"„€B@Mķ—*DA! „€B@†! ˛Ö0ܔK! „€EA@d­(0Ģ! „€B@4 m0hn1‹hų$×_~›Ž.UüŧÉę̝ˇéˇôŨuá 4! „€B`ūĐƒųÃ+J'wIņۏ|så•WÎģ“‹ŨUß~ûmüÎÖ:ëŦ“-ą)H›×íƒ>ˆ? Îw›šĸœl#xB=ų`ėW_}eũû÷Zšēž”9}úôø‘Úb•Ų@x”M! „@YÖ˛PĖ˙ ß&²ļüōËį%jŽ™QŖFÅīąMįĊķÛoŋ=ūžQåC™›nēiüŠ8i…˜¤.ō :4Zō kžVˆō6ĨķēPdŸarâäi…ÖųBd]/erŊę*ŗPčĘįCG>ŨŠB@Å­Ykā5g@æ‹åūÍÎũ æūs$•UĩqūÁId‘!¯Ī9nįwļC9$~o ˛åÎĶ=\Ÿīōî×'ŋ°ŌŊ~îRd9øy›{îš'‹cĄ:\Î}/“đK/Ŋ‰įét—Ëį{žŅ‘Oˇâ…€B`ņF@–ĩ¸ūLob؁œ…_o?|<į'qPKšâ6ÂūÁI/ÖĶ {ZĮŽŖČ Ã‡~§ ų­ž 6Ø ūž ō>ø`´J 2$~TsĀ€ļâŠ+f‰†ë~å•WâīöQOŦXŦÃņ“G¯ŋūēMš4)æßjĢ­â—õ™Bez2]ō›ož‰?Ą´ųæ›gô8*›ũ/— uđāÁqĢ!māwŊ}î˙ũ÷öîģīÆ„ŽŊöÚņ÷QûÃ?Ø[oŊ•%ĮûėŗOԇ•ėá‡6Ļ–{÷îmīŋ˙~Îz÷Ũwöæ›oFÜĢW¯XS/“×Ę=ztlãîģīۙŦ÷†nëM]ČŗÉ&›D]/ŧđ‚õë×/ʧux9ČË ! „€h"k @˜rŗĮ™ēŦ.ĢŽSd Yōøîœ¤3&’ ˆÃÖ[oe!T„÷Ũw_û駟ėwŪą]wŨ5f:ujŒÛk¯Ŋ"ɀ”a™s‡^ˆO÷îŨ#YÂōͧOŸ()ã7 ÷ß˙HåĮ˜s•҃ ũâŋˆyŧŒ¤Ÿ–qœ ~üŽ"å@,ŋøâ [wŨu#.CŲoŧņ†íąĮņ÷˙ûß˙ÚJ+­ Ö̝žIæškŽۃ…˛øøãmĮåĢ7i¯Ŋöš 4(b0lذlš¤Aĸ¨$wšå–ŗĨ—^Ú(‡¸tŊ?˙üs[ũõãIäG¸ų­OtÄ CTp#GŽ´‰'F˛ĐŖG% ™ˇß~;úcĮŽäâ‡ÃĸÃ8ÖÄĄsܸqqÃiŽ Ųøņã 2Č{â!#FŒˆS¯ūS3äÉU–1ĘÃ*õÔSOŲf›m–%'Év ')ƒ˛ĐIdŒōųasŦaŪn|ę ŲûčŖ¨FĖ÷ã?Æ|"ŦčÂ!OũqnąĖWoHeƒ'ųųMÎáÇG>âhžč'.]oęąŪzëÅë¸ŨvÛŲ3Ī<‰%“<žßũXÁđĪ1ō°|! „€ķƒ€ČÚü •’eP†0čs0(§fdpd=Lœę ô8Ļ(!XȰĐ@˛ 7L‹be­v’ĪķāCX\¯[ī% ËÜĶO?ÉŅK,At”§>äĄŪŽ‹´\åyÛoŋ}üL Ķ~Lšöíۗ,Y‡Ü;ėÉ2XĄ Yl$ Ū%œ—éuĻū”KŨŊø]ģvk͐GÖ į^g÷§M›6N¤Ņ~H2į~PĪ—Ŧ‹ëu˜Ž7×Īë~\kōãO~ׁ~OŖ<9! „€ E@ ˆƒ2Žé=H¤€=yxéČâ<¯Ÿ{ ĐĒĢŽגA 8X:wîĶøLÎI–8Î'L˜ë€D]X§ }&ęE–2ˆÄ +Ŧ`LíQņųʃŒ‡r˜Be “ĩ]^ooų]â‰%Ŋ´ËSą´ßëH^ΉĮâæį„ÁŸzģå ũȐF ˇ„sáDŊąîa]cCy™âõúēīXq} hčC6Yop÷zSOĻV!¯Äą†<ėžuŽ7¨B@! ˆ@ŲYguqķ.ļŲ|†,°Ž ‚äD ‚<‰0‹á!]X‹ îĐÅ Ī÷ÚV[mĩ˜ÆZ(ĻęX G$rAúėŗĪâú* ë¯Đ áúä“Oĸĩ ũ8ÂĢnŨēÅ<čcōX›Xc‰CŽƒtũcŅËUå‰'žˆSĩC,kČŖG;Đ˙ØcEpÔą&ÂÅgKXķ†Īt/–3H ō×XcHȨ;SĨ*>4ŒE‘ s@ˆ l´Ÿŧ腀QwęąJ×2 y‚˜’Ÿ5hX!oŦK#Ūõįē0 KŨÉ AËUo6ePĘG6U@Æ!nô׹r°&ēuÍqōōä ! „€(}ˇP¤rnyLAĸXœÎĀ]—ÃĘ1ŲrË-#đÁ] ÎŨ‘Î@‰ĀšdĀķ>đĀqŗqČ&Éy\Kzœ˜¸ Ö)'›¤q`YĸN"ôp,q”aLĻšÕ b Irį:Šōé4ä\\“åēOĘSڅ^íŖĪ#Ã?â#dŠģן2ÉįĶnęčuJÖÛËņ4×īņøŽ¯}ûös•é˛ō…€B@ĖZŗ6?hĨdüą^aíÁēÅ Ë1€3ø'­9>¨#Īš-tN;ŌP%͐‡Ŧ¸Kįõ:šLēŌē,ž—‡ž¤N¯2É4¯2žNį8,W.ī>ņžN‡­¤L2ŪËÅ÷˛\õöüđ9oŋĮ%u{>Î1"Œķz§ķÔĻÎ!ŞNūdy.'_! „@Ce­¨Ĩ­0,Žg x'Ž–œÁ›ŠRĻõÄ9ˆG–Ã-RäOģ¤>'ž—EõnŊIĻšĪë埔Kž'ķx>â¨ģËĨãIķtŌ¨?mņō’ōœģ|?§Œ´ŧ§šŒŸģŸĖ—<÷t|?wũČá¨ŗ“2d<Ũ¯+2Į9.Šp2=FØąqŸ89! „€ A`ŽIĻ!šķ<>(ŗf O.˛Dirā°ųN:ÎÜCÜqžLķxÖrá< ßĪ]&I*<ÎeÜw^Ž—ÖGØe<Í}×A[Ōeē>—!OŌyēû.—”IÆ%ëáyÜ÷<Éz‘–L§ŽžžŦ‹_t¤ķ¸ŧëOę#.ŠĮeŨ÷<ō…€B@4‘ĩ† ō0§‰‰‡“*}Ā&ÍâÜšü4đ0~2a?ĐCZōpŨøI9OęJĮ!ŸtšdI'žöx:žĮå*3—Nä“å%ĪŊ ĪGš—•N#\_^×ãyŊî^oō{ŽË}Ī›,ßãrųŽŗPų\:'„€BĀYs$æÃg Į1•–ÜŲ9*Z¤¨ãŌ"§F ! „€XHĖųvÁBĒ€ŠB@! „€ȏ€ČZ~l”"„€B@…Ž€ČÚBŋĒ€B@! ō# ˛–Ĩ! „€B`Ą# ˛ļĐ/* „€B@üˆŦåĮF)B@! „€Xč´ēõÖ[z%T! „@>øÅÚ*ĢŦEãûuū ŊoŋũÖ^~ųåø;¸ųĘWŧB`a#PōņĮgøám~$›°ö‡ØÂޘĘB@€@eeĨ 2$ūļ 4„´%Ÿo|đ}úé§ļūúëë{‰YTu"„@s@€į/ĒüŽ8?+؊>hJBžŸLj•W„€XüāŲ´ŪzëŲįŸn“&M˛mļŲ&>Ģ ^ķC؜¨ņRúę̝F]5~*n~ô,~W@-B ØđÜãpŽVŪ,33gΌV5~„[N!Đ€\%,l_}õ•ņŧÚi§ŒßäÅB´œ¨Í˜1Þyæ™HĐz÷î-jŲ‡áė׿ĐvÕA!$aD‹/”ÇĪ0 QÃĒæ5Á$„€XØø3‰į“?ŖFe#GŽ´wÜŅzöėĢXaķgÚøņãíŲgŸĩVXÁ–_~ųøÖĘЃüŧÅĘ ! šūLâųÄThɈ#2<}Ŋš?ؚCeU! _xAÖ8x>ųsǞ˛Úƍ˙Éžū™mšå–ļęĒĢFr6žą‘`đāÁÖgõ5­WĪ%ƒE­öÕß\“S‹/âjšÍžgXÖâ å˜1c"YãĄæGsŠŦę!„Ā≀?‹đ!jLƒNž6ĶÆL˜i­ËjŦ¤jš}ųų0ëׯŸĨ7Īo$čĶwmË´ęd•ÕĨļLļÖ­SÛ8 ĘÐÃŽšHŸë’/„€(ÉįQ$k&LČøTCōWŒĘ¨ ! „@>xņlÂĸÆRŅ*ė­/ĻX§Ö5ÖŠmuëPmml–}ņÅįÖ­[ˇėÆ×Ác#Áĉ­oßžA˛­MžQfĶf–Ú´ĘRÛt.ļlvqЁ‡Ą/æõüō…€ 'lņŲ4yōäHÖf…TļB >:qĘ,ģíš Öē¤Ęēĩ¯ļ5—Ž´%:ÔŽą…Ė}ķÍ7qãëØ:vėhͧOëĶX˜Ë4i|3 S g”Úį?ļļIåeV™ieĮîĐÖčŌ&ZÖ´f-×Pœ HÖĻL™2gž`a×Hå ! f#āüĢūÉžSa]ÚUÛ ÕgŲĘ=Ǟĸ°Āq„%Ææ ØD°Ė2ËĖ5ŊÉCoĄVöÂđ66ĨĸĖV[ĻˇĪ’Y̚›ēŸÍmjŽWEuB ’,`úũ,{ëĢ*›Ļ/—_"cĢõĘDrß6gīâdēbÖ§O{ōÉ'ŖīD-)Į9ų҃>ôĸ§ĩjũB " ˛Ö /ŠĒ$„@-Ģ{_ŸfUá5™ÛŽOõ\V°4ëŪŊģmļŲf†OZ:BFzЇ^ô''„€hŽč Õ\¯Œę%c|ŗĶäéÕ6ėû0å°Ød•*ëØŽÖ–‹„9#ÍĶ“q~ŽôĄũ”ƒķrc@˙„€Í‘ĩfr!T ! æEā­áåÁF|øÉŠåĄVĩΉ—“˛4AĢ+ŨuÔę+ú)GN!Đ\hÕ\+Ļz !°x#€•kÄøĘB›˛LØTPcĨ%\… 8™ž!iķ4't1ĶėÄĄŊŗĒKb9ä%œB š!Đ`˛V>Ģ&L˞a#gŲȟ*mjyøŌ¸ö•6ˇëĢúEŒœPëß­}ØT0›GA´œ°‘Á"˛•‹ŦĨ ˛8ôu zĮO+ą—>а¯~ü m1M˙„€ Š@YxČ,ŲĨÔzuieŊē–ŲÆŊۅpYƒÔÎ7Y;šĘî r_6ÃĘg‰5ueB`žčÔnîgM.Â)K“ĩt!NÔ<žsĐ;~š…5k™pÔZņ”ąŸÂzYf&o=žW܀āKÎŌō„ķŽÖđų͇ßڂk×ÚėŒJ­cÛĻŗ¨ņƒĖ ūš8ëWÚĩk´9VZ˙„€B@!Ќ€G;0cW<^÷°iķÔ]ģÆéĐ|„-'Ysĸ6ūį*{sxElâ}JléŽs6xģ‘ͧ<–Ŗ#7sæL›5k–ĩm[ģKÂĶÜO–éįîSōâwėØ1FįʗŽkZÆõá§ĶŌá\2Ę?4^é°đ›ˇÍAoŪ4á7īŗ&&Ža:-V˙›ˇ9vš°~ę?į6VqO``9r¤3Æ&L˜`ĶĻMŗN:Y=âī¯°Â Öž}ûyøDŋeKlũkėÃī-~]ãØAŦ}Û˛yäüžĖIÖ<ņ¯*˛ßNÛvÍԜ¤,}ņÎUFĄų+++íÛoŋ”ēģî÷ßß{ė1[oŊõlīŊ÷NĒËĘ$#=_2ŽķģîēËžųæ;ôĐCãZįĶ›/˙wß}qīÕĢ—ĩnĖĒÁå’Í…ōŖGļ/žø"vÜž}ûzrô ÉīrÉæŠË'ŸK6Wœō×"Æ&F*Wœđ~šúFŽž’+NũGũgQé??ūøŖ}öŲg‘Ŧyŋş:uj’6Ōpԍs÷9ᇛ=ŊŽĀ/ųK{ķÍ7Ŗū­ŧōĘļëŽģÚ/~ņ [vŲeŗņMuûžâŠ+ėÕW_ œrÚ´ic¯ŊöZ$œ_}õ•ŨsĪ=V^^nûėŗOƒĢņüķĪĮvnˇŨvļúęĢ[Ąz˙ō—ŋØã?nßč~p`ųûß˙Ū:č ׅkø›ßüÆöŨw_ģúęĢŦG…€B@4Ë?øāƒhXĒĢ>XŨĪ7Ø`ƒy[ŋå0‚Õ.ÃoĪ´ÂGsķņ—:ÉÚ¸)ĩä¨{˜U˧ ŽJ6$ +kĪ&Mšd'œp‚-ĩÔR‘ÜtčĐ!ZxHs‹~ŌBÖŧ´éĶ§Û‡~h7ŨtSÕÔ˛ōä“OZ˙ūũí°Ã‹§įž{.ļÉëF8O†įˇ^Éŧéķd8Š÷™gž‰XtíÚÕ.¸ā‚¸vđŲgŸ$8_ždū|įkŦą†uÔQļîēëÎW›x+šûîģ­K—.vÚi§åS¯x! „€ECō…E@ÜÚk¯mÆ ›§|GyŒJL‰ēëÖŽ->ĩÆÎP~­N“oŦ‡Ŧ9Ÿ0u6Yë0÷<-ĄĐC°’qšÎͤLæ÷2‰s‹ŽŋūúheÛ˙ũãŧ01@rqŖl挑÷zä*ßËđŧĮŧmŧņÆö /ØqĮg,HLģ’?_ũŊOOëzë­ˇĸūßũîwqĒš /ŧ0[føésHV2/įžß}×å–ŗûīŋßū÷ŋ˙kģ–^ziëŲŗgv—(„Ō6yōäx0?Ėæ'zIũšÎcááiX{p3fˈeGŲģ랋ŨqĮQ†ôsĪ=7N—~ôŅG1Ž2™>eĒrėØą‘Ül´ŅF Ãb‡CWē|âŪ{īŊyԈwyÎ!’{îš§1•I\>ķāĖõ×_ßļÚj+ģęĒ̞°¤?w?Y†ĮásøÆ :k=Ūķæ ,(“ΚķÎ;ÛK/Ŋeு ×ûüķĪf_°Ā’Hü5×\“Õ™”…Ŧ‚Ũ;ė`/ŋür”ųá‡ė’K.Ąčˆų_ũõl~¯“ûÔ­ķt› ɓ”Qūšût›B΅ŸđKŪĢ…ô™¤ŒúúOsč?ŦÃvĮxųÉ'ŸČåT8|ÂÄ'-n䛧ūŗÕĖæ]NØfGgŊy,kžRKØf‡f“5OKúXĸX4>tčĐdô\įũúõËVpŽ„T€2Ũ:ƎPŦe’[nš%Ë8!eČ:ąs5i˛æņų|ä˙õ¯Åä-ļØÂ˜jÅąŖƒņŦ•s`aÅÄA截|ÂŦ7;âˆ#âÆ,|čƒ@ą>+—Ûc=ĸŐ)×áÇĮéFv¤xbí[mĩՌé@Hāîģīn;wļđĢQ?DÂÆTî­ˇŪ í1Į3—*ęęmđ„tØãwÛmˇ8 Š…Í Ô‘ļ¸ŖíS:ÜJ+­dX'Y_ĄF'o`réĨ—Æķå–[.Æ˙üķĪ1rįeģ,„ŒëŽ_ũĩxâ‰!†ÔbŖ,ˆ:¤p™e–Éæ÷:ÉB@!PL|úĶËÄĸæÍ}ˆZŌŌ†,ų| ôŧVkgœĸv=~6>u’“ŦÕĩ9ëÁjĒÃn…ÄôcJ‡uëÖ-XēŌŽTW~΃5ĮɚĮy]Hƒäs7Ō‘ĢĢ,äpŦ7Ŧk—]vY6Ÿ—C]\—įsũqÜk¯ŊâtáwŪiüãŖĨ Ë\.šĸĖÛoŋŨ|đÁh=cúëÎËĻn˙ū÷ŋŖÉ”‹ycSrXü¸čB„† ˙ũīãîOô¤ëëz!F^wä’nå•WļŋũíovöŲgGrÅtčá‡ÐręLY+ޏb܄āSÆč@§—É3Ŧ­>7ŸĢl—…čC Á‚Č.Tōnžų摠ąŲĶ1íôrâ‰ū ! „€XđyŽ´Kļ\D yōĨĮߚ¸ÚŦ–ą9ߙ‡Đ…ŧ9ÉJÉūsĻCk‚EŠö{k1"Įŋå—_>NI&“X§†5‹L!ŽF@&p%'h>°Ķ€ÚzՒÎ=<œŖÃ?5A\Úš~,w|2âÄfŦx^O'øįų¨q8ų SÄAZqčô|éō ŗqkã•W^­w§žzj´ŒņšH RĻčqË*ÂtܧŸ~jäu‡ĩĘËM××õ‚ĢËxž¤5‹Eũ—_~šaaûį?˙¯Ågœ‘-"iįe˛ã–kãåä*Ûe ”Åru։d R ^˛Ž+]ĻÂB@! Љ(Æų¤KZÔ|J4mY#_z,ĢŽiÔ°V~Îgɒzũ<įš5OœÍÕ˛ÁēN -éO_0 ÆôVĄ˛ÅAc` NšČOŧ5č]/ņÄ쌧åķO>ųdģöÚkãˇÄnžųæ8՘Oļ)âˇŲfģ÷Ū{ã7ĐhÛĶO?]p1Čã°\Ač8Ž<ōH;đĀį"¯+L rŨūú×ŋf­tŦ9ŖL'O\ëĻp|Oįå4EŌ)„€B`ApÌëH5'l.ƒŸÎ—Lsž•Ãä$kų„įRœ#Āg6œœÁ ų ęü:Wz*4ŠÃë†ī¤…t{z2OžsÖ]|đÁҚuņÅg­z>ŊĮ&SsėLllĮ…c­ŽiĪBŨĒĢŽEąXA:“Gz×mĄ:ĶrX1}*—΍`I\e•Uĸ–¯Ļpž“iOœ[HĶo0MQļt ! „€(–wšc-ļo&pKZ’°‘î.™Īã õķNƒĒ )Éa=Ä"”kŪ5)Ÿ>‡|A@ kXÕ|Ú3MĐãđx'xäM¸´ū\aäc9‚(0ũ‡…Š)8ģZą"ąÛŅ \.ķĮzÖČņ9‹qãÆÅĩ_ägjąPwĀą‹°wvR2•ठėÔtÂ\¨>—c#ë7ÜpøĀß7_đM8vŠō Ŧl*8ũôĶc˜ĩsXâØÍŲ‡U‹ÎĨ߀7› p\ÂL÷by7ĻÕ儀B@,,‡ø Æu#ƒû^'DÍãÉŗ ãWŖ’5*‰ĩ¨wīŪŲĪ@xÅ ņ!Z5,8|˜‚ä¤ b–´šyC{ˇTĪ$ûttõîYm§oW÷ƒB ĢO˛ĀŽGŦ)Ž´eΉˆ[Ü<xĻ˙XëÄ"õ%—\˛žĸ JĮĘÄÎÆÆšZôB'NœhüĻ,›‹¸ ŽéI: DĒ1ŦŦäm6û´gŽúaÉczB×|ØdņîģīÚu×]g›l˛IÜŨJüš&Ëäúb…¤Ŧ\éIY ! „€(|Ū‹™&ÆĖ|Žqĸ–o ôÚÛŲWãËŦ߲ĨvåĄŨŖá…ą<=Ö5ēe-_… ‰‡¸`iÂē–Žh::ëŌ‚’Ÿd9náIÆ5Æ9ģP9ÃąÉĀ?‘Ņú°faíĒĪņŊ7ŽÆp\7>|œĪq­!rrB@! š 0 :ŒO7 <<Gá¤CÖÄĸæmmVd 6™ŪQę•߲`ĒŲ?ŸŌ˛ZĻÖ! „Āâ‚ãØĘáĨMéšYkʆJwķB€iP9! „€B ~r~ēŖūl’B@! „€("kÅ@Ye! „€B ˆŦ58eB@! „@1(hÍڄ ÂĮ[_*F}T†B@!  &”oÚY˙¯=DÖøųŸsŽ:gąNB@! „@18ãÎą6éģ™õĨiĐz!’€B@! "k {•,„€B@zYĢ" ! „€B`á! ˛ļđ°WÉB@! „€¨‘ĩz!’€B@! "k {•,„€B@zYĢ" ! „€B`á! ˛ļđ°WÉB@! „€¨‘ĩz!’€B@! ũ‚ÁÂĢŪ‚•\SScŸūš >ÜøÉŦÖ­[[&“‰šKJJbÄ)Ü2đ¸ãĒR++›ŋw’pų{.ŨŅí¸’ũōÔĩ­]ģÖą?čŸB ąиÔüĮŨæ8Ž´X˛Æ ņôĶO[iiŠíŊ÷ŪÖļmÛÆžį¤¯"°úfãmåĨēXi âpņđ?Ö2SëÄ ({ ífÕá_UuÆÆū0Õ¸kˆūĢíē;…ūŌboZô_ĸ# qŠč7¨Āæ8ŽĖŸ ĸAÍ^8™>ųä›9sĻíēëŽÖĻM›X ,iĩƒ8yíĄđ,Z>ãf™•gJmFM‰ÍĀd­<­qžŌĻŋŧĻ4¤—Z‡Ĩ쨧nf;´˛ģūöņÂé´*U€ÆĨEcÜmŽãH‹4TWWÛĐĄCmuÖ1Î}šŗ´”ŽRÃâåˇ,&NĪØ¤ōęx]ÃåŽ~íĶ“Z‰ŊüĖ˙l›÷vĩ`] ˙jj2Áē,lÁ/¯,ąū;öąoˎ>Š˜N-k҇'„@ņи´čŒˇÍqit˛6yōd›1c†-ģė˛ņ.3fŒŨ˙ũvúé§|W¤ķüá°“N:ÉēvíZnŠĘĘJëÕĢ—UU1pׄ#deđæo6QseÉđ?ūh<đ€z꩞\§øāƒl|ž“<Đ †õ9ČÚŦYŗYšŪ@ bŗۊ82ŗÃ¯Ŋöšmžųæ1ėoL7ŪxŖ­ŗöÚöË_ūŌ>ûėŗ(˙Ÿ0=J}‘!nĪŨwˇģīžÛ `ģ랋 í÷ˇd^7ôvÛmåcyHūđÃļÛnģÅ6˙5”áō7Ũt“íŧĶNļŲf›Ų…^˜­…ŨC9[lą…]}ÕUYynū÷ß}×hm´‘ŊôŌKŲöPV,/O{[rúŦ`+ŸÅThMô+ã¸˙qvãĶ_Ú ŗm8ÁĻWVšŒM ÖĩI56njĨš˜^ krB@4 |BiÍ5×´/ŋü2pÜqĮŲ6ÛlŸc˙ú×ŋ˛…2“A<ãĪAĪŽc=ÖļÜrKëßŋŋũüķĪYy?áSMûīŋŋm“M6ąĮ<>CÉ!Āņ ß)ö‹_ü"ƑööÛoĪĨãüc”c‰Îå—_n/ŧđBŦÃW_}e¯žúĒvØadĢ×2.–ˇ`<ā™˙ī˙;û\gL"~ĶĐđČõgiĖŽ‰ŧ>lĩÕVļŒ/†ŧāvôŅGĮ%9û„¯%tĐA‘Fūæ0ũųĪÎę?4Ė”1æ’ÆrĻ;™bŧf<ŋãŽ;ėûî‹3i;î¸cßW§L™¯ÔĶN9ÅFķį7¯ ããØ mˇ}Ŗ3YƒÂĘL]œI uđq;WûŊŊ>Ž64ÜĮ‘FŗŦmŧņÆvüņĮÛÖ[omįwžuÖYņŗô^ČŲ×_mīrÁÚŗûÂÅ=ûėŗãá&â-Ķõ˙ũß˙Å›ĒŽŲe—e×ÃÕ%Į';°ŠTT”Ō63žGI´”đŲV¯™};â[[jŠĨ"Š›ˆAĻaÛ Ė‹/ŧh×^w­]zéĨvķÍˇØøņãcÚÔŠSlâÄIöNhO˙u× –š'ė‚ .´{Eįâ]ũO<ņDÄyÂt>ūķŸŦŧŧÂ>øāØ ×\ŗo$iė@X˜`ņárøáGØ2K/mú͟ė˜c~eÛoŋc´ęM›6-ę§íwĸČÍōėŗĪØu×]gÖķ{ųĩíErN{k_YZnø‡iÁ26Ž2ôŊĐúđJ–Ë0xn|[ã–5ÂŦ[›Z^cc+Bžöv[žœŗ`įšxË-ˇÄÁœčĶN;-Nō˛~T˜Ŋ€ø”——Ûī˙ûøōŋä’KƁYˆŅ°aÃ"yČ5[‚ ŗIƒĀwß}Ÿ“<ōH$$<+y‰Fîũ÷ߡC=Ô>ūøãHÂ.šä’8>UTTÄĖŨ¤I“Â÷ÛŲ2Ë,Į7–θeĩҌ]…¸BÆĨ#8ŌV_cõ¸IîŒ3ΰŨvŨÍ*fVD2ķĘ+¯Z%–Ī̚°4¨v\I>įy×X=äũx¨‘wא—t )¯ŧōŠ=ôĐÃÖĨsįHÜĻM›jO=õ´ũÚyü¯ß"ũ)ŦŠ6nܸ8ē~ˆí'Ė9ã8K›~øa”1NAļŸzꊸ”čūcG‡kxī}÷Z§NÂįŗž cįMvįwÚÉ'ŸTį¸yâ‰'„™š7í†ëoˆãØsĪ=¯Ë?ÁS:´",g õKļ×ĮņÆךã8Ōh–5:ęoû[{đÁãķ†Ũâ CŦm}ûöœxÖpqÃ]tŅEqQ?ė›¤.ˇÆkXįĐŲęsŧŊaíãæĀįŗÃĨĨ„K­40ųíˇß>†āõėŲ3ŧedí;´ˇ8Ā^ũõPO6)ÔnN ?dšķĪ?ß:vėßĖ y”G:‹7GŪ>ŧ<ōŖošå–ˇŪŊ{GR6xđā˜Nø‡Ņ?ć u7.č õãÍōĸ‹~c˙ûßŖÖĒuĢ„~‹˜R‡5ÖčI$ō^žˇoq ˇ ØÍ ĸ˛ē$úUœ‡ŠM?f†sâĒĸo!žÔ‚Îf†Ŗē¤Ėچü%ú(n}ˇ—Ō…@ƒĀ*i`&Á7­ČD ä$Ģ}ûöņųČ72y™į9†ãy ™8üđÃŖ‡gj!KĪJ,zwŒM肈A|™ŠËÔįwéŌÅhC!ސqŠwŸŪ‘Ōn#ĪuÆNfpŽ:ęHûpȇq™+Éį~ō~2,bF^¨ë˛ģuëõ=ķĖ3ļĮ{BÕŅ(oå•Wã[íœãœ`ÜĮŌ¸†+Ŧ°B˜Î^)Öà ø7qℨōΗ]vil ch}ã&åŖßÛŗæšũâĮėO=íÔ8ž••ĩĘļĮëãíkėpsGŨ„š`Ũ7ä vMu—ŧščLŦ_Øoŋũb2Ļkŋ)]žĄ>æft9QķrŨG/D‘›“ÅúČÆGÆÃä§ tFôyé´ É`H÷đ{īŊgl°A6Œ yŅá2Äąč–8J˜ûŲ Ay^ohܤW\q…1]Ë[Ą;>ô‹.t“ßíYÜÂí۔X§ļĩ8€DD#üûčšûí“ÁÖ†C|ī Ų€ŨŽīk5¸UW‡ŨŖáa1}fĩ•uhãĘB āËĢ­ļZV#–Æœ{îšņ9—M'XÂūņDˆ€#<2.ž­×\sMœ`Ŋ1kÔęs>%Ÿ‡é<6დãĀ9u œTÜl lģ‡ŊvīŸlڄ­]ĮnvĐyĩÎÁ‚D•asAUØ\ZZcۄk¨5kąßčŸhj˜YĀ*…ĩ†)Iž}ĖČøšŖ_ũęWq0Æwd k<yÁåš9bĈ8%WYË×ô92Z…ü™ėaĒcî‹/ž0>ģÄ-Ž cŒî¨33BŊú\}ãSŒĖ˛°žŒĨAčf\ņY*â cÁ"ˆķįŧį3vÚz^äqŒŒČŗžŒåHX*YŸGYˆ‘ŪŖGˆ-į>ú¨ņ!_Æ>Âčō1}8âq¤qfš™:0Åír<‡ũŸ°Š„™îū駟˛úX’DSĖŦi:t¨­–y{›rœkŽãHŖ‘5'ūæ7ŋ‰k° A°Ėĸü&g>[æsXáøöØÄ‰ãODå“'ž…üŦ+ 3ÔåxkđN…΁ķ Ė9 ˆw â8‡hōæÆBULšŧ ī‘sôĄ+WGEf_Ļw=8ōCjšÉ>účŖhQ„Đâhëũx›`Q&mÄTÍÂOōAŪ.¸ā‚Ŧ>/ũŪļdYQébø¯cۚ`Yk1 —'\Ŗp:wčižzĨŨņģ#mŸ“Y÷¸\X÷QģVž*ë4Ģ•uî4ĮŧB¨& ĸ!Ā íÕW_Į HĪMÆÅĒĢŽ×OąsĮ3‘q†xž‰l8[PĮŦ„ BđĐCEuÔ"‘dķc•;Œ |į’Í ˇ‡ÅöŦĄc›ęsõKāA[™ĄZ;lpŖŦŨc]ÍVYe•¸žĖ’ãåæĘËoō3^ īyĐĮ9SŖlxŖ,HqXÄūū÷ŋĮihÚJc ičᜱÆÃ>îøøH˜åAnácéSÅlÆĢkܤ,ÖhCYĶųŧøâ‹c›šÖ,!ĸĖb¸æ8Ž”„Ÿĩæ—ŲĀZaņ°ōķī™dŸŽŽąū+ĩĩkŽZĒ^Œ|a'Š W¨ãļt:™×‰so §„*EœˇŨߒ¨ëã<_ĄŒūÛoŋ‹P1Ûâŧ<ˇ ĸëŋ‰y:ģ]°Nösō§ëáō…Ögq’ŋî*[ļWĀ0tŋ°Ŧ0:÷éčūíjÛã˜scz¸˙k [XZ6††ŨŖUöÍ“í§Ī?ĩĢ[9>ŧģZMú/„@S ĀÆtÆĻč:vė‹áY‰H:näą°-ˆÃšÄæ,GčãYŸžßŊ^šĘÁ Tč˜5?ã˛”ËXŒĢāAŨĀĢÎëš/Ā’1,ũË ųäą`a4ĀĀ9EņŒQiũķfĖãz%ą­/?3MāJ}ÉK{¸Öųę_Ÿž†¤s9ãÎą6ôģ™ÖoŲRģōĐ:ŠMöģFĨŠŧ5$×#$ Ēë2Uh§¯Ki\P:6‹ûy#ĸNnzö‹í>=ŦXö‹ę˜nuøžž–O‡™ēÄü‹….™?Š:Ļõ%ĶÉëé~ŗy8]žÂĩŦ |ēwŋBĐ=Ŧķd-t…ZÂ6›´q-ŽŧāÜp!kIZØ3^LÂyđÃsÍږˇ˛6á¤ë´BZ+Û/âEÔ?! š ČŽą€Ã]š¨ĪËî‚5×īž—īa÷ķœ>?cĪčBĮ%žc<˙ɓ/ŋüōŲq!ßs?9ŽPĪ\ãÆūퟸy,wė„e“SŒIyę› į+/—~ōåĒ!ú˜‘ķüø>ū5¤|ō×Uŋ|éÍqiT˛Fۃãfį†f}ëÎÜ\ëÛë˜ŪnNoh˜oĨår Õįē”?Áē(šđĀ8Û-57ėzŦjÉķhN†´%ČZ oĄ?iË÷ŦškĀpüå !Đr€¨ø÷ۊŅĒBĮĨ\Īĩdũ#å5ۅĨ7Lũ2å‹%Į]cčw]ø‹ĸžæ8Ž´H˛FĮcmøžëŌ°˛%ߨ’Iį-öÃnNšŦe˛HĘf7/y^>߁++ ŋ`0ĢÚÆiŸŋü‚M˙áS;$Ŧ—I>ŧfg—'„@ B€ņ€īĻË5ˇq ĢĨ[.™n”›ƒ@sGZ$YƒÉcJeķß}ã ÕęŒs:ĸÎæEK,îƒCŸĄī¤ßįÍĄ! „@áh\*ĢEU˛)Į‘IָЀÆú9žâĖlžĀės׋jGPŊ›ĸ,Ú]:üboÛ"jMƒŗ´ ÅK-ˇ4õ8ŌbÉ]đØ\Ā7Ę|ŅbËí*jŲ‚ @_I[•WBиTJ‹ĻLSŽ#-šŦųånJŊ ųB@!  E@ãRĄHI ˙šđB@! „€(:"kE‡\ ! „€B pDÖ ĮJ’B@! „€(:"kE‡\ ! „€B pmƒÁßūöˇÂK•¤B@! Z0Į|ŖĩŽŅČ?†žíļÛ6ZŤH! „€Í#FÄoqōI0žÉ‰ĪĪYōũ<ßs­?:ũúë¯7jĩ5 Ú¨pJ™B@! …BÖŪxãÆmE=ڊ]^ŽęĀ´ÄÍoŠ]Ū‚´-_ŪmC>Ŋ‹k|sÁŗĒĒ*^÷ãz¸.÷C§t! š E'kß˙ŊtŌIŌūĘĘĘzõ4Fy÷ßŋtĐA6}úôyĘĢ+-)ŧúęĢÛ|ŒŠįķۆ-ož äˆh ˜åhÖbĩ }0 Ū;īŧcp€}úé§Éč‚Īųi¯‰'ZŸ>}løđáķä;účŖíģīž›'žŽˆút֕WiB@æŽ@ŅÉÚ5×\c§Ÿ~úゕ`ƒ 6¨WOc”ˇË.쨰aÃr’ĩēŌ’•ģøâ‹m•UVIFÅyíųm”7WáuZfu4oąMZ>˜mŨu׍?Í5räČdtÁįË/ŋŧuīŪŨzõęeK-ĩT6ßĐĄCmīŊ÷ļQŖFŲ‘Giŋūõ¯ŗin10`€M›6Í<ėųtzē|! „ĀĸŒ@QÉoĶO?ũ´rČ!YĖxKß|ķÍ­gĪžļÖZkŲ˙ûߘvũõ×ÛkŦa÷ÜsmĩÕVļÅ[ØŊ÷ŪĶ N—]v™aēä’KâņČ#duúIēŧYŗfŲ:ëŦckŽšf|s‡ø0hüõ¯Y˜jdŖČÎ;īœĩtéŌÅÚˇooO>ųdÜDA}îģīž˜§Ž4-Ôˇŧŧ<æá_CÛĐĐōŧįŸ~$n¸ĄåšZ]T1;ãŒ3"ÎûėŗOÄx˙ũ÷á]wŨ5†ąjnļŲfÖĄCƒlė¸ãŽöųįŸĮ´^xÁvÚi'ƒĐ?öÚk¯_ßŋ|}—|ųtrč×ũû÷ˇ3fV$,L—^zi}Ååԉît<ņÄQ÷Eßž} K bũÚĪoˇYÛļm­[ˇnÆ=ˇŌJ+Ų&›lboŋũvŊõwn¸!’Ŋ?üáÖĩkWļÛnģÍļŪzk{öŲgíÅ_´ .¸ ›vÜqĮŲ AƒlōäÉvĖ1ĮØĻ›nšMã$ŸÎš„B@,ĒL™2%“<~ūųįL°3ãÆË}Í™MĪų,s܍ßdÂ`Gx¸†Muģ0 eūō—ŋd…ÆŽ› Ķ™ģîē+3sæĖĖķĪ?Ÿ oۙ@"ĸĖú믟áƒPæŸ˙ügfšå–Ë|öŲg™0u’ +ˆVæ–[n‰ĮË/ŋœÕë'éōˆ„-ĶģwīĖ–[n™ j&ĻLxŖY† ’ųđÃ3555™oŧ1sĘ)§¸ĒL°€e6ÚhŖ˜į?˙ųO& R™0 ĶëJC`ęÔŠ™@đ2_~ųeV߂´Ą!åQpØFœ ¤7,ķ@J˛õņ“E3Žë +ŦáâĀ|å•WŽ>ũ™~uõÕWĮ~HF&ėâÉŧúęĢQ–ëĻŨâ9}mˇŨv‹įuũ̝īÖĨ“ōéד&Mʀ÷E]” –âēŠ‹iųt^~ųå™+ޏ"ĘŌũđb‘ 'Ģs~û`}˜{ėą™fFšũöÛ3x`ļŦ†žŧ˙ūûņ:|đÁŲg@R×Ŗ>šéÜšsČ{TN!PLžũöÛ8~x~Ëā.a9S|†ķV˙'Ē7‘ŋ‚gÁˇĐËŗ–äeœ[:ĸŠČZ°d‚E!ž. ōt§žzj†)yꊧ˛ÉW^ye؈œW\1›–>ÉUžË‹Cæ‹/žđ`Ö˙čŖ2įœsN&X`"š Ö§lZē.ú͟2áÍ?Ļוæ ؒdø†ļĄĄå…ĩ‚™`ЌU‚Ü@~“nQĮė÷ŋ˙}æÜsĪMĸoyæ™ņüˆä(ŲV~R,m™`uĖŦ7IҜįõõŨútr¸?üđœúsEæĶIŋŨc=âŊÕŽ]ģĖ›ož™ųío›y衇æR3?}°>Ė kŧ´ā***ęŧįĒD=Ž ÷y°nGríâÁ* ÖÃØļUW]5ķõ×_{’|! „@QX˜d­hĶ wŪyg\”ÜŠS§Ŧ’iÁ%—\2æ„prēéQwŦqaZĮ]]‹ķs•įųđĶëĮ•ļÃ;Ė6Ūxã8Ũųį?˙9Ž)KæI×åã?Î&ו–ĘqŌĐ64´ŧ`™ˆĩā1%%%sÕhQĮŒéą@ ,X]Œ4Ÿp ą}šúŲž{î×L!Āĩ/VVVfwÜq‡mŋũösá’+Kg˛īÖ§ŗGņ;=á-jžõWšĘ#.ŸNĻTy‰Ķ¤ûíˇ_\jđÚk¯ŲvÛm—OÕ\ņšú`Žö%1C÷%ĻEÁ|A]°°ĮéÕķÎ;Ī‚•ŨnŊõÖŦĘ@BíîģīŽĶŸ\ãđĸ–M͉B Ĩ#P˛Æf€›nēÉ´â\x†7ũøPöĩCãĮää`ųĮ?ū1Ũ|ķÍĻHĸ>DĮú;ĶX ŒËW^LĖķīĮŒöŨw_ƒP2 ¤]˜ÂÅiČB’õŦ+-­ĮÃ Ō††”įåæō[fŦ5dũ¤"ĻģcSˇŲf›¸>Ázۈ¸IDATīŊ÷Ū‹á0%h§vš}ķÍ7Ųô`­´`™ŗ`QŠk!Y V—̝īRf>Ŧc­%MdíÕGQŲŠK'k:ÃT¨…)U{îšį"OŽËז|}°>Ėōé[ø0Mma:Õ|đAc“Kú#Û\[k ЎœB`qA (d âÃÃËXŌąĐšˇéO<1n2`18ÖØî°€aíb3V‚ģc2V…0-­ba9&å+ÁšÅØ?ōõë×/.d&Ķ2Ë,-Ģ­ļš…ĩOqđdĄöŲgŸmaMŽ}ōÉ'q¤>Ȱ€›OÔ•†^ÚM9,FgĶį=öIŅÍoZ Ā؁Õ"L[EŌų˙÷ą-3 Á…^-eąaá‹āÁžÃ6´` "Įg"Ø|Āæ8ģ•ŲˆP—̝īæĶųđÃG–ÄM+X7š.'Ÿ|r]ÅÅ´|:I Ķ ņ%‚Í3,ūOZÕŌë Ģ„*L3V9|útAÜĩ×^kXīØJũ Ë ! „€YI\¸–@‚é@Ŧ,l?˙žIöéčëŋR[쿍9[ėâŲSČ@úMØŲŅɀÁöú|ŽÁ+m `ĮbXŗwŠæËĮOŽäôj!åå͇ĨŽcĮŽqŠ*—LXLŖėĶŽŽ´´l2ÜĐ64´ŧdŲ~Ū0ķļ`1ƒĀ§SuXo“Ÿ‹@†OApÍ!ŧP0:?.Wß]PšĘ¯K'÷í˜1clŲe—ĩ &Äö0uX¨ËÕɛŗBõίmÜa‡,Ŧģ›ßŦ’B@4)zügĻÜĮƟīįĻ|6 ŽJqįXúŨLëˇlŠ]yh÷8kĀ”^ĻT”š„C=´ŽēÆ´4Qãsa§™15võåũ.ŋÍőt…”—”Ožc•¨Ëå"i._WšËäōچ†–—Ģ-3oW.ĸF7Tš¨īDëjC\ēī6†Î\õ¨ĢžÜØ5ëáæ×åęƒčȇŲüę/T‹æ‚Zč -KrB@Eĸĩ†€ÁzŸá[hrB ˜°đ˙¨ŖŽĘ[$k؞—k\ ‡|ON! æ ĐlÉkÂ8ä„ĀÂ@€Ÿ/ ŸņXEĢL! „€s!P” s•¨€B@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@ÁˆŦ •…€B@!P|D֊šJB@! „@Á´*X˛Á—^zŠ)‰! „€˙ßŪyĀXU­{üc†Ž‚ˆzQ/(ņFž ‚=WáYbyOM|öc"ąEúė1Æ’ĢÆ^b‰^{åŲŊbÔØ;ōž;4*Ea€Ąŧų­Ã7|œYgfƒ3s`æŋ’3{ío}k­Ŋ~{öŸo­Ŋˆ@Qm&ÖÆW´Oų‰€ˆ€ˆ€ˆ€$ iЂ ä&" " " Õ ąV ęęSD@D@D@ X+Jn" " " "P kÕ Ž>E@D@D@D  ‰ĩ‚ ä&" " " Õ ąV ęęSD@D@D@ X+Jn" " " "P kÕ Ž>E@D@D@D  B/ŝ:uĒũã˙,ؤÜD@D@D@D@Z#0ĩ~§F—!­šY!ą6pā@›°ũëÖ­Û2 .^ŧ¸™m‡Æ÷ņm,ĪŲb9y÷ņm,ĪŲbšę‹Ÿ_#ž×GÎËuũčúņkġņúČŲbšŽ]?~ø6^9[,×õĶ5ޟĪ^éoĶ-?ķÍ÷ ‰ĩÚÚZëÛˇoķÚÁRä îͲĒßēđm-ÄOüĘ˙3.Vŗē~tũčúY6Ņę—&8čûŖīΊ~ĐWERAąVcũû÷OíŋŌķžÅÁķžļJųœoÎĻúKųF9V9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖ×Ö6°Ûj*$Öjjj­wīŪiĘŗü čÁĨ—ąõD™ī{>úĢžøÅëÁ¯]?%‘‡į#/}ôũ‰×ƒ_#úūčûã˙6čū[Ō#ūŨˆßgÄļZúĨĻfQcī 9„S!ąF >@ßF›÷āež-ˇ—׊äWÉŽúKĪC9‹¸/~ËNgD•ōâˇôڊŒ"—–ōąLõuũq=xŠ×CĨ<ž^æ[Õ/ˆ<*åÅoÕŋ~üz¯´ÕĢ;*‘‘]D@D@D@Vke'áŊ÷ŪŗÛnģÍęëëËJ:nwŪŧyÆëRæÎû§:ũũ÷ߍņLŸ>ũOĩĶ™+˙đÃ‰Ņ‚ –{˜âģÜČTAD@D`ž]ļÛ¤ ķČģīž{S[C‡ĩvØÁŽ8âˆ&[[fĻL™b>ø íģīžim#šzõęՖŨdۚ9sĻ]ũõöōË/[÷îŨ­ĄĄÁļŪzk;ūøãm5ÖČÖ)7"2Y_HúōË/íĖ3ĪLŸwÜąÜuĨØ?õÔSíã?n:–ĩÖZËÆŒcGy¤ 0 ÉŪ^™^xÁîšįģīžûlõÕWoĩ›UoĢ’ƒˆ€ˆĀJO`•ˆŦÕÔÔØ^{íe7ŪxŖ­ŋūúv˙ũ÷ÛW_}Õ.pé+Ž 8蠃ėŠ+Žh—žĘŊčĸ‹ė7Ū°K/ŊԞūyģúęĢmōäÉvūųįÛĸE,Bl9]rÉ%Iä¸×f›mf=ö˜mˇŨvnZéļđ4h=đĀvĶM7ŲŽģîjĪ<ķŒsÎ9MĻ´įAs~a´ÚjĢĩÚÍĒȡÕAÉAD@D`Ĩ'°ŌG֜ ‘­ 6Ø EšŪ|ķM›5kV*b{íĩ×Ú;īŧcũúõŗŖ>Ú<Š„āáFĖ”"‘Š[oŊ5 ąŗĪ>;EŸÎ:ë,ûõ×_í”SNąũöÛ/ BīíwÜa3f˰ˇŪzˎ;î¸ÔS_ˆ¨?ü0ĩuČ!‡4ĢÛ(š'ēôŅGŲöÛoo›ožyŠæm˛É&i,ˆ—ˇß~ÛÆŽ›Ä‘ÅiĶĻ%!7~üxCpPĄG4ލã…^h+ÂoâĉŠîˇß~k×]w}öŲg‰Õnģífx !˜.žøâäO§õÖ[ĪÎ8ã ã…Čí5fgC˙ˆ%"[#FŒ°¯ŋūÚ^yå•ÄD9ŋũö[bC4Ž÷ū}ōÉ'vûíˇÛ§Ÿ~šöĪ=÷\ÛxãmöėŲvË-ˇ$DEˇÚjĢ]|ä‘GėņĮˇƒ>Øîēë.;ųä“í‹/žH6Î)¯§!ĸ×Ņ|ƒļ" " ŸĀœ9sŦOŸ>Ë5ĐU"˛Æˆž˙ū{ģ÷Ū{íîģīļQŖFQ#7_DÎÍ7ßlÛnģ­]yå•iŊ7én¸Á† –|h1ãĻī븘fũ駟˛kÔöß˙$˜–#ęEzâ‰'ėÕW_ĩkŽš&‰ŋqãÆ%ûŸũƒ@áøļÜrËĻ(Ņ4öą{$‘c}ú駓}„ †Aˌ=:qApĀ`uÖI ˙ųķį§üyį—Ä)Ę}öŲĮîŧķN{ęŠ§ŌĄÃƒ(âå€HLi—Ô^cN/ųÃy`ŧˆMx3f_ˇwųå—'ŅĘ9f ŪŖ>šj!ā~ūųg{øá‡ ÆLb*‹heũ!BœÄÄųvØaļîēë6ŲÄRĢåM̌X#z‚°@T#CzéĨ—RDäÉ'ŸLeŦ)"‚D$Ž›÷‹/žhW]uÕ2Ķ\>¤˜O†đĮ×~õėŲŗŠū°FņGŽáŨwßĩ!CZ˙M¯ĐdÅ,b…äãĒäHßDĶöØc;捪ŌÚ6ŽŖŽŽ.}¨O4ĖߊėãD #j´öÚkÛŪ{īm=zô0ĸ”žÖ\sÍMc*’zŋüōK*j¯1{ŋå[‰søúë¯'ąÉz>Î?˙áZ iũņĮSԌrq3Æ 7Ü01bŠuäȑɟ1ņ!ˇË.ģØāÁƒ›Ę;šo:8ũčÔ˜õA¨qī^۴ƈ5ĸDŒ!ž† Ã4&Q<` īôĶO7D‰)?ĸ+Dˆ˜Ūúæ›ošø¸8Z¸°õ—ŅQÉũ;Lģ"Ԙ:ŧė˛ËšÚü3™áǧęLwÆÄô.ÉËÉs,<Ŋčĸ†éߘüXŖ F\đrXÆņ#øhĶŖL^ŋŊÆėí—o]@"ƈ‚r܌‘s|Ė1Į¤¨ uŽ=öØ$Ô¸N8á{öŲgĶØ8~Æ #ÆZ>ÚcÜÎĄŧėɡŧ틀ˆ€t.ĩ‡z( ĩxß-:ĘÅZã=mĨI Ž(ÉĄ‡šÖ"1ČM—õHDWXķ´ķÎ;§5KˆBŸūyZ“Å("äģīžKã!ōÄ´*kž^-%DĶq.ŒhĶnŦ)ã‰ËļHLëōAŦ1I"‚ôÚk¯Ĩ(QœneJ2iŌ¤$*ŧŒã"ÂDYyBėą&ŒHëüØōŠĻ[Kí5fī—sËôãûīŋŸÄī|Öîm´ŅFļÅ[$7ÎSŊÛlŗMŠbdûLwsÎáÂ5ė˜ŽĻmĻJcĒ$ŌܧŖųzŋڊ€ˆ€t>ŦûŽB }âiŅ’|Z2YčæfÛ0č×̤ÖfĖYŌZŗękā&Ë+5ž{îšôd(k×x­ĸÃפáIBϏ˜ĒDdq#ßi§’ =÷Ü3‰-^kA8ŌŖWšŅ°n5PŦņbmkĄ˜ŽcŠŅĮâũļHO}=<í´ĶŒŠWƅ9餓–é‚1]pÁIMd}‰éK†`=åLsz"jFûŦŊãĄ"GŧÅ×sš_nÛ^cöžxˆãđÃOį‰č=đ1D&ŅRÎRp.§Le"´™ōfl›nēŠqŽH'žxbZƒČCøķĐSáESGķ-z\ōXĩ@a5Zƒā¯YãžGš>줝õk1vfŨŖ,Ë(1D r3ŋ}Ō,{äĢiÔlwN`ŊëĒjc7P>$Ö2Aá!ŽaCûDØ9Øņûã?Ō͜›6 íIä}Ē ?nö”1fWžøōaŸŠ5Ęč›vyõʧŲR'+ø‡cá8ˆ4ņÎ1úŖŽ“kÕx Žc‚ ã%q\° rÆØIl)᜞žöšxxš’}gB=gJŊČŧ=ĮLŋđ%ų9V?ר)į¸Y¯Čē4Ž“ãfllņåxåøs=Đc…ãāãį–ļŖ­Z|9%ÎE \¨Ąú¸pc´˙uõLkh\ĩīV=ėˆŋH:ƒ{÷ą˜ZŒŦmō—’Ō#L7yęģáŌHMl¤ŊķņæJ_܄crąÂ :ūōyÍ ›'Īģ @yÂævl^ĄFō2ÉØ†\<1Ĩ‰ôąÅ.Ø[,ĮŽÍdd‡rR3mĮv؏õÚsĖåũŌwyâp.g~,øøuã@ģ\ėœ7īƒēą>mäl͗ãPč<Šĩ¯~n L,‘&ƒû•ÄYšHs"YąæÎ#‡vˇ^=æŲÜÆ€Öŋ>ž_5ąæەļ†ōÄyáMûDƒ”Úž€øļ=Sĩ(" ]ŗ@ŧVĖ#hšˆLžŸ\šícörĖđŦkBWq’”WīēÛvDIíŊũå›ōŨŌTS Ęt(Ļyũ•"ÚqéL|ģȉÖ0E@D  ˊĩĻ/´—ū¯$ÖÆüÕlp˙æSŸņđ˛b ĄæŸŊG×ZĪîĨ(ĪĩĪÕÛėyÍ#>ąAåۗ@.âÖž=v­ÖŎkoVD@ڊ@y­|ßûAG]ü؜4kŲ¸ZÛvUjŽģÜ/nŗpÃbë§X+ôĖõöĪ×KēnčĀûī˙čcXZS^D@D@D@D O€J_?Í,ũŪ÷Ž^dûoŨ;͘ąŪÜ.@¸Å”k8 ÖX|Í"nÛõ˙Z`o}]hŊ—Lũ}dũû¨:žĻD[Ēŧˆ€ˆ€ˆ€8úų‹ĶCšŦũgI™§ąÃØÄņ=’Pã:ÖŖ#ÖH­Š5œˆŦņä O ]sÁöč{ í&ŗ¸}ŠâëŅØ.[zÅõ•D@D@D@D Ģā=ĩĶf,2ų-JtW Øø›ôiw›2­GcįKEõ”D@D@D@D@ščYģČÆŦß`ģŽl°uÕĨ×QQC¨yT­ŌēĩŠĪŠR…‡Ō#ĘÆ÷ˇuÍ62ß~ųŊŪū÷ĮîöÛėn6ŊžÆfÍ­YF96?LYD@D@D@D k œÕ§ną éˇĐ6ŧĐF Yd}{ņrũē$ĐXŖæ"­RDÍIUk8DÁ†P‹ļĩj5]Ø(âJ?ˆíåÉID@D@D@D ‹đHkŅjkKŋĸƒ@C¨ņ! æ´„*+Öhņōø> ĶkÚbÔ ‰6((‰€ˆ€ˆ€tUč%RÔMŽhh¨\TÍë•sˊ5ī \°ÅNũg˜$Öʑj_D@D@D Ģ@3šnōeeĨ[mĶÃqúŗ’PƒcEąF!Ŗ`ķNéĖEš¯eÃOQ5¨)‰€ˆ€ˆ€tuh&˙ ĘĘ?^'ō-ĨŚ7ā‚ÍĻCgqÛRG*ŽDĀuSnëZjøĩ*Öpō†ĸh#ī)æ[˛y™ļ" " " "Đ ¸fōąųžoËížßŌļXķĘ;jÍîåڊ€ˆ€ˆ€ˆ@W'PIGĩÆešÄZllE;Œm(/" " " "Đ2Ō¯ŗˇėŖR*XĢxu+" " " EHŦĄ$¨‰ĩ*Wˇ" " " "P„€ÄZJō*XĢxu+" " " EHŦĄ$¨‰ĩ*Wˇ" " " "P„Ā˙īؙ’)tIENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Switch....workflow/Contents/document.wflow000066400000000000000000000160561445560650400315350ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx switch "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{191, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Update to....workflow/000077500000000000000000000000001445560650400254165ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Update to....workflow/Contents/000077500000000000000000000000001445560650400272135ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Update to....workflow/Contents/Info.plist000066400000000000000000000011751445560650400311670ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Update to... NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.item rabbitvcs-0.19/clients/osx_finder/services/SVN Update to....workflow/Contents/QuickLook/000077500000000000000000000000001445560650400311145ustar00rootroot00000000000000Thumbnail.png000066400000000000000000001112411445560650400334660ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Update to....workflow/Contents/QuickLook‰PNG  IHDRkĄ_ëViCCPICC ProfilexÕYy8U]Û_ûĖį8ĮpĖķ1Ī2™įyž Į<ĪCD"‘Ą”D‘D*C(eLB¤"’(¤¤¨I!ßVĪķŧī{}×ûß÷Ύ¯k¯ũÛ÷ē×ŊîŊ×Ŋ×ēkĀžLˆAĐek¤KqvqĨ`§pČ@„ęĄcmmßũ—cũ€vĢFĨvmũĨ˙&fđņö˛†ŧ|ĸŊCa| „ŽwDT Č Xū$>&ƨ0fŠ‚„ņô.ö˙ƒWvą×oŒFũÖąˇÕÍŽHĨFų@„å”8oØI 9Ė'0 FgkzP}`? ëH†††īâ^‹zũ›˙ÃTĒ×?6ŠT˙đŸg[ÂëFG„P~ßü_Ą!ąđûú}á’bš;6,đščCÕ7ƒ¯\đų+"ä÷˜Á:‡o˜ƒ,ÛŒa^–VaMŋ(C[Ãm!ëˆŨ] ŋ3Č/"ÆÚū/ųĄÄ=Kayo´Áßv.QMwĮŒ–7FÅÚ:ĀXÆ]Ņqv0†# z“`īô—ʏ¯ū_rÂ/ĐĐ䏂c˛Û<æüÁáfģ>Ā}!”€ž DÁeæ@č˙UJ?@…kâāēh ` ˇ‡Û„Øō—žŪ˙’ūnįˇûO‹ā ëÆūĶįŸŪ(pŸÛ >0ū[N…ûØ­Ûõ.Ú#0í_}ū­ąkīˇ72ĩ2īeļūö %Œ’C)ĸtQ(M”*  XP@ Ĩ€RAé ´Pęp*0o`Ëūû¸k?´Ņ/îlx‚šc\ģûė^×Įßځ˙Ü˙/@āĐrËōßã{ūĐ Hˆ ôˆĄčĀ_ޝ$Å$Ė[Z’"'#+ģ[ũ˙æØŗū8ģjû{.‚X†˙% P@},ú_˛Āj?Āįø/™`ūâԌxĮFÅũą‡ÚŊ ĐÁĘx€…ßŗPę@S`ė p‡ã'ŽÁ(’@*Č9ā$8ŠA¸Ē@h- tƒû`<ã` Ė‚ˇ` Ŧ€u° A"AŒ;Ä A¤iB9d š@ž?ÅBIĐ(ʇŠĄr¨ēĩAŨĐChš„æ ÷ĐWč'‰ "˜ÜaÄ„ Ba†°GėGø#"‰ˆtÄ ÄYDâĸŅ@Œ#fKˆoH€¤A˛ ųRH¤Ō éŠôCF!!ŗ‘…Č d=˛ŲEÎ"—‘?P#Š‚’‚ãÔå€ōFEĸĄrQŨ*T3Ē5ŠšC­ ~ĄIh.´Z m‚vFûŖãŅčBôtē=Ž~‹^Į`0,Œ2Æ゠ÂÄäbJ1 ˜.Ėfķ ‹Å˛c%°X+,ƒÍĀžÃ^ÃŪÅ>ÅžÅnāhpŧ89œ!ΆKÃâjp¸§¸w¸M<=^¯†ˇÂûāđyøJ|;~˙ŋI` ˆ4ö„ B*á,ĄžĐG˜&ŦŌĐĐđ͍ԨĐŌĻ9KsæÍÍ"™(NÔ#î#ÆO¯ģˆ“ÄU‰$LŌ&š’bH'HÕ¤{¤W¤ ZFZiZZÚÚÚfÚ§´ŸčđtBt:tît‰t…t7é†é–éņôÂôzôTúCô%ômôôßdŦBrj2,’ąda˛Ų‡œNžDžGžgD2 0ę1z3aŦdėc|˄aa2a bĘaĒcbZa&3+0;2`.ažÃ<˂df1a aÉcidyÆō“•›U‡Õ—5‹ĩžõ)ëw6N6m6_ļlļļqļŸėvö`öSė-ė/9Pâ6ņ8ú8–9™8Õ9Ŋ9ŗ99_p!¸Äšlšr]âäúÆÍÃmÄÁ}Žû÷2 6OOO'Ī{^F^MŪ@ŪŪģŧ(ĖJå,Ĩ—˛ÂĮÅgĖËWÎ7ġÉ/ÂīŸÆßĀ˙R€  "ā'P Đ#°"Č+h!˜$X+øB/¤" T$Ô/ô]XDØI8S¸ExQ„MÄD$Q¤VdZ”$Ē%)Z!:&†S +{"ŽW/–@H(IJ”JŒHĸ%U%Ã$+$'¤ˆR:RqRĩRsŌ,ŌæŌiŌ-ԟöîqŨsjO˙ž_2Š2!2•2S˛dYSŲ4ŲvŲ¯rârŪr%rcō$yCųųVų/  ž ž+2*Z(f*ö(n+)+E)Õ+ŊWTöT>¯<ĄÂ¤b­’Ģō@­Ē̚ĸÚĄúCMI-F­Qíŗē”z°zúâ^‘Ŋž{+÷ÎkđkP5Ę5f5)šžš5gĩø´¨ZZ¯ĩ´}´¯hŋĶĶ ŌšĻķIWF7JˇI÷ģžš^˛^—>RßH?[Ȁlā`PlđʐßĐß°ÖpÅHŅč Q—1ÚØĖø”ņ„ ˇ‰ˇIĩɊОi˛i¯ŅĖÎŦØėĩš¸y”yģÂÂÔâ´Å´Ĩe˜e‹°2ą:mõŌZÄ:Ōúļ ÆÆÚĻÄfÁVÖ6ÉļߎŅÎÃŽÆnŨ^×>Ī~ĘAÔ!ÖĄĮ‘ÎqŸcĩãw'}§|§Yį=ÎÉÎ...­ŽXWG×+ŽßÜ ÜθŊŨ§¸/cßŗũ"ûėčÎáâ~ĮƒÎƒęqĶíéäYãšEĩĸVPŋy™x÷ZņÖķ.ō^ōŅö)đyīĢá›īûÎOÃ/ßoŅ_Ã˙´˙û­€Â€å@ŊĀâĀ/AÆAeA߃­‚¯ī„8…4„âB=CÛÂČaÁaŊá<áÂG"$"2"f#Õ"ĪDŽD™E]‰†ĸ÷GˇÆ0ÁÉá`ŦhėŅØš8͸’¸xĮø›„LOČJx—h˜xų ę ÷Áž$ž¤Ô¤šdäōCĐ!¯C=))é)oŽJ%¤§>N“IËO[;ât¤=;ũpúüQŖŖĩ´Q™ę™eĮPĮ eÉgËú•í“ũ(G&§0g+×;÷ŅqŲãgīœđ;1”§”wá$ædØÉg§´NUå3ä'æĪŸļ8Ũ\@)Č.X;ãqæaĄBaYĄ(ļhöŦųŲÖs‚įNžÛ*(/Ņ-i8Īu>ëü÷RŸŌ§´/ԗq—å”ũŧxņyšQys…pEá%ĖĨ¸K •Ž•ũ—U.W_ḒseûjØÕŲ*ÛĒŪjåęęޚŧZDmlíûkûŽ=ŠĶ¯k­—Ē/o`iČšŽĮ^˙pÃķÆŗFŗÆž›*7ëo Ũ:ßÄØ”Ũ 5'4¯´´Ėļē´Ž´™ļõ´Ģˇ7Ũ–ž}ĩƒ¯ŖäķŧNBgzįÎŨÄģßē"ē–ģũģį{÷yž82ųåE܋ͩÃĶčéė—ô/ _qŊǘ›i˜UšŊ3§?7øÚîõÔŧ÷üŌ›č7[oĶH …īxßU/Ę-vŧ7|˙äƒÛ‡ˇKK›Ë>ž˙$úéÖgí΃+Î+oŋD}ŲųšģĘžzuMa­į›õˇWëĄë›ßŗ7Ø7Ē~¨üč˙éôķŨfüvëėļØvû/ŗ_Ķ;Ą;;Ô(ęī\ —??ž^…9„ Ėž@ ũÃ)~kĀt‚u`Œ„ķ_a` į§×ÁwH J‡&ęˆjxŊ€EuŖŨ1Ķ‚=„ŗÄsã734O‰¤G´éÆč—Č8F)& æT–kŦ/ŲŲ8,9s¸†xx-(š|ã|‚ūB5Â_DÕÅâÄīIĨ ¤“ötÉlËÉĮ+\Sü¨,¤bŖšĸV¯>§Á¤Š e­ŦS­ÛĄ7¤ŋbHcÄjĖg"eĒlĻgncábéo•f}ÎĻž ^Ų¯8'g1W[ˇČ})ûO¸WytzŽPgŊžú |É~‚ū z–AÎÁž!ĄņaIá™Ų‘ųQyŅ'cÎÄæĮÄ8p21ã`JRlrĖĄ ęaįTŖ4# éRGy2č2v2W-gMgä´åÖo>1{’õ”Q~ÂéŌ‚Á3;E2gŨĪĨוŧ.%]/ķŧ˜[ŪT1Y‰¸,zÅâjlÕņꆚĄÚutõ˛ Ļ×Ŋn$4æŨŦēÕ×4ŌŧØōĢŽīļL‡æ‹NĮģ>]áŨzŽÜËī=ßW{ŋĨŋįÁŨ‡CÆß<ē<ûÄ`„<2ũ´aôā˜á8y|æYũÄÁįĻ“ė“o^´NeNÛŋ|šųĒæÂläœūkÖןį{ߔŊM\px'ģȰøķũŗKÕ˧?Ļ~Šûŧđ%đkđjÂZîˇęõŒ?ŧ~Žl…ürßŲŲ€ƒķE!°¸‚C LÁ™t šBČ N!~"C‘Pqh"ēc‡%`pEø‚)Íĸ(‰—–…Ž›^’AlĮɔË|•åë:;…Ø3˜+Ÿģ™į%ΧĖī&%Ø&4/B•ŗ•8-y[ę…ô7&YU9ų…bÅ&Ĩnåį*[jŒę{å5Œ5Ŋ´âáh8Ŗ[ŽWĨĶāŽá Ņ”ņĸÉĒéŗ-ķmK”5› -Ÿ¨Ŋ‚ƒŠŖ’“ĻŗŠ‹™ĢŠ›ũ>§ũÖîļļžöT7/Go'_+?sĶŨ@Í õ`ųņP0Žp–r$}6Ŋŗû)î]üˁɄ§‰ŪOęIn;Ԟrķp}ęÕ´ō#ĶĢŽöe,#eIdæøææŋ~b8īã)BžâiĮ‚č3Ņ]EķįPÅ%–įcKË.ô—}*gĒPŊä^™{šåĘtĸZ篺6÷Z[ŨBũuÍŅnÜúŲŧ§Åŋĩ°­÷6Ô!}'°ŗėî“nLÎŊÔŪŽžĩ~*÷>ŌPTzŦ4¤4ŦôDvDüŠÄ¨ČĪ8Į3Ļ âsü$4šũâķԇé÷/ßŋš›y;;37÷zvūå›ųˇ6ŪíŧĮ}āX’^Öųh÷)âsöJ՗¯_Öxŋ™¯'~¯ÛXø)°šĢl{q‡˙¯ņĮ˜o) ˜æƒ;āÄšÁyû Bq1Š”E ˇQĄ¨7h/ô"&ŗÍÉāâÃŦ„šĸ$q‰TOC§ᑪ •äDFk&fˆyŽĨõ*[&{‡=§—07–{į-ī Ĩ‘¯„?C LĐFHK˜_-˛!:.Ö,^*qXŌCĘPš"ŊĩįšLŊė9WyqŦ„âĨĘ*"*;ĒãjUę‰{-5$4QšSZ×ĩéøę*ë1č­č\6L2r3V5a6ųlúĀŦÜ<ÁÂÎRÖ kõÚēÃĻĐ6ÆÎÄ^Č~Įášãu§,go%Wzסö}yûũŨu<8<>yvS‹ŧÂŊ |¸|V}ø•ø‡hrĀk}o𚐸PÃ0ž°ux]¯<å­Ã bgãzâ+¤&ø$ObHÚH~u¨7ĨîđųÔ#iQGÜĶmŽjfHeōcĖBgũĖūœ3Ÿûüø?ũ';O5å7œn,h8s­°˛čōŲ‹įƊ+JJÎW”^ŧpĩl¨UĄp‰Zyârį•Ĩ*†jÕīÚã×ÚëØŽ›ūŽĄą&RŗnKTk}ÛįÛrîÜŊKî éž}§7ĨīSŋ΃éGÎĶķ<š˙4vĖā™ÄsÆBĶF¯Rf?͟X{Ÿ˙ŅæËđ†ķîø˙Ų[Ú]0JœõĀ…#r÷ Ü+köĒ!Í o=ŌÍûgũ`jđĖ‘Jaž8Ą Q˜F@0ߛA`ŌD2â2â âRiƒLFÖ 'Q8x!fbCh$ZŠž„žÂ0cŦ19˜~,k„=ŠíĮ‘pޏbÜ<^ ƒī%0|7i°44­0ķ %> ‘rHĢ´N´í0›)Ĩ'Ō¤_acøH%¯0Æ0ū`:ÂLd>ÉÂĘRÉ*ÍÚÎfÆ6ÃĮAā¨äÔáœäŠāfänãqáŲâ­¤XQ~ņÕđī ô &Úūwá6‘QC1ąIņJ‰IS)Qi´ôĖž>™*Ųlšxy_…}ŠvJVĘ*†Ē&j–ęž{5â5Ķ´ĘĩÛtĻu?é“ T ũōkL.›ž4K5O´ˆ°ŒŗŠ´Ž´ņĩ ŗ ˇOqČu<îTä\īŌã:âļ°oĮĮCÃ͉šæUáũĐé'ëīP8 BtC…=‰āŒ ŒjŠūë×|€”–ø$I1ųR ÃáCŠ;GBŌ?f„f.gd΍8ž‘—~J4ŋąĀėĖxŅĄsF%öĨ!eGË[. _AUŠÔD^ģ\?ƒũĻ_Ķ…–wí{;ĸ;‡ģI÷¨}- G.ƒeCK#ŖYãˇŸ“_ØL§žęũ:ĪúÖøíû¸ĨC“?Į~q]å][X?ˇ!ųãę&~ËvÛũ×áßķ‡,ŧŋUúĀˆ2b 2č´Ž  Ėa1†D"åTd>˛fäR(OT!ę1‹ÖE'Ŗ;Đ?1ǘĖ,Āęcŗ°Oq\¸\+wÅ×âœ7`îëKĶM"Ļ_“ĖHí´ÚLÚuē@ē—ô6ô} j wȊä&FuÆn&cĻf7æ–XV,ë6ļgė45œœk\ÅܚÜK<xÍx7(×ų‚øyų§ĘŊ„D„–…¯‹ĩãû.>$qEō˜”Ÿ´ŅYŒėšÜŧüS…{Š]Jˇ”á4TĩQ­MŊsī}1˜%}ĐAéŌę‰čkė3L4*2Ž3i4­1Ģ5o°hŗėˇąž°™ąũb9đ8J9Š8;¸Ä¸fšUėģģÎãÉC5ķ ō>îsĶwÚ čt.¸'äk˜x¸wDiäãhŖw#ūk‚JbäÁē¤ī‡´R2¤‘ŽXĻ—ũš)},;k"‡'7ęø@ådôŠžĶt^gzŠøÎk—,•—y”3WŒVæ^ą¨Ŧ~WÛP—ÛāyCų&×­ĩæéÖļö[ĨŠ]>=nŊ{ī+< Ÿ+w|,/ę1ŋŊĀöĖvŅųsä⸒ŠRë Ũ•ĘĢ/ņTV\žZį 7¯)×u4h_īk4š9×ÕŧۚØļ}ûôĄÎĒ.ņîk÷¤{îËô_{Hû(wæqÔĐü›‘ëŖ´c!ã'„žž|6Å6íüōė̉Yæ9ÛיķõoîŊZØYd~/đ‰o™÷#÷'öO۟_­t~)ũ°*ģēēvã[č:e}ü{ėqŖō‡Âģ?Í~>ÚTŨŦÚbŨJÚz°Íŧíĩ]ŋŊųËč×É_“;;!;Íģãí'/ˇģzˆ¨ o?žÚŲY†÷/ķØ>ĩŗŗYąŗŗ} &đ?Ž?˙+v•1đžûųŦ]tīFÕîå?Ž˙Sßy‡x>a IDATxė|UEöĮOzGņ¤¨(Ø;‚ŊëÚÛb_uuuíēû_ëZļXW]ëÚËŽŊlØ+" "JīHKH{˙ųžä<.—û’—„G8“ĪÍÜigÎüîܙß=3÷žŧɓ'§Ä#ā8Ž€#ā8Ž@N"Ÿ“ZšRŽ€#ā8Ž€#ā8Š€“5īŽ€#ā8Ž€#āä0NÖrøâ¸jŽ€#ā8Ž€#ā8Yķ>ā8Ž€#ā8Ž@#ād-‡/ŽĢæ8Ž€#ā8Ž€“5īŽ€#ā8Ž€#āä0NÖrøâ¸jŽ€#ā8Ž€#ā8Yķ>ā8Ž€#ā8Ž@#ād-‡/ŽĢæ8Ž€#ā8Ž@‡ĀpęT*%åååōĶO?É/ŋü"sįΕĻM› ņ¸ŧŧ<õ=ŧrâņĀRPPŗįŪŧĐÔN]ZĘÎēĘá§u—-š.Õ4P˙ŧ?úũļŧãÍĘÔßëáZa"ķüįĻVö^q#FˆDmčĐĄŌŧysŲk¯Ŋ¤YŗfJŌ qëw͏ļv}ņ‡Žš-Ũē´•ü@ēáŨáŋđTˆ.” åDĘÂŋŌ˛”L›4_žzh˜Ėųež\{ëļĄT<;ÛdZQĒnū›žŲöG˟ŠvŌãzÆÃ™Ęzüʅ×ÚúūĘĐßW.„ŗĶļfƒŲÉô\ŽĀ*@t`=z´ZÖöŲgŸ´E ŗbb¯˜Ô™ä<ŧ‹•Ž3×rząHašČĸ˛p¤ōeQ k…á( lƒđ"üļ0ø…åų!=_Z­ŲN?g{™×Ž…<ųŸŅKMˆuyÕĻ?äįK~ô¨´ūrm†ŧõ†<øāƒi˛Fųņíđūŧ 0i xŦ,ũŊ.ī\’åË št5\—Fƒ[iiŠ@ÖļØb )++̓ÉŊŦŦT'Bō0ģŋráĀ5´ëËuŊ0%s•Jž’›ōpM+ˆ ļ4ėlīžū‚ėēį —<ŧT°Ž [đ Kō¤īž=äĨ{?’ŖOę!Mš4Ņ>Q×7‚é[]¤Ū’’RųeōĖ`n.å(ŦšK d˛páyũõ7åđ#–éĶg†~Œų0´§Ŧ\:th–ƒ+,ÆŪ¯Ī}Ŋ2öwúqcsNÖęāŠūúë¯˛hŅ"éÚĩkHs5E€‰hÚ´iōĖ3ĪČgœĄÅ™,ęĶQįÔŠSåŲgŸMŦ“ô’’ĩŧtéŌ%ˇ2ā!jÅ%ÅÁĘÖL'eÂųķįËã?.#FŒSO=U6ÛlŗtŽģî:•ßž}û4ÁŗvŲ„XŸáĒôÃōB;qøčÕ7Ēߔ)Säŋ˙ũ¯œsÎ9šŸ´h:‘+K˜ļ‚ dœk<ŋ$%‹Šƒi-ŦSäĸ– ëžÖũžũb¨\qūérí]ĨīV;)N!§’ ’`‰[ĘļīÜNÆOĪWyp¨kW]lŌ¤i˙yķæËį?Ęf}֕EE…Ō¤iK)).”­ZÉÛCېc?Qú÷ÛLæ-,‘ÅEĨŌēu+5j”ĩV­ZĻUö"—÷ú"ãŖ>’3fȁ¸ NË+ßËWLpÆ+c¯hAãúīË ĩ¸žt^;Î>ûl9účŖu’0`@:žôš:“‰?xđ`Ü,ŽĻ˛ę+ŋéƒŋņÆËĉĶmޝ:3É5]HŸ>}ē<ôĐCéŦŅ´td'LžŲ¸¨\&xČ°< .ÔsŦ/ĨĨ%•GŠ”ËEY oLöÔ{Ī=÷Č×_­×œŊmíÚĩ“ĸÂ"ĩÄŨvÛmúRBy°\?mĄ aÎ)¯~‡3éi´úLmGeũQ}ŖúAÖîŊ÷Ū´žQų&/šŸöæj˜ör ņ!k…Ĩ)) ×sqiš, äĢ(øÄÍ[X$w\švĢ;o¸Læ.(”E!ž<‹J$äKIā;˛ øíZʂ Ō}'Ú­? >\ļÛnģtâŗqVžĒūhxƒ9ĮøYųōĶô<=šD^~ņyųefSųđËņR8wĒôŪt3úҎōųgäy‹–ÁB´ČkĘ-éŸv}‘ĩÚjĢÉĻ›lĒæ~ũúÉ}÷Ũ'_}õ•lēéĻZ—öŖ€_ĻëM˙üķĪåÕW_•¸žޝûaU–ßĐũ=›>Ŋ*æqËZ ¯zt€üėŗĪäûīŋË¯Ģ”ÂÂÂĨ¤‘—§“Ú¸ũë_ēĮÉĘ.,“ąŧ~´íČbālÛļmZlŽč˜-æÖžņãĮËĄ‡Ēˆ5&V>ŠŨL<ÅÅÅēŦĨ“M‡YV'xâKÃĆŖė{īŋ/ĮsŒôéĶGãF˙øc˜üXŽ*ŅôŌPļ$Ŋ´NXĨ4gÅ?Ļėē ŗôeōĐīũ ß1•úĄCI )ėÁ1gõ“—#Ž/ōĀ€4Ú’–<+——Ģá˛@ËÃ5ĄM´§¨´™‡uÍŧ°ŦYž–HËÂR`€įĩ'é“'Hŗæ-‚?Q^zō>Ų÷˜ŗ$ä¤5,†cQI𔔇=M-›Ęâŋ•°¤¯sĖĖŅ?Ū|ķM ĒOz4˙R‰‘@Uũ‘6Đ‘ŲYúįđQsƒøW)^8G>ōĄ4]mwųâŨWä7ģo"s‰|?z‚ü:wļl°ņÖ‡2™1{ąŦŪ1ŋb_f¨W÷h…v™ū?ņ¸tīŪŊBŖpÍÁīwŪŠč!V{S¸EâũōÖ?8WBüčũ@zRŦ¨,`hō+#<\‰w–x4dˇkæū˛¸emYL˛ŠaāĀĖeéģīžĶAŽE‹:8‘vķÍ7Ë.ģė"Įwœ 6,?hĐ ]ōÚqĮÕŌ@ēHĄ OÖûíˇŸNōųË_t`&O>0YnĩÕV˛ķÎ;ËĮŦeŪzë-ÁšĮ’Ëq&'ę?öØc‚Ŧßũîwrä‘GVYîįŸV+aŧž›nēIë=ūøãå›ožI×ÁaųņŦŗÎ’÷Ū{OqŖnˆæ#<ĸųŦl‡ģîēKÛJ{Ū}÷Ũ´Ė¨î™ō˜Lô‰b‹VlvÛmˇe°xėžûîjĄāú°|}ņÅËĖ™3eīŊ÷–įž{NÛauÄõf˛Ü~ûíwŗĒYZ0ĸ { g‹‚†5-Äo–¨Ī>ũTŽēę*Ąo 8P…Ŋ ¸ōās>fĖÕq׀Ųõ×_ŸžÜ‡„ļŌočS7ÜpC:ŋÕAyĘ|đÁŌŋŲq‡|,}— īá‡ÖūE|*Ļß§•úaEFq?ũ¤˛ļÜrK­ķíP† yQ}_yå­o§ ×ũ÷߯×Fë y_{í5- æO‡åQä’ö‡?üAîēãŲc=ä¯ũĢĘ=3ô]pĄ_Ι3'Ũ>ˆ‡éģĸÂŁ˛œY–B‹Šƒe-0އ&ˇŋöŖÜVyėvøÁ’V& Cž!˙œĸđrÂü™8/āȚļ%Ü?™×đˇŋũmēĶyPÜsĪ=KîÁx_D–ŁouũŅŽĪÂ_ eîœÂ@ŠšČv{ž#E Iųĸ ŌŖįæ2cZąlšÍޞÛËėĀÜ´íEáŌŽ#ũMåTö#t°4“ĪC.caōs/žüōËz_mŽķ!C*ŌÂõŊ1ôéÍ7ß\û}1âŦŋüío“íƒĩņˆ#ސ/ŋüRË|7r¤ėŋ˙ūōĪūSz÷î-…ÁÂmųŠobO?üp­ ėžúâ‹t:ãŅ“aK÷8}Ž~Š~#+eŪ~ûí˛Y°2ö°ôkú̟#ũąžī‡†ęīôwKpËÚ,Ē=cĐÃŲā‡I˙„N8@˜ČÎ<ķLŨˇ1nÜ8ŊÉßxã Ũ‡Ä¤ķÄOhŲ &(Ųb"kŨēĩÜyįōÃ?č’"DĨT–ØlŲ‚A§sįÎē\Ö*ėŅ1 —_~š’4Ŧ[iÛwß}õĶZQåŋyķæÉSO=Ĩew“4Bŧo*ōI‰¤zø>V´-ė¯ÂŅta`ƒ2ā‚ $ō˜T°@ūũī—O>ųD—H ×J•Õ‹įą‰lėØąKéÃ)ę&‡,Î˙ô§?-…ĩņ‚ .PâĘu#{„ŽŊöZųÍo~#\\&ŊIģä’KË^ŊzÉŨwßM”ÖŠ'áŸZ‚ÖG ôÄ…Ŋ?8õâ`AY ßZ+—c=N'\Há{ėō‡åĸÍuÛâÅE*gÁ‚…J䯚æš0Y–ŊÂsĘŠ§č'AļÜr+aÂ:ųä“äŊGŸ eT>:ŖG… rˇõÖ[‡„ûáϤčũ÷!Øųú0ĀD˙Ė3OKi{-=ƒ6˜~LNčĮ~Ļë‚ŦmļŲ&°ûYūFeUõŠ2Ļī…^¨ÄŊWĪ^r˙÷+Ūŋū:O­(āøä“O„{ ­ėÛ.ģîú`S™ˆ׌>JúI'$k¯Ŋļ–ëÕ̧˚5K !øhÛĸįZ ūéĩbŲ32Dŗp}KÂ$š¨ ×,/ŧí‰_áxŒāę‡KĪ˙Č\ČDHY^4/o†âZŸ!WÔY<>ŽūfîĘ+¯”Ž;J=”‘' “‘ÔŨú§ÉæPˆXA bĨė,.š/SĮŒ’‡éÎ+h&;īē_đ™>‹Ø•„ƒvsũė^¨ĐĨBĶN:é'…Qũ*Ū&­Čà ĀęĢw’÷‡~(äËûwĩ_đ°Š<ŪŦÆÂˆ{í5ä†oĐ0–5úg^¸&Œ?'žx’Æ[}ČCFģöí4ĪG},?ū8ZûIĮ >q°ŽĪƒíÚršŒ9B ŅáđÃĶ<‡v˜ŪkååeKmW‰ļG36‚Úw°ŋ7ČęĨ NÖjĢvŪpĶ›Ī$ķ áõü0i˛ˇ™T°tá0Éãl ¤œ&WH Ö9ŦT›l˛É2ųȋĩÍĘ#‹åĮ–-[Ļë€0m´ŅFĒé8ōSƒ••Eˇxš 6Ø@ëĻsˋŒx[¨™– !OôĪ?˙ŧZ{Ž:ę(m_ŧ,8XÛ!ĩĶO?]°vĸNrų–VŧĶN;Mķ —ęëŦŗŽļY†qTŸLm„lŅ>đ ­8k‹ųÄeŌ›ebÚJ]vŸsd"#î¸nL^öIōXØ&ĘpnG4lō ČX.  lōËÕW_]Ë`Ņ…aaƒĀa!ĨsčĮ2Øę„HAâ,L~ S6ÚĶ Üč§QYLĀȊ–ĮjŌĻM•‡+ĪË XˆéK„š†n¸aēî¨ÚČC–6îú{ˇČƒŖŧÉ׈đ¯žÃ≪đhŲ,|3-ÚH æjUK…‰˙›7Ÿ”‘CŸWúFūî[ ’ūûŸ¤ļō°Ÿ +(o.\JļjF–ŒŽēė°úÉLûŅ!šføGzÔÅû#i䡡P͞CY,nĨá‹p-Z´‘Î]6f}Ī’FËŪėˇeŋ ˟áŗ%ŗfHĢ`- ËžyÁ˛h&ÔËaōX˛åÛu3Ÿ<艺{SáiŅ~D™|ōĮq_ŲÃv iGCõwÕ˙-…Ā’}Šhdƒƒ71˜ ‹w­ĩÖR‹ ,ČKĨ bÖéņ9čøĸ´æškĒĩ=eđ†L|0öī`YcīqøX4fĪž­ų8įā ›rVÖÎņ‘ˁ.VÎtŖúc‹× ‹ļ…zĸÄŅô…t˛ÔÁk”!ËS´,õQHÛAãS –čhŽs&Ú̓Ldc%[kwTđ‰ˇ‘§ņ:¤­@f9ƒt “edö B†(ŸIo,¨<ÕŗdC9öؘ‹ęOapåÚs §Mfœ[˜ü ō6ÁDÃÄsčua‰üĮÔåL,6ųĄ7¸ÜrË-ŠĨÉĩ:hû÷XĒDÖ¤I“ÔšPaÉZ2ų™ŽVÎô6ے;˛Đ—e9úؐĪtgiŦ ×8[b&ēSyXU9 eČŗēđ sqíØWˆuŽūeíãŪ°ƒ8;Į¯Ī°ácõ´jZČZi~ MåŅ6XĘļÜí™3ņGųå›Ą2}ˎ˛å CĨ]ˆo×ŧiČÛTZ…ŧ­›„#_š„=kÖg°Č?ë[æĶGé8;ĮĮ™ ËĢ‘‘øęú#m÷â°˙ްhą ˙ā?ōų[ˇÉčáoę'gZ´hČiy/ŧlp˙Ũ×É˙ŋ+ŧš\ČZ°h…k–Ô‡Đ™ÖŸđ [ŧÛĩˇ0>÷"Û%°ÄŌĪ­“—‡cÆŪJˇ~Ä-Ī9õaÍĨīpYcŧ‚üƒãŒõ7t⡎0ûę dÜg8ę§ŋ“öÁȁĶíEnCõ?ëw U_C÷wÛ˙-ƒ€[֖¤únVnzöaÕ`û  ^ &P,e,˛¯‹ÎT;gã7Ãy2Œē„ą>ą‰ŸÁ Ģ›Ņ˙ņč7¸Ö]w]ĩv°GhĀ€ˆUgõD}–#ĸå°¸œūųĒ+/!đ2Ģįĸ‹.ŌzØ\U[˜8ØÜN;YâĐ%ŽdŦˆīÖ­›NÆW_}õ2˜`Ũ‚ŧގŪzš‡å°@f\öí˜#mdOmk#?˅,§ąQBČ~>ōķSPl: Úכëi8÷Üs5–Ąƒ:(ŗÕŪæ˜<Č9Ā…4ÎÁˆ0ņL*vP–<ŅI‡<ŧôĀŪȧŸ~Zu€AvŲOF^ÚNˆ–5](G?âE‚ņãĮ+č`Îę6=‰Gõr˜LÎŲĮC_wdą’‰ÃęB}å~ö2áŅĮq”įģs´v}čkānyŦíOؗH_A&Yt‰ę‰Ė†t†íå’Ö*ėˇKåĢtXëƒáȗļ­:Ëį\/÷˙e°ōûĢÃÜÚaų3āĘąIž$ JĨMqiۆß]ŦÍ0 Ø9žƒƒ…ņ-lų‰‹bbåH÷GâĀ’ëGDáââ°o-,…Ž×÷X)úuŧĖųuĸ˚1A-œ%íR?ËĖĶ‚…s밇­G°Ā…7b/ X´Õ˛ô+ęG–9ģfv]ņÉc‡å‹‡WXž‡qŸōPq#qŦJDĮĻ'Ÿ|RE™ęĨ.,ŗUösŸĶ‡yhceĪ0fĄã%">/šc{‡ÉB0{é sŒOXū‘ÍA=Ņ|֞Æā[éGœ×go xÕWüˇAk€Ŧ zø D n<ųķ´Å˛'G:–,6 28næ$grãiŅxĘō&V0ę! 8ˆĮ2Á iƒF4s“eį”ÃēnĻ7õSņÔÚåįé3ږ¨Ž&ÛĘ[Ø|Ȓ•EĻÉEo,FÔoz[šMėW‚$Yŧéc2)w–Ÿ:hŖÕK^â!–v],?q,ŨŅ:(oŽkÖ6)Ą{ô xąTÍ ÎK#ÖNâ)OŨ´‘>ÂÁõĀĄ‹9ĢĶâ˧MX¸l)’xöâĩœfVųxqôˇ6Yũčd:rnųMŽõ+ƒoéä7Ŧ3,}ÍŦj†ģåŗŧčÁÃ(Îņ6Äõ̝°aÂĩ„đ?ōSéļZ¸'ic~xQ 5k Wķųß(œrü-\gČZ8‚a,Ŧ"†7HKeė¤š2uÄp9wPsŨkÅ5„<áĀŦė~ ˁ3 ­ÔiøgødĶŲE´gúŒ™rÜ_~’Žkw ;Ō$,Yˇú4“&Aūŧųŗ¤ÉôĮä‚ķ/—EĄ/Z´0|4ˇY ícdĀ6ôŅ¨=­īĄ¯éÃ9ũ9Ŧ=ÄĄwŧ]¤3~poZyÍŅ>úũȰĀ7,Ŧ^âL'í…ŧ"Ėy{”=™ôĩčũđíˇßęÃ5ōs¯‘ßÚju%éo:›n+[¸!ûģ]S÷—E`ÉŖõ˛iS Ü|L˜<õsFŠr3™°•xÎ9,?qIÎōX˛LNô†72bųĖÖ—E˜Á͜É%lõXø™ÚBZTļ•AŽÅ[YÂŅz˜čq”19ųGKDĢ>V>*Ķęˇē ›ho‹ˇzņ!1V?Ē7u#ƒxŽš9Ģ'*ßⰂ2Č30P/i6æÜä›Va;ˆÃrk˛(ÃÄdKœMø„Iŗ8ÎYĻĮĮ™žøäĄŊL>æČ‡^L†QŦ<˛L/dāâadZ|R{‘ĀÚCŪ¨^ČCđ"úĄĢų&ĶĘY]õļë†>č׹mkiÛ.ü(|4ĀĸûEƒ 7øŌ‹0$—BsÂ5Đ‚Ḭ̃‰4 '-f}Ú¸gēíVÖüx;Š7gáLiUõGú4íÂĩjŲBŽ÷}øöÛXŨ°_Ģ ŸÁujŌL>Ÿ0L^|úŸ°´×žÁ[ŧזģū&Mz¸FČ3Ŧ(k×ũ8čGvÕŲâŦ=䋎I¤GäÖ˛Ŧ uY?!Îâ҇sō#—+p4}‹}jæ¨Īú1žä#lõā#Įôŗ:Wö°]Æėī†ŊûKX22/‰ķŗ,°‘ŦŅķx˜´čM'žÁ?~C“ĪâŦŒÉ!žs‹7ßŌ-lųė&ŗzŦNËõ97guPŪ\´âLĻĨ[žÕoiņ˛Ņx;7ßę6ßâņŖqQ™V>G4oŧŒ&FdÅ1Š—–ˇ˛–')8r,KŧÉO‘1Š0đQ—ÕĮ3Œš6Qm‹Ĩ!ÛdXŲh{-ÍōQ‡Ĩ㛞ø–‡2äÃˇtd“ŸI)^>&_ŧŒ•ÅĮEëĩ0žÕgz=ˇžjå--Z.Zˇ•Į7W×éVˇÉ_}uöōŊMÁƒhöXÎĩG†XՏːĩō@r Ļĩ[ÎÕū×ÕęĀ'ÍŌņ “hšåą|VžpuũҰf‰˙Ė3Ņ=ZXÚčŗ¤ņY‚‚@POßļ û$wÚMû DĪ6ۃác}Ût°xÂVmā0gí˛¸hÉ [kĢÉ'Ճs+‹Oē¤Ee˛'Ž{ÕĘhÁđ—Zx‰ĖäFũč}cr­>qQˇ˛…ikTį†ęīQĖü\‡‡![ŦÚŒ˛•ãųV čėÃboĐä­GÛ{hĸƒõ-˛<æ“Ī&ōŲaéNB—4ĘÛ$IĢßΉ7yœ[9‹‹úœ“ŽŗōŅtâ-Ė9Îō[ÂM˜:Éí\_sņ>DŧõʑŽ‹æĶˆđĪúIT+kiøvPÎd"|M¯¨|ÎɇŖm”7G~ŌŠ'Š'÷8áh]VĻąø+[o,¸ĮÛád-Žˆ‡åD€žœœƒIœ Œ ųLnLČLj đ ūŅIĄĒĒm"Š*MZäáÜĘāÛš•'Ũœ›oņVÆüxŧ…ŗ)Īceņãi„Ŗurnyđí<*ŖĄÎ™´™ŧŲ‡iƒ„sM¤Å'ú¸^´…ƒ=’|ŧB„dYC~]šlûį[L IDATŖaŽnÔĪ$m†8œųœÛu0ųôyÎ9Lų2š¨ŦęōXŪęŽ{4=zn劇ķx8OŲxyĘX<žŨŋŅ|™Úą2Į¯lũ}eÆē*Ũ}ĪZUčxš#P l2`ÂãĀ2c…Ás{Ī–ŦÕB•F_$:é6TcíFɌMŪFVĒĶ‹tëfš"l}§.Ûb23õGâŅģēū˜DJ’Úių’Ōę˛]š&ĢąļweëīšÖ/ęJ'ku…¤Ëq"ØĶ(ēM^LŠæˆŗ's'k†JÍü99R7יÎ%רŽwĻÖD˒˛F?áYõáĒëÔmm°ū˜ŠÄĮą‡“ōÔGģrEfŧũšĸW]éíŗ+C¯Ģvį’_ÍĨĢáē8Ž€#ā8Ž€#C ~ãb•xĐpGĀpG v8YĢn^ĘpGĀpAĀÉZƒĀė•8Ž€#ā8Ž€#P;üƒÚáĻĨØDË'~üņGũmēĒDņķ&oŧąžĻߨ7ŖV…ƒ§9Ž€#ā8Ž@Íđ j†—掞%Åo?ōAĖõ×_?ã›\ŧ]5nÜ8ũÎÖf›m–Žą>H›éöÕW_éˆķŨĻú¨'ŨˆZž 'Œ3fŒôíÛWĨÔˇžÔšpáBũHmCÕYKxŧ˜#ā8Ž€#FĀ-ki(j~¡‰°Ŧ­ŗÎ:‰šI%Īĉõ{Fŧ&3bÅų}÷Ũ§ŋ¯ĮGTųPævÛm§_'-•E™áÇĢ%˛fiŲČĄl}:Ķ…: kü “'KËVOōg“×äR'×ĢĒ:ŗ•‰ŦLŽ.dd’íņŽ€#ā8Ģžg­–ל ™/–Û7g8ˇ/˜ÛĪ‘””VÄŲ'ÉKĘÚAõœãöŪ{o9æ˜cô{K-s–náę|Ëo~uųWTēég~6z—ƒŸˇyôŅGĶ8f+Ãō™ou~įw”ČqOˇ|™|+ŗ<22ÉöxGĀpUˇŦ-ĮõgyËä,üzsøáã%?‰ƒXŌl‡°ļNZĩ–NØŌZˇn­ # _ũĩ.ō[}[nšĨūž ųŸ~úiĩJ 6L?ĒŲŋYoŊõŌDÃdŋ÷Ū{úģ}艋Ŋs8~ōčÃ?”9sæhųwŪYŋŦĪ*˓ņú cĮŽÕŸPÚa‡Ō?zŦÂ*˙%偠:T—ąŌ~ŅÚgū/ŋü"Ÿūš~$tĶM7ÕßKDė¤I“ä“O>I“ãC9Dåa%{öŲg…ĨåîŨģ˗_~™¨÷Ī?˙,üą’ā.]ē¨ĻV'Ž y¨ōäÉÚÆũ÷ß_ÛÕ{Ģ­ļRŊŅ…2Ûnģ­Ę2dˆôéĶGķĮeX=äwį8Ž€#āÔ'kĩ@ ˜rŗĮYē,+(ĢRdŧ”ą Ü I›2eŠ’ ˆÃ.ģėĸy!T„=ôP™9sĻ|öŲg˛īžûjŅųķįkÜA¤$R†eÎr9 >;vT˛„å§GšRÆovØaJČˏ1'Õ҃ uÔQZÆęˆúņ<†ďßQ¤ˆå?ü ›ožšâ`y¨ûŖ>’8@ņ˙ûŸtëÖM Öûīŋ¯$ŗwīŪÚ,”Å—^zIh;.“Ū¤}đÁ2hĐ Å`ĈézIƒDĄ$wíĩז5×\S¨‡¸¸Ūß˙Ŋôë×OH"?ÂÍo}"ƒr”‰Ëp’ĘîGĀp–'kĩDĪH†ũîcUbȋ#¯•ŗIœ0D7a™={ļ’…N:i<–,ō|úé§ęO›6MÉ!ćE‡=pė‰CæôéĶõ…ŌL6˛3fd öÄCĮ¯K¯öS3”IĒËõa•zõÕWeûíˇO““h;̓ēIdŒúųasŦaÖn|ô†ė}ķÍ7¨ĄåĻNĒå DX‘…#?úãĖb™IoHuƒ'åųMÎŅŖGĢ Hq´ßä×=ļØb ŊŽ”×_]‰%“2VŪ|U0ü3Œ,ėž#ā8Ž€#PœŦÕ­X^&eˆ“>“r|b&"B^ g“:=Ž%J2,4,Č ËĸX™p뇷N)geđ!,&×Ŧwä% ËÜk¯ŊĻähĩÕV#ZķŖeĐÛd‘–TŸÕąûîģëgJXöcÉĩW¯^I;ōíąĮJ†Čƒ ’Å‹č QÂYĻ3úS/ē[;ņÛˇo¯{ĶČO^#hœ›Îæ/X°`œHŖũdÎí@+ÕÅäŒëÍõ3ĀkMy|â)o2oiÔįÎpG-ū‚A-‘cRÆąŧÉā€0ĄG‹#ŧ8+kįÆĮ´á†ę^2ĢSÛļm5Ī„āŒ4`‰ã|ÖŦYĒų ČâĀ:éƒ4ĄiXĘ ëŽģް´G=ÄgĒ2Bęa •%Löv™ŪÖĘ[ˆ'–<äŌ,{,ÅŌ>|Ķ‘˛œÅÍÎ ƒ>z›å ųä!  ˇ„“pBoŦ{X×x!˛,ņšžæV\ōČÕÜMoôdiōJ{Ø(ÃÁÛˇ&Ãäj…ūĪpG%įŸūĩ,ģĘŗI˛Ā>2’1Bô$Âl†‡ta-‚h˜C“<ßkÛhŖ4ŊP,ÕąŽ8Hä‚ôŨwßéū* û¯ á9r¤Zģ# ąęĐĄƒ–A{Üȏĩ‰=V8ōqÎĻ,zIõAP^~ųe]Ē…bY#?ōp´ų/žøĸæH{â \|ļ„=oø,÷b9ƒÔ°!ŋgĪžJČНĨRÆĸČĮ„9 D6ÚOYäBĀĐ= VqŊ!Ŗ'ˆ)å؃†uōÆž4âÍĄ?ׅeXt§,-Io^Ę@ęG^Ē€ŒCÜč&cũ`M4ëšádõšī8Ž€#ād‹€7[¤"ųĖō™‚Dą9‰ģ*‡• b˛ĶN;)°ÉY Î͑ÎD‰ĀY>Ȁ•}ꊧôeâČ%”ą|ȀXB(cÄÄō`2˛I–%t‚!‡ƒxōG]ÆhšYŊ ϐ$s&ČO#ŸåÁ×hŊ&ĮâŖų҇v!Gû¨ĮĘkdøGœaD^t7ũŠ“r†1íFGĶ)ǎÕci&ßâņM^˖-—ĒĶōēī8Ž€#āÔßŗV´by™üą^aíÁēÅ$ä˜Ā™üŖÖ›ÔÉĪš-dŽ;ŌPEĶČY1/k:Yžx=¤´ŧøVōĸ2MōpDĶLōX:qœã°\Y~퉎tâ8ŒhEķDã­^|ĢËä ˇ•'Žräŗö[\TļÅáCā #Â8Ķ;^Ļ"u )ļtĘGëŗ|î;Ž€#ā8ĩAĀ-kĩ@-n…asqîGĀpÚ °Ä$S›ŌĢx›”Ų3……'‰lQœl6“Žŗ0įsœGĶ,žŊ\8KÃˇsË%gyĖ7VÕ—GØōXšų&ƒļÄë4y–‡2Qgéæ[žhžh\T+cž•‰ęEZ4-=Ē‹]dÄËX~“•G\TŽå5ßʸī8Ž€#āÔ'kĩA-”a"Ž GEڄMšę39øq`aühÂv ‡´ča˛ņŖų,>*+Gū¨KĘK:ņ´ĮŌņ-.ŠÎ$™äÖ=ˇ:ŦiVW<pueMŽ•5ŨMoĘ[&Ë|+­ßâ’|“™mū$į8Ž€#āNÖ ‰øLô8–ŌĸovÖ@DŖĖj¸4ĘÆyŖGĀp„Ā’oŦ ŧZGĀpGĀpĖ8Yˌ§8Ž€#ā8Ž€#°Âp˛ļÂ/+ā8Ž€#ā8Ž@fœŦeÆÆSGĀpGĀXá8Y[á—ĀpGĀpG 3NÖ2cã)Ž€#ā8Ž€#āŦpšÜ}÷Ũ+\ WĀpLđ‹  6Ø@ŗÔÅ÷ëėzãÆ“wß}W7Sũī8ŽĀŠF īÛoŋMņÃÛüH6?`mƒØŠVĖëwGJJJdذaúÛēũû÷OƒRŌßžúę+5j”ôë×Īŋ—˜FÕOG `|ãA•ßįg%›ÁÁMIČô“Iš ŧëā8ĢŒM[lą…|˙ũ÷2gÎŲu×]uŦ‚xՄ°QãĄôũ÷ßWY5~*Ž&rVŊ+ā-v†F€qÃ8Z^x˛L-^ŧX­jüˇ;GĀprČUôĀÂ6fĖaŧÚk¯Ŋ„ßäÅeC´Œ¨-Z´H^ũu%hŨģwW‹Zz0Ŧ|pͅļģŽ€#āđ+IŅôrôčŅ)–@!jXÕlPs˜GĀXŅØ˜ÄødcÔĉe„ ˛įž{JįΝUÅĒ›i3fː7ŪxCÖ]w]YguôŠ•Áƒō<ÅēsG °1‰ņ‰ĨĐŧņãĮ§mŋš lš Ŧëā8Ģ.ŒE5Æ'§JJĘdúŒ™ōãčīd§v’ 7ÜPAJ"l6žņ"ÁĐĄCĨĮÆŊĨKįՃE­â‰Õž\ŖKĢ.âŪrGĀČĪ8°Ŧéå”)S”Ŧ1¨Ų‘+ĘēŽ€#°j"`c>DƒeĐš ˔Y‹ĨiAšä•.ŋ!}úô‘ø‹”3g/ôčĩФš´‘’˛|éÚŠšthĶ\—A 9lpL"}&Ë}GĀpčx¤dmÖŦY)[jˆp ĄŒ×á8Ž@&›°¨ąUcōŦ"ųä‡yŌĻiš´i^.Z•I3)–~ø^:tč~ņĀäAđx‘`öėŲŌĢW¯ŗšĖ]T į˂’|ŲŽg;YĢS ]b`0´ÍŧVŪ}GĀpV$FØtlš;wŽ’ĩА×í8Ž@ļ:{^ąÜķæ,išW*Z–Iī5KdĩV{l!scĮŽÕØĮÖēukY¸pĄîOcc.ˤúd–f/ʗī§6•9…R’j"§îŅIVk×L-kžg-é xœ#āŦh”Ŧ͛7oÉzÁŠÖČëwG ŗøãßđėLųiJ‘´kQ&ƒ6.–õ;•Ļ_ˆÂĮļt/@Øx‘€—ēvíēÔō&ƒŪøYMdČčf2¯¨@6ęÚB.>dõ´UÍ ›w?GĀČEüõ§\ŧ*Ž“#ā(ɆáŋË'cJe^Xž\gĩ”lÔ%ĨäJŸ6+ßâdšbÖŖGyå•WÔ7ĸÍĮ9呃<ä"į{Õ˙į89ˆ€“ĩŧ(Ž’#āT šzüÃR>YžĘ“=ʖ˛‚ʼnXĮŽeûíˇ|Ōâé2␃<ä"Ÿ8wŽ€#āä*>Båę•qŊU{ŲiîÂ2ņKXō XlģAŠ´nQaK"aFÄHŗôhœã#yČE>õāŦ^ ø?GĀpr'k9r!\ GĀXOF ņá'§ÖZU8#^FĘâ­Ēt“Q!/_åS;GĀpr&šĒ˜ëå8Ģ6XšÆĪ(Qš¤ÂK咟ČUxá!ŗÃ^FˆZÆ,͝ĒüGō[\–§õP–2îGĀČ5jMÖ ‹ËÃōAąŒ˜P,f–ČüÂđĨq¯4׎¯ëãŦĤdÂŦRÕŋCËđRA%‚ha#‚Ed+‰ŦÅ yqČkäÎX'īŒ,’1Sg"MĶüŸ#ā8ˋ@AdVo—/]Ú5‘.í d›î-B¸ VbkLÖĻÍ-•'†ܷG,’ÂbggĩBŨ 9Ž@hĶbéą&‰°AĘâd-^‰5‹oäÎX aĪZ*V#RTiÄ´Y+šôĐNËlሖŗķjÉ˙`<đίZĻs°ĸŧ3$Í ščž#ā8Ž€#ā8Õ!0õהÜōĻȔ J%įíßQöé×ĒēbR%YÃ,÷mx‰ā‚‡Øx+ŌĩŊČ˙”'­Ü’V-°žÁpGĀp8‹Â~˙??“’™aŋ,+“wŸŪE_@°-gņü„3îÖ°õĶg? Ō‚kŅTäŧŊōĨuķúŗ¨ņƒĖEEEĩūš8ûWZ´hĄ?ÚŦJû?GĀpGĀprxÔŠRrŨKåú/mžŗo{]ÍDØɚĩŋ–ĘĮŖ‹´‰;öȓ5Û/yŲĀÚMŪLÂãiņ02ĸq‹/–ââbiŪŧâ- K3?Z§›”ÅoŨēĩF'•‹ëĪcōđãiņpR/ŋ8^ņ°ãˇl[‚Ū˛iŽß˛cM&†a<-öūˇl3ė’°qüŧ˙ųüš´ąŠ{Ķ„ dʔ)2kÖ,Y°`´iĶF:uę¤ŋWŧîēëJ˖-—á}Öʓ~ë•Ë×ŋˆ~]ãÔAm¤eķ‚eōŲ=™HÖ,ņŗ1Eéo§íÖ;?‘”Å/ž•ŏ§ÅÃIy l÷ÜsĖœ9S°´H“&MŌßUœ—––ĘjĢ­&§žzjšč%ÉÎĻ~\ų/ž?NĒ#Ûō%%%2nÜ8Ŋ čn˛ŋüōKyņÅe‹->8*.'iåĸqœ?ôĐC2vėX9öØcõG­3ÉÍTūįŸVÜģté"M›ŗjpIy“â4s$˙äɓå‡~ЎÛĢW/KV?›ōV )oR\ĻüIy“âŧ|qlâar%Å9~Ž_RßHę+IqŪŧ˙Ŧ,ũgęÔŠōŨwß)Yŗ~‹?ū|=Ə/'N”ŪŊ{ëüÍÃų€^ųŦUXרrļMđY .#YƒņM5\Ķđ ˇõWo˜_Ļ‚ A2vß}w%kC‡•3f(i# ‡nœ›Ī9?ÜléU Įŧ|üņĮ*‡ë¯ŋžėģīžrÔQGÉZk­•ޝ¯Ø÷u×]'īŋ˙ž2pęiÖŦ™|đÁJ8ĮŒ#>ú¨Ę!‡Rk5Ūzë-mįeã7–låūķŸ˙”—^zI~ų%ĐũāĀōškŽ‘#<˛Öēp ˙ô§?ÉĄ‡*7Ūxc­åxAGĀpG `.˙ęĢ¯Ô°T•>XŨ˜ĪˇÜrËe[Ÿĩ1‚•.Ão/–­ÃGs3ņ—*ÉÚôyä¨cXUĖ$ *%k“†•ŒŊgsæĖ‘3Î8CÖXc %7­ZĩR ifQÏēlȚĩcĀ€˛páBųúë¯åŽ;îPĀ!Qõí +¯ŧōŠôíÛWŽ;î8ĩ8Ŋųæ›Ú&Ķ 8†kĒW´lü<ŽĘ}ũõ׋öíÛËĨ—^Ē{ßxã %Á™ĘDËg:īŲŗ§œx≲ųæ›×¨M<•<üđÃŌŽ];ųÃūIŧĮ;Ž€#ā8 †ä ‹+€¸M7ŨTFŒąLũO>ōcTbIÔ\̰wmÍđŠ5Ū å×Zā4™æÚeȚ üYķ+ÉZĢĨ×iЁ&‚K:2ZŪę$Î,fŧ(pë­ˇĒ•í°ÃĶua,b€dâFŨŦ“ßôHĒßę°˛§Ÿ~ēlŗÍ62dČ9í´ĶR‚‰e×lĘgŌßęąô¸ŦO>ųDå˙å/ŅĨNō]vŲeé:õ$ö/*˒,Î|âŖį–ĪâŖa‹ŗëg:öŲgší7ŋų.)ŌI'%ĘĩēĖĘŒŸķDŅŋ•m˙Ŧœųņ2Äc üĪū#ģ랋KûVÎü¤ōÖŽh`qæ{ųĨûO&\ŋ  ķŊ˙x˙ÉĻ/øũĶ8îŦeļú!cå ˙‰'ž°KŦĢu›l˛‰†!räg˙+]ÖWđÛ~5%|΃Ÿė´9 Ÿ´¨K\Û$#GYå}ō Œ! ab īíˇßVâƒ?‡dEËrnåÍ7Yf9{ōÉ'å…^öv­šæšŌšsįô[ĸ:HÛÜšsõ`}˜— ŒčEå'kåáiX{p‹-Ō爪î}öŲGîŋ˙~ÍCúE]¤ËĨß|ķÆQ'˧,UN›6MÉÍÖ[o-0,v8dÅëgã!î‹/žX&xËĪ9DōĀ–2ŅÉäáŗÉėׯŸėŧķÎrà 7¤-`Qvn~´‹Ãį°3čXė´x+C˜'° N:įŪ{ī-īŧķŽæÅ&\īK.šDÍž`%‘ø›nē)-3š˛ v{ėą‡ŧûîģšgŌ¤Irå•WRĩbEų?ü0]Ūt2Ũ˛9ˇ)›2Ņ<^~é>Å&›sĮĪņ‹ŪĢŲô™hī?ŪrĄ˙°Ûķåȑ#bÆv*>aâŖ7Ę-ŖĨ ōJŪe„­2:í-cYŗ” ÂVĒ$k–õąDąi|øđáŅčĨÎûôé“VpŠ„X€:Í:ÆĄXË %wŨuWšqBĘ8ČkÄÎÄÄɚÅgōÉ˙Č#hōŽ;î(,ĩâxŖƒ ņė•3`aÅÄA截~Âė7ûíoĢ/6`áCŠũYIî€P‹!KŽŖGÖåFŪ‰;đÄÚˇŅF ˁĀũ÷ß_Úļm+áW'T>DÂÆRîŨwß­„ö”SNYJēZ,!ļøũöÛO—Aą°ņr:Ōs´rJ‡ëÖ­›`d!„™ä—Č‡Å‹!„0Ahx!ã˙ûŸžũ‰œ¸ž&bdē“/ęÖ_}ų÷ŋ˙-\p’+–CO8á CĘŅ™ēÖ[o=} Á–Œ‘LĢ“=fX[mm>ŠnË Ņ‡‚#‘ˇP)ģÃ;(AãeLĮ´ĶęŅ˙į8Ž€#āŦøœmÄdŲgŌøL}Ôí2GĀpl`{—9öbÛËfI‹6ŌÍEËY\ļ~ÆeĐlDķArØĪą%­ģFķĮĪ!_ČV5[öŒ1ōqXŧ<ĘF \\~R˜ ųXŽ ,˙aĄb Į[­X‘xÛŅ\’ŒšÄąž=r|Îbúôéē÷‹ō,-fë?üpŨ¸{įMJ–!–´750g+Īōņ"ûˇÚj+Ũāo/_đM8Ūå*XyŠāÜsĪÕ0{į°Äņ6gmVM,j|8—~ŪŧL€ã:fšË#¸ąŦîÎpGĀXQ0ņ>ŒkFķM'DÍâ)ŗ<ķW’5”ÄZÔŊ{÷ôg Lņl|ˆD f… )ƒ˜E­f\Îí 8¯‰ƒ„œ}öŲ‚eÍõ|’rÂ>6,Hš /ŧP_6lXMD'æ…x°ŒŸÔÂąÁ„5[Į6Hķyc”ÂQŽb”­<ËÛn‡( IDATņzîšįôEⰌōō?ã…Ãrzûíˇë~6^ā€ūņŦ5Yãm׋/žX—Ŋé;ŧlaĻbŦŗi:=ŋ€ĀuâÍ[wŽ€#ā8ŽĀŠB€=īŦpņVžŒÅõąxø ųíwĪãų˛ į…Ī@,yí3”`˛7KÕ%Î‘Q“ËĨ{į29w`Õ/dSYuy ŧõˆ5ŌˇĖ1‹›ĨĪō{Ø¤žúęĢWWUVéX™xŗąŽ–­ŌŲŗg ŋ)Ëæ".cy’Î‘Ē ëûyZ Íļ뙤–<–'!tĩÁ‡—,>˙üsšå–[dÛmˇÕˇ[iƒ]Ķh\_ŦÔ•”ÍëįŽ€#ā8Ž@C ĀįŊXibÎĖä˜į!j™–@o~ģ…Œ™Q }Öʗëí¨†æōø\Wį–ĩL gqÁŌ„u-Žhŧ|< ëŌō’Ÿh=fá‰ÆÕÅ9oĄrԅã%ûDF]ČڅĩĢ:Į÷Ū8ęÂqŨøđq&Įĩ†ČšsGĀpræ'ˆ ĖŖđŌ!kËcQŗļæYƒMÆß(5EŨo\°ÔlŸOi\-ķÖ8Ž€#āŦ*0­žQĘQŸ.§ČZ}6Ôeį,ƒēsGĀpęHütGõÅ<‡#ā8Ž€#ā8Ž@C ād­!Pö:GĀpG%NÖj œsGĀpG !ČjĪÚŦYŗÂĮ[ßi}ŧGĀpGĀpV fîÚYũ¯=eEÖøųŸ Oŧp•Îé8Ž€#ā8Ž@C pŪĶdÎ΋̭ƗAĢ…Č38Ž€#ā8Ž€#°âp˛ļâ°÷šGĀpG'kÕBäGĀpGĀXq8Y[qØ{͎€#ā8Ž€#āT‹€“ĩj!ō Ž€#ā8Ž€#āŦ8œŦ­8ėŊfGĀpGĀpĒEĀÉZĩyGĀpGĀpVNÖVö^ŗ#ā8Ž€#ā8Õ"ād­Zˆ<ƒ#ā8Ž€#ā8+Ŧ~Á`ÅŠˇ|5———Ë÷ß/ŖG~2ĢiĶĻ’JĨô@r^^žV@œ‡÷ߐ/5{É —ŋ횭eОŨäøs6•-šjđŽ€#āÔ5>/åūŧ›‹ķHŖ%kܯŊöšäįįËÁ,͛7¯ë{Îåå o?CÖ_Ŗä"˙UËT…'3\ ė´‹”…Ĩe)™6iž<õĐ09÷äˇå–û…ūŌho üŋ#ā48>/58äĩĒ0į‘š™ jÕėShäȑ˛xņbŲwß}ĨYŗfĒ–´ŠIœ‰ŧâđđ,>Ķ‹E Sų˛¨/­ķn.Î#Ō|PVV&Ç—Í6ÛL8ˇeÎü|:Jž†!&Äģ߸p˜Ŋ0%s Ëôē†Ë­~ÅčI-OŪ}ũŲuĪ‚]-X×ÂŋōōT°Ž [đ Kō¤īž=äéû?‘“Îę–S õÄás†CĀįĨ•gžÍÅy¤ÎÉÚÜšseŅĸE˛ÖZké]0eĘyōÉ'åÜsĪÍúވ—ųë_˙*gu–´oß>+Ü%%%ŌĨK)-eâ.G(ĘäÍ_%Q3aŅđÔŠS劧ž’sÎ9Į’ĢĖOĻhųĒ?ū¸ôéĶGļØb‹4Ŧ*?i¸$ų`ræ™g*&IéFP3•oŦéķKR˛0X×XīĖ×:üĘPųö‹ĄrÅų§Ëĩwu”ž[í¤× úč#íÃtĖá i\đ&Mš¨ĪyAxÉ jI2Ŋ*ÆD^yåŲc=ÂFķ@îĘ+–M)gé–đ‰'ÂWŽr‰‹§ĮÃs™bß\ĮŽĩŒČ ŲŲ”Ë‹‡ËĐ%QsņôU1 é* V20ąĒ… ĪkO> Ķ'OfÍ[ĸŧôä}˛ī1gI đKĄČ/*)—’°×-ŋeĶôõâé͝#āÔ /žøĸŦˇŪzērqķÍ7˃>X7‚#RØūōÉ'ŸDbęöôĄ‡’ˇŪzKđŗuĩ™—LöĒ2Ž?účŖōöÛoËŊ÷Ũ—^ ƒŅū\œGę˞Æūž_~ųE ˇjÕ /í¸)yÚ4hLœ81ũõ×Kŋ~ũäĐC•¯žú*Ÿéäˆ#Žˆau˛V\\ČRq˜xA‚ˆU<q¤*Ã|đė°Ãļ'ĻÛoŋ]6ÛtS9ūøãåģīžĶü˙ ËŖčKâÜyøá‡Ĩ˙ū˛Ī>ûČÄĐ~{ ΐpC8Pķk}HNš4IöÛo?mķŋB–˙Ž;îŊ÷ÚKļß~{šė˛ËŌú1(ėęŲqĮåÆnHįįæ˙ōķĪeĀ€˛õÖ[Ë;īŧ“nui}ÚÛ˜Ķ‹ƒuŦ°˜ĨĐrõ‹ãpØirûk?Ęm•Įn‡Ÿ,ie!_Jëڜĸr™>ŋD&Î L/5wŽ€#P?đ ĨŪŊ{ˏ?ū¨œvÚi˛ëŽģę8öČ#¤+e%ƒxæÆAc׊§ž*;í´“ôíÛW~ũõ×t~;áSM‡v˜eÛmˇ•—^zIĮPĘ@pŒá{…1—zzôč!Gu”Æ‘ö駟.%ãoû›æc‹Îĩ×^+C† Qƌ#īŋ˙žwÜqĢÖe3/ļˇ`<`ĖėąĮŌã:sņۅö€GŌ8Î֘=#emØyįl™+ŪeÁí¤“NŌ-9‡„¯%yä‘‘&˙a.úĮ?ū‘–lX)cÎ%íL2Å|Í|~˙ũ÷ËSO<Ą+i{îš§ÎoĖĢķæÍĶë„õgŸ-“'OÖō™æMæÅÂüÆ<6hˇŨ´o`Ô`%kP˜CYŠĶ•¤ ƒÍÛIíˇöÚŧZÛp.Î#ufYÛf›mäôĶO—]vŲE.žøb9˙üķõŗô^ČŲO?ũ$ŸrÁŪŗ'ÂÅŊā‚ ô‚pņ„éú˙ūī˙ôĻĒĒĮ_}õÕéũpUåã“XEŠŠ i[Ŧįj#QK Ÿm`÷šČ¸ņãd5ÖPRWˆA–a› ĖÛCŪ–›ošYŽēę*šķÎģdƌš6ū<™={Ž|ÚĶwķ̓eîešôŌËäŅpcŅšx@ūË/ŋŦ˜Ÿ0â˙øģÉŅG­°wī^JŌ?ėđ°1Atp9á„ßJ×5הŋ˙ũīrĘ)'ËîģīŠVŊ ¨|ÚūP ŠÜ,oŧņēÜrË-Ōŋ_-oõW´—œKÚ[ņČŌxÓËØô’Đ÷BëÃ#Y’a,đ\}Zã–5Âė[›_X.͊B™–uv[ž;GD€IœqņŽģîŌɜč?üáē<ĘÃú‰aõâSXX(×\s>ü¯žúę:Ņ“b4bÄ%IĢ%äa5#jøųįŸuœ|îšį”0VōMž/ŋüRŽ=öXųöÛo•„]yå•:? ÄĖܜ9sÂ÷[H׎]u~cëŒYÖØÍܕËf^üÛÁ˛qĪõ%šķÎ;OöÛw?)Z\¤dæŊ÷Ū—NĢ­ÆĢō°5¨b^‰Žķŋ e{nĘ~;\(ģo(K:†”÷Ū{OžyæYi×ļ­ˇ æË̝ž&SC;O˙Ũéá[¤3ɚ/ͧO×yĐäC´h?aΙĮŲÚ4iŌDaž‚lŋúęĢē•čЧū+'…køøK›6mÂįŗ^sįōĀČīV•ķæ™gžVæ>–ÛnŊMįą7ß|C¯ËË/ŊĖ(ZļŗũĸíĩyŧŽįĩ\œGę˞FGũķŸ˙,O?ũ´Ū0oØ-2áÁÚÖĢW/ŊāÄŗ‡‹îōË/×Mũ°wn’Ē\Īž=ĨmčlÕ9žŪ°öqsāëye8?Ÿpžä‡&ŋûîģ§ÃŧΝ;‡§Ŧ#ĨeĢ–røá‡Ë‡~ôä%…Š—( ß%—\"­[ˇŅ'3Hõ‘NĮâɑ§ĢōČ[{íu¤{÷îJʆĒé„'Mž¤ƒ ēNŸdũx˛ŧüō?É /Ī?Š[ŨíåéŽ@­Ā*i`%Á^:Û8 ˆČHV˖-u|ä™<Ė3ŽáO!'œp‚ZqSŗqXŠ+ąčA8Ė17! "Id>°m*–§:ŋ]ģvB˛qŲĖKŨ{tWBJģ!ŒŒëĖŦāœxâ`ųzØ×ēÍĮæ•č¸ßƒ˛#G(f”ĩyŨؗŨĄC{•÷úë¯ËUkĄžõ×_?ĖoÎsöq›GHãŽģîēa9ģ›ęáüˆ›={–ʇŧķÕW_Ĩma­nŪ¤~ä[{z÷îŖŗ?įįčüVPĐ$ŨĶĮÚW×á\œGę܄š`ß7ä vM5ŊščLė_øÍo~ŖÉ˜ŽíĻ´üĩõ17#ˈšÕk>r!ŠÜœlÖ'?a|ōX˜ō´Îˆ)#‡>_ņŨˇ$ũ÷?IŸ×Ęq++ o†Ábáâ2)hÕĖ tßpęž °ŅFĨ%bņakĖE]¤ã\:!œ` ûĪūŖ–/ ƒVÂÅØzĶM7éjûŲŖVŗ9(:ÆË0^2öFĮįxžå #ģĒy ˛Ę\Āטp6Žŗ§‹eQVo.ŧđB]™!ŨÆyĘrČ!Á‚õûtYę#Į÷F-Ė!›?ŦŧÍMøād8pŽ„ŖįŅ0ņ”ŗļA¨:蠊íEĄ~æOōsdš7­^k/Dš•(ˆ=/ęņ•žĻ`újŖÂŋúįâëī,‹ŪyįJZâéIa–íÂ'Ĩ[“‹íd¤ŅŠ8pŦÛc _{íĩ5ĖE'?ob%#‚„åF*ÚŲĸ–4 ĶÉöŪ{īt˜ ¨wėØą*3?O“XY^e-ŸÁ‰öņdĮZ;õđ,ƒ¤2kō‘ĮšČ&?ÎÚG{VĩpĢĻaĀmQ1¨˜Ų<ļÜíųāņŋ˂YSĨEëräÅ˙’ļÁ‚D%áå‚ŌđVp~~š´nŽĄīYĶ~ã˙úF€•ŦRXkX’dėcEÆö|ōÉ:cČã#¸Œ›ãĮ×%šlČZĻv o„ j˛1›ŧĢ…ĨFŒ ¸~øAøėK´8^c~0‡ÎŦAôĒsÕÍK,1˛ĘÂ~2ļ!›yÅVЈ'ŒA‹ ÎÆy+ fŧikeɏcŽ`Ž ?ûËØŽ„Ĩ’ũyÔÅjé:uRl9ūųį…ų2÷F–ÍŠČÏ#ƒ0ËĖčŽåcļs|Â6§fš{æĖ™iylI"Ž%fö´ >\6ێŦŊõ9Īåâ0‹Î[ԛT–=Ū”gž ŋ•Aį,ōÂuAԈÃ"vīŊ÷ę24m%9†4äpÎ\ca›wl~$Ėö ŗđąu‰Ĩb^ÆĢjŪ¤.öhCŲĶųŧâŠ+´Í\kļQgC¸\œGōÂ†Ī ķK%°VX<Ŧü’GįȨÉåŌˇ[sšéÄ5ĒÅČ6vŌĄ¸pŲ:>` ÁƒE/¯C"ŦžũqȤķĐÉL'Îq<œŪT(âŦíö”„NėŗrŲ2úqãÆé&TĖļ8ĢĪŦ‚ČÃzgOb–ÎÛ.X' Û9åãzXūlõY•ōßōY™ŦÕĨ„ͰŦ zK|:úķ˙žQ8å"M÷a [+ų(naqЌ4Wf~?Jn8n}ŧ ;ä˙G ^āÅ&tæ–čZˇn­õ0–C"ĸމ›üXؖĮaMâå,GČcŦßīĻWR=X˛ŗj2/‘—z™ ƒy<Đ <°úáL×ø<Ā|–Ėá`i_fȔ F SäqĪ—_“0s×+ŠmuåYiWôĨ,íáZgŌŋ:yĩIoČyäŧĻÉđŸKŸĩōåúc;*!5RíwuJSyjˆîGˆVTÕ9d*ÛN_•Ō¸ tl6÷ķD„Nfzļ‹m>=ŦXļ‹j/0°Üj2ņ-=ž?féķ/ēhų¨W°2đéØ6ü AĮ°Ī#ĩĐ*[%iãZ žôĸp!+HZxg$<˜„ķā‡qMš6‘fá¤ũ‚oBÚ$Ũ/ô"ú?G7 8æsqĸF<ģËKÔLžųVŋ…ÍĪOzMæ,Æčlį%Æ1ÆĘDįÂëŦŗNz^Č4îGįôLš7ūûß˙ęį9°Üņ&,/ °Ä͏žŅpĻú’äS.I˙läą"gåņmūĢMũ”¯JŋLéš8Ô)YŖášā¸ŲšĄŲÆž33×ÚÅ6ã¯[ĮĶkæ[iIŽļōL–—°ŽJg;˛f†]+U-zŽædH[„Ŧ•ķú돲NįŌĨ& Ãß}GĀh<@Tėûm ŅĒlįĨ¤q-Ē_]¤ŗŊf`ØzÃŌ/KžXrĖՅ|“…ŋ2ĘËÅy¤Q’5:{Ûxqīģą/ +[ô‰-ڙüŧņ вux›“æk„LIYeķĸįyá폂üđ Åe2môųūŨ!˛pŌ(9&ė—‰^•ÅŨsF„ķßMk(—kķVKŗ\˛Üčn š84J˛“Į”ĘË |÷/T{g\ŌũlY°Ä2pú }'ū4¸l qG {|^ĘĢ•5g}Î#’ŦqĄũs|řW°ųŗ­]¯ŦÁõŽDŲ´ģføÅžļ¨ÕÎ.ÕXÕđyŠņö€úžG-YŖK/đ2Û´Øx슎ly ¯8I[ŊŦ#ādƒ€ĪKŲ ´ræŠĪy¤Q“5ģÜõ  Õáž#ā8Ž€#->/e‹”įė?†æx9Ž€#ā8Ž€#ā48NÖr¯ĐpGĀpėp˛–=VžĶpGĀpGĀÉZƒCî:Ž€#ā8Ž€#=uö‚Áŋ˙ũīėkõœŽ€#ā8Ž€#ā4bN?ũô:k]‘5~ }ˇŨvĢ3Å\#ā8Ž€#ā8š‚Āøņãõ[œ|Œorâķs–|?Į÷\ˏNøá‡uĒļ/ƒÖ)œ.ĖpGĀpēE`…ĩ>ú¨n[Q´†Ž/I˜öō¸šļĄĄë[žļe*ģŧmČ$×ãÆ„@iiŠ6Įüēh›É2ŋ.dē G= NÖ~ųå9ëŦŗj¯q¤dIII$”|Zõ=ųä“rä‘GĘ… —ФǴhæ7ŪXžúęĢh”ž×´ Ë[ß2 $D4ĖšåQ /ŧPûō‚ ˛Â#›ū™$¨ļå’dy\ÕđSiŗgĪ–=zČčŅŖ—É|ŌI'ÉĪ?˙ŧL|UÕÉŦĒŦ§9Ž@Ũ#ĐādíĻ›n’sĪ=wš[‚ÕeË-ˇŦVN]ÔˇĪ>ûȈ#ÉZUiQ厸â Ų`ƒ ĸQēŽ]Ķ6,O}KU^E 1`VEķVé$~+wÔ¨Q’ YËö‹ZÛrq9΁uÖYG:vė(]ēt‘5ÖX#]høđárđÁËĉeđāÁōģßũ.fŗūũûk_°°eČ$ĶŌŨw†E AÉO¯ŊöšsĖ1éV~öŲg˛Ã;HįΝe“M6‘˙ũīšvë­ˇJĪž=åŅG•wŪYvÜqGyüņĮ5 âtõÕW  +¯ŧRįž{.-ĶNâõËf›m&Ŋ{÷Ö'MˆƒÜŋūõ/-ÂR#/J0āíŊ÷Ū:Š‘ĐŽ];iŲ˛ĨŧōĘ+úú<ņÄZĻĒ42 :TŸxҎ°°PËđ¯ļm¨m}ĻĮ%—\ĸ¤qĢ­ļ’¤ĨՕ3H–…C9D1>ė°Ã4ŧīžûjĢæöÛo/­Zĩ’Í7ß\öÜsOųūûī5mȐ!˛×^{ ũ㠃Ōøęūeęģ”Ë$“ë@ŋîÛˇ¯,Z´H°z ÷UW]UeuŧmMšiĶĻɏ?ū(XjMĪĒî„BÎ<đ@éׯŸÜ{īŊŌŧyķôī fęķÕõĪaÆé}šÖZkŠ^O?ũ´ę_]šĒ0Ģ€Z$ÖGŸËË.ģl™ã­ˇŪR 3]÷ĒtÉöŪĖÁmˇŨĻ×ķ¯ũĢ´oß>íž{î‘]vŲEŪxã yûíˇåŌK/M§vÚi2hĐ ™;wޜrĘ)˛ŨvÛĨĶ8É$sŠLp†C`ŪŧyŠčņë¯ŋĻ„š>}zꤛ~HmwáwŠĶn› K€Ua0/ATí„”úį?˙™Î&žT0ˇ§zčĄÔâŋSaĀK…§ÃT˜@4O˜\R/ŋüręÁL­ŊöÚŠīžû.LũŠ@°RhĨîēë.=Ū}÷Ũ´\;‰×G| lŠîŨģ§vÚi§TXSarI…'P-& Ô×_*//OŨ~ûíŠŗĪ>ÛDĨ‚,ĩõÖ[k™˙ū÷ŋŠnŨēĨÂĀ­éUĨ‘aūüųŠ@đRa’MË[ž6ÔĻ>*¯§éM…'mÅ_U˙dŒ$-–äUod’úæ›oĒŧ7ĢÃ,Ũ˜::Š>ŪĶą‡ņ'z|ūųįĒuĻë^•.ĖæŪŦ),_~ųĨöûŖ>:=ĻFe<˙üķŠļmÛjdĖsį8U#0nÜ8?áGŒÁđ"¸KØöĄc!ãx°Rkœ¨:ŪD:ü žßB.ķcl”—q^gŸî¨Ž^bUÂJöÅ_¤ŗbeÃĘuüņĮkOzGu”Z­°‚đ*ė5×\ŖV.2L™2EyäcIņ†nLß1IĒŧn‹ÜûîģO­ęã‡uŅņĖ3ĪÔ×qŖ–0ō„‰U¨ŲŲōđà OŗÕĨĩiĶF 4ŸũÚRÛ6ÔĻ>ĘđŠ1m ¤WqŽ>i“ž2cÆuĨ/<öØcj9{æ™gäĐC°äZÛĖ~-)â°TáŅ‘SO=U-kô;ú@uŽēž[•Lę7ŠZ3ļŨv[ "ÕU§éŅ>Dģĸ.ĶŊˆ§`ũ˛ļßqĮ‚, IZMŸOLJũnČ`ē,ķqÄVMĸ~Õa–.;A‡`šZæO›ZOĻ4ÄÔuŸ˜5k–ž(IJzô˜0a‚j]ÕuΤ‹5׎KŌŊiyj⇠éĐĄƒ\|ņÅÂ2íŨwߝ.ŪžÉĪâIDATĸE }Ødų“{fŊõÖK§ų‰#āä qS[},ƒb ûŅR,ƒD]Ø3”jŨēĩ.m %–Wp,÷…ˇ0Sa€La~d‰áĨ—^Ō4ū…‰GM‘œ9R—a8ĪTi¸°ßG—C+B˙'OžŦËJ˜1Ãä –]Ǟ<čöÚŠy2Xøt9ņæ›oÖäĒŌŦü€–ZĩøÚ´Ąļõ…ˇpS/ŧđ‚U ›ˆĶį3,ŗēäö ĨÛÆŌũĖ–Ēč큜Ĩ~úé'Í,)Ž)“6KϘ§ĢrÕõŨĒd˛<Œ&÷Z°kŋĘf4ė3Ōåkô –áĨ–A3Ũ+˜ęŲj,ty?LØē J{ĢëķԓÔ?šÁsėØądQšīŊ÷^ŠeVsIåĒÃĖĘÖĩßP}ŊĢēî¤'éB|U÷&éĩqŒšluû€SÁ ™ Öãڈņ2Ž€#P‰ĀŠ\•† káŀTX~KŧāaI&~ų@'¯°é}Š=mL@aC|jŖ6JõęÕ+uũõ×+‘2Aė÷aŸR°’)ą˛}k™ęc˛îͧîWB^X‚Õ=h&/<ųę>§5×\3– RÁúĄ~ؔ OĸаT _XI|ōÉĒKUiČ |ĩĘĐęŒϚļĄļõ}ōÉ'ÚęŽTXŽJ…Ĩ—ÔŸ˙ügm~cŒ†„¯FkģØ{uá…Ŋváå‚ÔĻ›nĒd‚Šã:ŗŋ-ŧ9§{ Ò[´hÆķĒún&™ay6^Ņ~Č>Ļk¯Ŋ6–0SÁ ˜ąKˏJĐÂōm*XŠ•HąWÕŊŦŒzĐ¯8āŊg Z.SŸ×Äđ/S˙|ꊧ+ö@"7X#u˙guåĒÂĖĘÖĩߐ}"Ķuˇ6%éRŨŊiekęŋųæ›JęƒÅ7ļTûRSųžßXÕX‘d-˛5øđuų/LdrÉŖsdÔäréÛ­šÜtâ’WÂŖųíüĶO?ÍøsSėÚu×]…×Á3š`eXęM&ōņÆâ̝žĒoŠf*&<áˆîáÉĻžLōx;*X t‰*)O°ŧh4oÔÅ]UiņŧŅpmÛPÛúĸuÛycĀĖÚ,>‰ûoX1cÆRŸ7  Ëz\ķ°é^—FŖ{ÃLfU~Rß]^™™ęãū´eČhžęîÚîu]‹–ãŧē>ŸÔ?Mx˛|Į˛ZÜUU. ŗxųē 7TŸČæēgŌĨ.Ûk˛Đg=ö?ūØĸÜwZ"ĀÖļ)dûsSėIŽÎ÷Ā4ūķbéŗVž\lGŨŋĘßĻÔ d­:e“ŌŲġhŲøŦuö!Ũ¤ē<ÎX™đ{eežzõĢ;$ũj|ĒÆ#ā,+’Ŧ5ØÛ 5…ˆÍŌaO˜ã[hD€˙'žxbÆ*Ãį6ôe”Œ0Áī•{%̊ˇ„¨­dÍÕuČY˛ö” ‡;G`E Ā[Žá;T+ĸę×é÷J!ķŽ€#āŦT4ا;V*T\YGĀpGĀpr'k9r!\ GĀpGĀp’p˛–„ŠĮ9Ž€#ā8Ž€##8Yˑ áj8Ž€#ā8Ž€#„€“ĩ$T<ÎpGĀpAĀÉZŽ\WÃpGĀp$œŦ%ĄâqŽ€#ā8Ž€#āäNÖräB¸Ž€#ā8Ž€#ā$!ād- sGĀpG Gp˛–#ÂÕpGĀpG 'kI¨xœ#ā8Ž€#ā89‚€“ĩšކ#ā8Ž€#ā8I8YKBÅãGĀpGĀČœŦåȅp5GĀpGĀHBĀÉZ*į8Ž€#ā8Ž@Ž ād-G.„Ģá8Ž€#ā8Ž@N֒Pņ8GĀpGĀpr'k9r!\ GĀpGĀp’p˛–„ŠĮ9Ž€#ā8Ž€##8Yˑ áj8Ž€#ā8Ž€#„€“ĩ$T<ÎpGĀpAĀÉZŽ\WÃpGĀp$œŦ%ĄâqŽ€#ā8Ž€#āäNÖräB¸Ž€#ā8Ž€#ā$!ād- sGĀpG Gp˛–#ÂÕpGĀpG 'kI¨xœ#ā8Ž€#ā89‚€“ĩšކ#ā8Ž€#ā8I8YKBÅãGĀpGĀČœŦåȅp5GĀpGĀHBĀÉZ*į8Ž€#ā8Ž@Ž ād-G.„Ģá8Ž€#ā8Ž@N֒Pņ8GĀpGĀpr'k9r!\ GĀpGĀp’p˛–„ŠĮ9Ž€#ā8Ž€##8Yˑ áj8Ž€#ā8Ž€#„€“ĩ$T<ÎpGĀpAĀÉZŽ\WÃpGĀp$œŦ%ĄâqŽ€#ā8Ž€#āäNÖräB¸Ž€#ā8Ž€#ā$!ād- sGĀpG Gp˛–#ÂÕpGĀpG 'kI¨xœ#ā8Ž€#ā89‚€“ĩšކ#ā8Ž€#ā8I8YKBÅãGĀpūŋŊķ€ą˛Úöøbf: "ęEŊ hÄy‚ ö\…g‰å=5ņŲ[Œ‰Ä5ęŗĮKŽ{‰%zí5–g÷ŠQcīČ{jėXШ…†ōæˇkXœŲgæ€gf3˙œųöY{íöûžáûŗöūž*! ąV%'BÁ‰ĩŲD@D@D@D JHŦUɉĐ0D@D@D@D G@b-GE6¨kUr"4 ȐXËQ‘MD@D@D@Ē„€ÄZ•œ CD@D@D@r$ÖrTd*! ąV%'BÁ‰ĩŲD@D@D@D JÔUr“'OŽdsjKD@D@D@ē=Š‰ĩņãĮw{˜ " " " •& eĐJU{" " " "PAk„ŠĻD@D@D@D Ō$Ö*MT퉀ˆ€ˆ€ˆ@ HŦUϚJXĢ4Qĩ'" " " $ ąVA˜jJD@D@D@*M@b­ŌD՞ˆ€ˆ€ˆ€T€ÄZaĒ)¨4˛^Š;mÚ4ûĮ?ūYéžÕžˆ€ˆ€ˆ€t[ĶvjšûĐ6į_–X4hMÜ~ĸõčŅcš—,YŌÂļœCĶ÷ņc,ĪŲb9y÷ņc,ĪŲbšę‹Ÿ_#~Œ×GÎËuũčúņkďņúČŲbšŽ]?~ø1^9[,×õĶ=ޟĪ^`3~->ķ-ŋ—%Öjkk­_ŋ~-kK9^po‘Uũļ…o hÁ ~âWüŸŠpy´™ÕõŖëG×ĪōÁˆ6i‚ƒ~ôûŗ˛ŋ?čĢrR™b­Æ Ú‹ĨįũˆƒįũmĨō9ߜMõ—ņ,rŦrļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜ĪųæląNĖį|sļX'æsž9[Ŧķ9ߜ-։ųœoÎëÄ|Î7g‹ub>᛺Å:1ŸķÍŲb˜¯­mäk›Š,ąVSSk}úôIKžÅƒ W”^ÆŅeūŨķŅ_õÅ/^~čú)ˆ<<yé÷Gŋ?ņzđkDŋ?úũņt˙-č˙Ũˆŋ/Έcg闚šÅMŊ/b­Ļ˛Ä-øũmۃ—ųąØ^\§”_)ģę/;Å,âwņ[~9#ō(•ŋe×Vdš´–eǝëëÁSŧJåņõ2?Ē~@äQ*/~Ģūõã×{ŠŖ^ŨQŠŒė" " " "P$֊NÂ{īŊgˇŨv›544•tÜ×ųķį¯K™7o۟ęô÷ß7æ3cƌ?ÕNWŽüÃ?$F .\áiŠī #S• Pö2čJ´]‘*Ŧ#īžûîÍm 6ĖvØa;âˆ#šm•ĖL:Õ|đAÛwß}Ķ>=ÚF4õîŨģ’Ũdۚ5k–]ũõöōË/[]]566ÚÖ[omĮŧ­ąÆŲ:ÅFD&û I_~ųĨyæ™éŗãŽ;ģVÅ÷SO=Õ>ūøãæąŦĩÖZ6vėX;ōČ#māÍööĘŧđ vĪ=÷Ø}÷Ũg̝žz›ŨŦj|ۜD@D@ĒžĀ*YĢŠŠąŊöÚËnŧņF[ũõíūûžúĒ]āŌWÜpĐAŲW\Ņ.}7zŅEŲoŧa—^zŠ=˙üķvõÕW۔)SėüķΎŋ؄Øzēä’K’Čq¯Í6ÛĖ{ė1ÛnģíÜTuGx<ØxāģéĻ›l×]wĩgžyÆÎ9᜿SÚsМ_­ļÚjmvŗ*ōmsRr¨zUYs‚Dļ6Ø`ƒizķÍ7möėŲŠˆãĩ×^kīŧķŽõīßߎ>úhķ(‚‡1KŠDĻnŊõÖ$ÄÎ>ûė}:ëŦŗė×_ĩSN9ÅöÛoŋ$Ŋ?ŽwÜq‡Íœ9ĶŪzë-;î¸ãR?,}!ĸ>üđÃÔÖ!‡Ōĸ^lŖÜ<ŅĨ>úČļß~{Û|ķÍS4o“M6IsAŧŧũöÛ6nܸ$ƈ,NŸ>= š &‚ƒú=ĸqD/ŧđBcŦŋI“&Ĩēß~û­]wŨuöŲgŸ%Vģíļ›x⁆`ēøâ‹“?} œÖ[o=;ãŒ3Œ"ˇ×œ ũ#–ˆl9Ōžūúk{å•WcXiä\üöÛo‰ Ņ8Ūû÷É'ŸØíˇßnŸ~úiú~îšįÚÆolsæĖą[nš%ņ *ēÕV[Ĩčâ#Ų˙ė ãÛrË-›ŖhDĶøŽŨ#‰Œõ駟Nö‰'13f˘ÄÁƒuÖY' 7ü,Xōįw^§D(÷ŲgģķÎ;튧žJC‡Q<Äː˜Ō.ŠŊæœ_úƒķĀ|›đfΞoīōË/Oĸ•sĖŧG}4ÕBĀũüķĪöđÃ>Ė™ÄR2ŅĘūC„8‰_įwØa‡ŲēëŽÛlķČĨ—ÃŊŖøĻÁ釈€ˆ@—'Ā}ˆ­V+šVąFôa¨ "F4†ôŌK/ĨˆČ“O>™ĘØSD‰H7ī_|ŅŽēęĒå–š|H1Ÿ á‡īũęÕĢWsũáMâ:ŒáŨwßĩĄCÛū›^ĄÉ’YÄ ÉįUʑž‰ĻíąĮvÔQGĨŊmŒŖžž>}¨O4ĖߊėķD #j´öÚkÛŪ{īm={ö4ĸ”žÖ\sÍMc)’zŋüōK*j¯9{ŋÅG‰søúë¯'ąÉ~>Î?˙áZ iũņĮSԌrq3Æ 7Ü01b‰uÔ¨Qɟ9ņ!ˇË.쨐!CZœĘ;šoœ~ˆ€ˆ€tiŦú Ô¸w¯hZeÄQ"FˆßC†Āa“¨°„wúé§ĸƒÄ’Ņ"D,o}ķÍ7Í|\-ZÔöËč¨äūˆ–]i,^vŲeÍmū™Ėˆ#Ru–;cby—äåä O/ē¨aų7&k´Á!ƒ ^Ë8mz”Éëˇ×œŊũâŖ HÄQPÆÍ9ĮĮsLŠ RįØcMBkā„N°gŸ}6͍ņ3O1×âųĐķvÅũcīHžÅũëģˆ€ˆ@×"€P{衇’P‹÷ŨrgŲĒXkē§UMbrDI=ôĐ´‰Ĩ@nēėG"ēž§wŪ9íYB„jüüķĪĶž,–@!ß}÷]š‘'–UŲķ„đj-!ĘXŽsaD›ØXvcOO\V"ąŦËąÆr$‰Ōk¯Ŋ–ĸDqš•%QĘäɓ“¨đ2ÆE„‰˛â„ØcO‘*öųqä!,9ļ•ÚkÎŪ/į–åĮ÷ß?‰ß>ø íŨÛhŖl‹-ļHnœ;–zˇŲf›9ÄČ>=žŗÜÍ9‡ ×~°cššļY*Š”HsŸŽæëũę(" "Đõ°ī; 5ô‰§ÅK˙āĶŌÅB7ˇ8ļú€A˙Ūĩ6sîŌÖZTīX7Y^ŠņÜsĪĨ'CŲģÆk-ž' O˛ÄÅR%"‹ųN;í”mėšįžIlņZ ‘ŊĘ͆}kėb{ŖØ ÅrK¤ˆ>6īW"1.žú$zxÚi§K¯Ė 1rŌI'-×sēā‚ ’ !šČū*˗< Á~,ĘYæôDԌöŲ{ĮCDŽx%ŠīįrŋÜąŊæė}ņĮᇞÎŅ3zā!"bˆLĸĨœ¤ā\"NYĘDhŗäÍÜ6ŨtSã\‘N<ņÄ´‘‡,đįĄ–ÂËM͡ÜqÉOD@D`Õ"@…}Öh ‚žg{iƜ‚žÜŋÕØ™õhО,§Ä 4ČÍüöÉŗí‘w­ĻIŗŨ9i õŠīœPû”¸ō!ą—‰ 0^„ e|'†ČÁŽßü‘næÜ´ŲhO"īKeøqŗ§Œ9#pø¸ōŗßYZŖŒži—÷€Q¯x™-u˛’? ã ŌÄ;Įč>'öĒņc‚ ķ%1.X9cî$Ž”sNŲĪFû\<ĒŪū}tŊXSĸ-U^D@D@D@œ@Â%é!MöūŗĨĖ͏á mŌ„žI¨ņûŅk¤6ÅNDÖxr'‰Žš`{ôŊEö?SØÜžLņõlj—÷ƒ ę×#ŊâƒúJ" " " "ĐŨ đžÚé3›ŋül-ÛįßæÛ„ŋÕ5 5ŪŌĀÛ xĨVąPŖN‹ČFĚ/…]ãÕ6>„đ&ZgS§÷lę|™hŖž’ˆ€ˆ€ˆ€ˆ@KŊjÛØõm×QļÎāúô:*"j5Ē•ÚˇVōYQ* đPzDŲø āūļŽŲFCØ/ŋ7Ø˙ūXgŋÍéa3jlöŧšå”cËaĘ"" " " ŨƒáŦžõKlh˙EļÁE6rčbëכ—ë×'Æ5iĨ"jNǤXÃ! 6„Z´­UÛØô¨éĸ&WøƒØ^žœôCD@D@D@ē9”ą­ļļđWth5>ÄüĄ‚ÖPeō#žĸXŖ˙NÃtƞļuÃGĸ J" " " Ũ•z‰u“k'*UķzÅܲbÍ;(ląS˙3LkÅHõ]D@D@D ģ@3šnōme…[mķÃqųŗ”PƒcIąF!Ŗ`ķNéĖEšīeÃOQ5¨)‰€ˆ€ˆ€twh&˙ Ɗ?^'ō­ĨVŚ7ā‚ÍĻCgņØZG*îDĀuSîčÚjøĩ)Öpō†ĸh#ī)æ[ŗy™Ž" " " "Đ ¸fōšųw?Ûũ{kĮ˛Äš7PÜQ[v/×QD@D@D@ē;R:Ē-.+$Öbc+ÛalCyÖ ū:{ë>*č$k^ŨŠ€ˆ€ˆ€ˆ@9$ÖĘĄ$č$k^ŨŠ€ˆ€ˆ€ˆ@9$ÖĘĄ$č$k^ŨŠ€ˆ€ˆ€ˆ@9$ÖĘĄ$č$k^ŨŠ€ˆ€ˆ€ˆ@9ūp˛O‡Ū$IENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Update to....workflow/Contents/document.wflow000066400000000000000000000160721445560650400321170ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx updateto --vcs=svn "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID 2F01885A-5924-4602-9D34-AAD298520867 Keywords Shell Script Command Run Unix OutputUUID B27AE539-FF4D-4DBF-B8E2-8886B412CA83 UUID 9AAD48A9-A2C5-4613-89E1-E052F8BDF569 UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{212, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/services/SVN Update.workflow/000077500000000000000000000000001445560650400246015ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Update.workflow/Contents/000077500000000000000000000000001445560650400263765ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Update.workflow/Contents/Info.plist000066400000000000000000000011711445560650400303460ustar00rootroot00000000000000 NSServices NSMenuItem default SVN Update NSMessage runWorkflowAsService NSRequiredContext NSApplicationIdentifier com.apple.finder NSSendFileTypes public.folder rabbitvcs-0.19/clients/osx_finder/services/SVN Update.workflow/Contents/QuickLook/000077500000000000000000000000001445560650400302775ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/services/SVN Update.workflow/Contents/QuickLook/Thumbnail.png000066400000000000000000001074061445560650400327400ustar00rootroot00000000000000‰PNG  IHDRkĄ_ëUiCCPICC ProfilexÕYy8U]Û_ûĖŽs Į<ķ,ķ˜yžįšpĖķŒáˆ‚^'øÛ9ūeŗæíŖ÷—đ 00ūmƒ DīöÅĪ9_P˜éîāžŠĀ"á:H3  ôūĒ%/ ĀšXX‚ĀŒCāap›0“˙˛Ķũ‰Á¯v~pģ÷H^°mĖß}ūî ÷ųĮgđ†ņ9îcWˇ;ē(÷€Ôúücąëī×h¤kĨßIoũJ%‹R@é ÔQ(@F1ŖØ$JĨŒŌFiĸÔ` 0¯aĪ~Ƹë?¤Ņ7ölXŧǃ?ŦŨũīž´Āá—uĀßŋ˙c `hšeųĪˆö9ŋ膅ĮGøųG“ĩá7×G‚lę%%A–•–‘ŲU˙ŋ)ģkÖīÁŽÚüZ‹ æádūj¨-€E˙# ˜ öŧ˙Č:āđ fÔ+&2öˇ?Ôî ¯„´p„˛nĀDāį, áĩQ č` ė€3pƒãĮŽÁHA HŲā$8Š@)¸Ē@h- tƒ{`Œ€ 0fÁ°VĀ:؄  !ˆ â!qHR†4 }Č ˛œ!Č …b Dč” åAEPT ]‡Ú nč4 MBsĐ;č ôDŒ.„bBĄ0EØ!ö#üˆDââ,ĸqҌčF &ŗˆ%ÄW$@R#™‘ŧHI¤2Ri‰tAú"#‘‡YČd9˛ŲŽėGŽ!g‘ËČī( ŠEFIÂqj„˛GyĄ"P‡P9¨"TĒՋCÍĄVP?ŅD4'Z­Š6F;ĄũĐqčttú ē Ũ‡ž@ŋA¯c0fŒ0F c„qÆbbr0%˜Lf3ųŠÅbŲ°âXuŦ%–‚ÆĻcĪa¯bī`cß`7pÔ8œ,Îį‚ ÅĨâ p5¸NÜcÜ[Ü&• •*•%•7Uü4~•šššZ…Úš:€ú0õYękÔ÷Šį¨ŋH1‚.a!†p‚PIč"LV‰DĸQ‹čBŒ&ž Vī_7hh¤hŒiŧi’iŠišiĶ|¤Ĩĸ¤ÕĻuŖM - ŊA;LģLGE'D§KGĄ;DWL×F÷”î+=Ŋ Ŋ%}}} ũúE–$DŌ'y“ŌH—HwIķ H~]/†#  } o1ŒÂŒÆŒŒŲŒuŒCŒ+L$&y&ĻLÅLˇ™f™‘ĖBĖÆĖÁĖšĖĖO˜°pąhŗø°d˛ÔŗÆžĮÖaŸCĩÃ7G=Į<ĮY§=NINÎėÎέ.X—+._]õ]ΏžŲ§°/}ߓũÂûėāÆîėv۝֝â~ÃíáčQãąEऔSžz{ž÷\ņŌõ*ôZōÖōÎ÷~įŖî“įķÖWŨ7ĪwŅOŨī´ß;M˙˙åŨ€ĸ€ĪFĨß‚,ƒ*ƒv‚ƒBp!!mĄ¤Đ ĐŪ0î°aŖáâáéáŗĒg"V"M#¯DAQûŖZŖáäp0F$æhĖ\ŦFlqėFœC܍ôB ƋÅgÆŋM0H¸|uĐë`O"obJâ\’vRŲ!čįĄždūä´ä7‡ WĨāS‚RĨJ§æĨŽq<ŌžÆ•v8mū¨áŅÚtšôČô§jĨĮPĮŽ eĘežËü™åõ0[:ģ {+Į+įáq™ãgīœđ=1”Ģ˜{á$ædčÉ'§4OUåŅį%ä͟6?ŨœOÎĪĘ_;ã~æA|Ai!ž0ĻpöŦŲŲÖsįNžÛ*ō/š(Ö)n8Īy>ķüˇī’Į´.ԗr•f—ū¸pņY™aYsšPyÁ%ĖĨØK ũ—•/W_aŋ’}eģ2´rļĘĻǎZŠē熺&ˇQSûîęžĢ#uzu­õ’õe Ė Ų×Āĩ˜kī¯{\ŌhÚØsCųFũMÁ›į›š˛šĄæøæ•˙–ŲVįÖŅ6“ļžvĩöĻ[Rˇ*;x;Šo3ŨÎíÄwĻuîÜI¸ķĩ+ŧkšÛ¯{žĮŊgęŽĶŨņ^ëŪĄ>Ķžû÷ îŨí×îŋs_ũ~ĮÕm•ļ (4* 6=RxÔ4¤8Ô<Ŧ4Ü:ĸ2Ō>ēw´ķąæãî1Ŋą{ãÆãŖOėŸ<{ēīéė3īg‹“Á“ŸŸĮ>ߜ:<žÎzA÷ĸā%įËōŅ™†YÅŲÛszsƒ¯l_MÍ{Í/ŊŽzŊõ&m¸Pđ–įmõĸėbĮ;ƒw#ī]ßŋY _Ú\N˙@˙áüG‘7?i}\qZyķ9ōķǜUļÕĘ5ųĩž¯V__އŦo~ËÚ`Û¨úŽüŊ˙‡ãˇ›q[Ø­ŗÛĸÛí?MNī„ėė„S")ŋr$\#|}øR sg˜;Œ€īúÍ)~YĀt‚m`Œ„ķ_!`į§×Ā7HJƒ&jˆjxŊ€AuŖŨ0Ķ‚=„ŗ âĸÚĀĪP?& Ō<ĸ§["á$͙R˜¯˛ŧ`ceˇāČæâĻį1'įđNđķ ø Ö}Qģ+AÔ—JÜĶ%Ŋ-k('Uგ ˛ĩJ˛jŊڜ:Ŗ†ŧĻ•V’vĩN‡îŪŠĩ!‹¯ą¤‰’ŠŽ™ĩšŗ…ŸeĒÕ9ë:x%xiˇâ™D•]l\#ö%ī?áVåŪé1J™õüâō!ų øÉûëX:y„Ä…&†e„gEäEæFŒ>“›WxātüɄôƒÉ‰1I҇“)‡R SÕČ§IåN§MßÉX=ļœ95Ũ–SwŧųÄėI–S†yņ§KōĪėJŸu;—VTWüĒ„xAŽÔãbNYSųdâ˛ČķʘĒãÕ 5CĩęhëeLŽy^oĖŊQuŗ¯i´yąågm;ī-éÛæwŧģÂēôš›×{ž¯ö^KĪũ;†N , ž~46ty8fD”4:ũ¸aėā¸ÁibæIũ̓ĪL&Ų&_?oĘ˜ļ{!đbķe˙Ė…Ųˆ9ŊW,¯>Í÷ž.}“°`˙Vf‘~ņĮģ'ī;–Ē—OHųû)hÅ˙sĀ— Õøĩœ¯ÕëĪ7ž{ūŨ ūéļŗŗ'0{f‚`/p‡@5˜‚3;Kč4…FœBü@† ßŖbŅt5Æ‹Įā Š‚ņ&Ô{"DfZ.: z5’-CcS%ķ}–u62ģGgW3÷ 2¯Ÿ+Ļ@›āŧ0^DZÔ\,Dü´Ä-ÉįR_ĨeTdåÂå‹šģ•ž)oŠ2¨ņī•S7ŌđԌƒŖáŒN™n•Ū ũ;ƒ†SF‹ÆĢ&ßMˇĖļ-P–´VŦÖÜ6ŧļ"vōöĘŠŽN&ÎĻ.&Žvû÷[šŲ¸ÛxØQ\=ŧėŊ},}ÍüLüu4Ղä‚ÅBøC9ØÃIt‘Ø(DÔVôZĖĮØˇq3&ã'<FĖĪ2ČöÉÉ>~íÄpî‡Sø<…ĶųQgŠ ē įĪĄŠÄ‹-ÎĮ””^č/ũXÆXŽrÉ­"įr˕é*DĩTGmÎÕļē…ēk×Ŗ/ܸųŖyO‹_kA[ī-¨Cęv@g靑nLöŨ”ŪŽžĩ~ūûĘö>ÔPT|¤8¤8Ŧ8"3*öX|Lxœ{‚ũ ãSÂ3ĒIhrûų§Š÷Ķī^ŧ{97ķfvfnîÕėü‹×ķo>,lŧŨy‡{Īž$ĩŦũÁöcø§Ŧ•ĒĪ_>¯ņ|5[OøVˇąđƒs˙Véöâß_ķô0ߒæ0ˎÁGˆr…ķö„â b )ƒĖGnŖBP¯ŅžčEL8f›‹Æ=  Åŗā{¨Ŗ „%b=M4­œGŽŅWŦ…™ Ļ9æ>–JÖ ļ@v;]N!.,×:÷žAr#o1_:¨€ĩ ĻŸ0ZxCdB´YŦDü°„줁YjkĪ3éz™#˛.rbōXų§ W(™+ +ī¨L¨VŠ%ėĩP×@iLi^Ķ:ĻíŖŖ¤K¯ģĸ7¨Ų ŅĐÕHŘɸ“É}Ķ2ŗxs[ KŦå+Ģë›h[c;Aģûg×3ŧœ]č\\Û÷åî÷sĶvgw˙čŅM)ô ķŌ÷æô^õšī[ėė¯ĀīõŊAį‚cC BšC×á}Ŋ>âh¤W”f4o ˆ™í‰+?ī P,‘>q#éåĄŪäēÃįSޤFqKŗ>Ē‘.™Á{Œ!ų#ëSö|ÎŗãŖpüôŸė<Ք×pē1ŋáĖՂŠÂËg/ž+-*/.>_^rņBeéPĒ\ūĨâÄåÎ+KUôÕ*5^ĩĮ¯ļ×-6°^3ųCãMÄf–ČÖúļOˇd;Üžs‡ÔÜ}ë.worßĮ~īûĶĻæš÷8f\˙‰ø3†į‚͆/“g?ΟX}—÷Áúķđ†Ķîü˙>[ÚŨ0ŠœuĀ™ kCrö Ô +"v*!Å ¯=ŌÉũ{˙`ĒđʑJ`ž8Ą ˜†Cų0ߛA`R{Dâ2bņɏ´F&!k“(|‚ā3ą!4­ŒA_BOa˜0V˜lL?‡5ÄÅöãˆ8\nžJ’*šĒĪ„÷Æß ÆRģSˇÂĖ'„pŸ(HĖ&ŽŌ8Ō´ÃlĻ„Ž@wn…>”ū)„´ÂÍđņé$3 s‹K;Ģ)ë [,;žŊ‚C›c’3œ‹ĢÛ™{‹§‚lIūÉ[ÃˇŸŸÄß'įú߄ڄ“E DŠE'Å*Äã%L$E¤ĐR3{ú¤Ģd˛dãä|ä÷)Ø*Z*é+¨ĢZ¨yė PĶHÕ,ĶjĶžÖų¨GŌW1đ3Ė3Ē1žlrŌ4Å,Á<Ü"Ö2Â*ÂÚĮ&Ô6Ė.Ų>Įá¸cĄSŊsË¨ëž7nwuGJĒgš×¤¯ŒŸˇQĀXÖ 9:ÎŲõ3Æ#ļų1>4a$Q!éR2ũáC);G‚Ķ>¤‡d,gúg}Ę ?ž‘›vJ$¯1ßôĖDáĄs†Åv%ÁĨGËZ. _AU)×D\Ŋ\?í†oĶ…–ˇí{;ĸ:‡ģ‰w)}-÷Ą‡ÎƒĨCKŖęc™ˇž‘ž[O§ŧėũ2ĪōÆč­ÍģØĨC’>Å|vYåY[X?ˇ!ņŊr“jËfÛíįá_ë‡ |žUúĀgˆ2†ĸĄRč!´Ž #Ė`_‰G"‘˛H 2Ų3rI”ĒõE렓ĐčL<æ6`õ°™ØĮ8Nœ?Ž•ŠŠĘ…Ē–ę'Ūæž>ÔŨAB áŅ”ØNCĻÉ Y§  }AgM×G¯J›¤@jbPcčf4bereZ`ŽaÁ˛\`Uf}ÂÎNÍ^ÃaÎąÆYÄĨÁĩÄ}Į”gƒ|7‡oŠŋLĀSPXpYčšđaKQ.ŅobCâW$ŽIúJf—ÁČŦÉÎË=–ŋĢĐĨxS NCUUÛÔ:÷ŪS‡YŌ{m”Ž°ž†ū>ƒÃBŖ:ãF“ĶZŗķ6‹~ËQ̧Ö36Ÿí {nIGe'{įh—L×ō}wöĪšc<¸)Ļž^ĮŊoøLûaũ|Īõ  ķ /‰xĸÕbbc¯Į}‰WNˆ8X—øífrúáTâ‹´˛Ŗ_2¤Žee>ÍæÎ‰<>K>uĒį4mžį™žBŪŗEEZÅK%EĨîeLåc9WĖĢĒßÖ6Ôå4x\WēÁys­yēĩ­ũfGIgJ—wkīŪ{ō÷ɉ6†gFûƚ'ĒžfOO™ŧИažũōjüuŨBęĸÃ{îĨĨˇ>e|6_ĨY{¸~fÃüqŗc;ô×ü̧HM` ’ƒ" Fh Ą€8€¸D ‘Į‘OP<¨`T+ƒvDWŖ71˜Ë˜ŦöŽ…{L%OU‚Įâ#áŦŌŽē— Nh%JoĐČĶ´ĐęŌĐšŅ­Ōg‘$Hƒ ąŒŦŒ™’˜Ĩ™įX YmØŲž˛ŸápæäįüÂÕÎ}ŠĮ‹,ĮKÍģĖwŋB C0LČUØLDCTJL\œO‚_’[Jd¤´’Œ‘ŦĢ\˜|ŽBĨâ°Ō7UCĩ¨Ŋuę šÜZû´‹ufô$ô“ ƍ؍ŖMÆĖÍOX,[ŲX_ĩeŗK˛_t4vjsásÍۏsKp_Ĩøz>÷ļõöŗđŋ¨ÔĸÚŽŅī ũąqcņî īã“6’3R8RĶ gxûžu>Göøxnä)B^{žÍ™íÂķįHEąÅS%Vē/*–U_âŽ(ŋ"TYį 7Ž*Õu4h]ëk4ž1×ŲŧۚĐļ}ëômÁÎĒ.ąîĢwĨzîI÷_}@ķ0gúQäĐüˆõčĩ1šņā‰OŸž|2Å:íôâė˧ŗLs6¯2æë_ß}3ĩ°ŗČôŽ˙=ßī2ĪŽlˇ?Ŋ\éü\ōÅUfuuíúאuōúġ˜ ÂFÅwųīw~˜ūx¸Š˛YĩŞ•¸u›iÛsģ~{ķ§áĪ“?'wøw‚wšwį?ĘWNvw÷A>~|šŗŗ*Ÿ_æ°}jggŗ|ggûL2āo ]ÁŋŋWėcā3÷ķ™ģčîõĒŨÛŋ•˙A4zXąî8” IDATxėœUÅųū_vé ö.öŪ{ÃŪģąFũ%–ÄnūŅhė&5j4jĸ1–Ĩą÷‚Ŋ‹ @ŠtØeīžŗŧ—ápîîeY–ËōĖ~ÎNgæ™9gžķÎĖšmžûîģ‚É! „€B@T$UY+UJ! „€B " ˛Ļ „€B@ F@d­‚;GUB@! „€ČšÆ€B@! *‘ĩ îUM! „€"kB@! „€¨`DÖ*¸sT5! „€B@ˆŦi ! „€B ‚YĢāÎQՄ€B@!ĐV!0û( VWWg_|ņ…}ķÍ76jÔ(k׎΅iĶĻM´åŸ;ņ¸õ˛jĢŽžš÷Ū6ĄŠķ÷îd›oĩˆíwôōÖącģéÆBôˆēßfõy37÷Ųp Í1‘môsSs {܊pâQëׯŸučĐÁvØakßž}$iÕÕÕ­¸õ­ģiô­÷/vŋFØRŊģYU Ũđîđ?đB=7ˆ&ä ųĖĻ„ĩS 6äÛ1vĪmīÚČoÆØ…WoÆHũģŗOĻõššįŋסÜņčéK•N|ļžYŠŧ Ÿģ ¯}<`Ī ã}îB¸ŧÚÎÜë`y2•JĖͤļDÍÚN;íTÔ¨1aÖOėõ“:“œüͰ˜[đ ŸéËĄ“Í&ԙŸŽB•dmB¸&﯅NĘ<ĮŒcwŪy§}đÁö‹_üÂV_}õXu4ČÁxīēë.;餓b˜Oˆx^yå6l˜ížûîŸ4ž@ųë'ĐĐ,āA_ĐoqúxLMÁÆOĒĩ°NQˆZ!Ŧ{úđ{˙Í~vŪoŽą očekŦˇYėĮ2’ šĀØ&…ŧ=ėn‡UEyŲ1vmÛļ+ŽŅŖĮØŸM°ÕWYÂÆOœ`mÛu˛šÉŦcįÎöĖĶOØÁ‡aëŦŊēWc“&ÖZ—.íŖ>ŠD­sįNoņ…Äfuü!įå—_.Žķ,Nŗ*_ųķīšqŧû˜kMļ–A›Đ› ^ŋ~õĢ_؁'Ų­ļÚĒNüĖ—‰}øá‡Ûŋ˙ũīĸŧ™•5ģŌ§u\a…lđāÁsŦŽ^Ú:tčPģíļۊÍN㊁ 8˜|Ë1Š\ČQļLdxšqãÆE7ڗÚښŠW­ÕÍŔ@ۘė)÷Ļ›n˛wŪy'öy=ę5pASA|}ې.øÃūRģų曋ņđû7Ū°Į{ŦčG~O~ų§á5+xĐ/ôĄ“ĩ ĩ›đžT[gãųšlÂF›h×]rNV×_zļ;ÁƇpԌ¯ąÎ,đÂĒģw˛ącĮĮN:}<õīßß6ÚhŖbÂË1žŋĄņčx0F¸¯˛/†ļąßÕØÃ>`ßüØÎ^zk Mõƒ­ŧÚęÖīå÷í×ßĩ; a¨E›Ž!_ũx2ĻŽoÜķÍ7Ÿ­ļęjQÃŧöÚkĮ1üöÛoÛjĢ­ˊãŧņšÆ3Î}ôŅx?x]ąŊū~?Čß|÷{K÷rÆôŧ˜Fšĩ™ėõôųúë¯Û'Ÿ|–R&L˜04ŌfßūĻKЀį/ųKÜãäIfE–˘U;m;˛xpvëÖ­(ļRęX.æŪžÚŪ{īmL nʑáųķÚÍ2yōä¸Ŧ'›āŗlœā ¯ †ŧ/ŧđ‚tĐAļĘ*ĢÄņRČ{\ÜÄ)yj^ŌOŦבĨĒ8aâ†Ļ'DÄx E’†üͤ…2åŸ%<ĻœëBŌ¯ā=ąļŊMZ˛6aYŗŽ*,‘N KđĮîžÕ†~7ČÚwčėÁöĐŨ7ÛÎo!E ÕĄĪÂ5ž&ôY]ØĶÔŠMš4)öŖ÷+ũīc 7ããÉ'ŸÄY4yc¯™8´ņˆ,ČΤ0>û4*h€˛ÉãFÚkOŋdíæÛÖŪ|îÛgÛUmÔxŗO ˛ŸF°eVX?ā0ņ˜d ôĒĒߗʍ{´BģŧūwŪu§-ŋüōõ5 cüž}ö؈aq<æŒWō{<î8΃]^~'âŗ÷‹Æû´ÎwüūøãøëØąc|8wÕUWŲ[la‡rˆŊûîģÅđž}ûÆ%¯M7ŨÔūöˇŋÅøø@ yxŗŪe—]â$îšįÆ3q|ōÉ|ŊõÖŗÍ7ß<.yūÔSOÚ<–žXŽs9Šũ¯ũːõË_ūŌ8ā€˜ĻTž¯ŋū:j ŗå\yå•ąÜC=ÔŪ{īŊb9–?ūx{ūųį#n” Ņüį?˙ĶyŪ,7ÜpCl+íyîšįŠ2Ķē—Jã2ŠOŠ-đü´që­ˇžˆŅļÛn5ôË×gœq†ũøãļãŽ;Úũ÷ßÛáedëÍdšņÆGÜ]ĢæeƌI˜X؃9›4)4´ !ŒpŋŽšæ{íĩ×ėüķĪ7´´€gŸ~Ú6Ûl3[wŨumĪ=÷´/ŋø"†3‘RV]HCēK/ŊÔÖ\sMëģÍ6öę̝ĩjÄ_~ųåąûīŋŋŊũæ›1=e‚÷?oŋ=Ž%0ĸĪ÷ßoŋ8V¤qų”˜Z_ųķņ˜ø1˙ÂRčÄÉAŗ×Vûm×>ö™]3õÚzŋcƒ&mŠ iƆô#'†Ã cjlđčĀRYķūõq”ĩ?˙üsûųĪ^ãŒc^ˇß~{ãyÂ=˜‹Čđ0úļąņĮe oã~š`ŖFN¤¨­m´ũ‰6qÜxĢ?ČúŦ¸Ļ 2ŲÖŨ`KÛzģ=mD`nąí§DâʸdüD9SĮ uˆ„ĐÃ|^ryĻųxã^|øá‡ã}ĩ~xÎ=îÆāeSĮų6aœs¯BåĪ8ß8hįoŊõV ûøÃm×]wĩ?ũéOļōĘ+ۄ áöôäž§û…1Īŗė˛÷ĮŨaK÷8åEmu(ëÊ2¯ŊöZ[=hyö°ôëõ÷ēÎ ÷KKwƍĖ4¤Y›†EŖ.zøĄŌ?ė°ÃlˇŨv‹íqĮ÷m|õÕWņ&â‰'â>¤‹.ēČØk„4hP$[<ōHØëŅÅŽŋūzûôĶO%EˆKN*ōI‰ŧrø>Ŧ´-ė¯ÂĐęƒ RČl 1Įŧŧā€ōŠ+ވƒ%Įuj•Ŗ•MãŲ—_~9]}.žøâX6ņdáūío;6ŪÆSO=5Wútėēđ mŸ}ö1úSĒŪĝyæ™˕VZÉnŧņF‚ĻĢÔd…:øĐ61ėũÁđPŸ4(cãˇÖęėāƒ‰.¤pûíˇ3ö ōë_Û˙øĮ@¨Öĩŋūõ&ģč‹ėŠ?^7wŖ‘!Í×ß|Į}ËÆīsĪ;7Nˆ?ũ4ÚžšB&ž¸?L2Ųyŋ˙ŊŨZĄP‰?“:ûûēuëjW^y•-šä’ą-Ä#;j%ÂŋPígĒ–.Ō.ųaĪ„Ą&ņZûvl[ë1"h‹Ú´ĩÚĐ?uaßZ8īûÛ˙…,QCÄ?4køŅˆŽ ĮH‡L XwjÂĻĪį6qhŪX ĮáūãĨčŽ;îˆKƒŧÜpbHSÔ<%rķÆcMx™ž9ÜČÍä`O m ŖÕÚvëbC†ū`K.ŌŖ\jQ3vš†+.įW×ûũyÅĄßoÉxÅÜzë­a9´Wø,˙đ‡?D›åB48hŪ0ŋ“1D ƒvŠŅŲgŸIÄš.ŌY‚ ‘Ÿ8„.-†ô„AȜ0ĈđˇGöē÷Í eĄ.žĪÃÖYgÜr|đÁÚBøn†üh!<<€YJ\qÅmĄ…˛Ģ¯ž:7/í@ktđÁGŌúë¯ĶĨ“K6 Ú>ÚX [⸠CÔ!ÛF°ĄÎa!†ō¨?y0؄•j3$ ,´TOdø$…^>€ !$C8§ëûˆãũõ“YŒ ũūũߋdL0{īŊWė?&j&ŗÚHúáÄ)šâ{üąXÎĨ—^ãĐ8ßûŒ1ÛŊ{÷‡ŒcŽ9&ú>úhãeĀûõ§ũbRũ›Š@ė[–=)ŸöĄk s} 6õ4%’‚ú ŧFĐûĄëųN‚26ĨMĩu¨'HÃGq}ː*5Žaŧšų} âŊzõ˛>}úDBDš´˙<Ëȏ Ÿ.›Ąąę@ÄjŲ™4qŒũđųGvû­ˇX›ęöļų–ģ›é#ŒÄŽ&\>>ũ^¨¯K} æŸū8Vy)L뗎/VX`~ëŗBģíöÛ"žĪ??mœ#ĪĮ9R{Œí'ģô˛Kc!Œķšpx§Mčž?Gqd ÷ōč/dtīŅ=ĻyųåWėŗĪØđáçĻĢŋG?âđø|îÛwۀË9öÁ‡Ä{’{mŋũöi÷Ũw_Ûk¯ŊB_L™nģJڞ˜°ü‹c§Į{+€lļ4Ad­ °ÆÁnzˇ™đū÷ŋp<Ë-}lœ\ląÅĸĻ ņ¨ä1ū $ŸnxH Ú9´TĢŽēę éH‹ļÍķ#‹åĮN:ˀ0-ˇÜrąNÄcHOY<ŦÔ%ÛFŪÆ{öėĶĶGŽ9sÄ22ûYÆ!ŠzŖAE{Œ uaŠŅMZÂđs+}ĪE=ąy°ãv?x.Â)ƒ%–ģđ?4h´b–Nԑ}jŒ?ęÍŌĻËáĨÜŅpĸĄãĸŨžÛË#/ŋŅ´ĸ„ {Ũ{~ænėy؟âƒģsģę@ÖÚZ—đ ]§^Ũ‚ĻlŨ­wŗ‘ƒ?ŗoŪëgC?ßÖíģˇuáŨ;´ iÛYįļKûęp…ņöŦų˜ņ1åļ-ˇŖŒ?Œģą1.ÃĶÆĀ$ŧąņH{“Ãūģ 'Y˙˙noą‰ŸI­â9¨Āž&ž+ļÄKDíËi§f[mĩbŖņrR›åˆ4ķ›ßÄēry^Î駟Ëa#pCmaâ@CC;Y¨KČ ûM_jŠĨ"؏₠fĀíä•ũT–{Ā™Ųú°oĮ ih#{âo#~ö˛ąīŒÂBö|‘žŸ‚bĶ1XĐūlŊé?ßÉ'ŸĶą\¸Į{qöōąÁÛ $‰9¸įx0ÂO8“ŠO,guV<AÛYĸHG: n–ģYß&l‚Ļū<&4Ō06ĐÖŌ^wß}wŦŋįG†}ŠL<ėä€čúyy^fLŦ°áĸī°!iÛ˛U´Ōa˙`X W•uëŧ íâ%vËš‡Û^'\^ä ˟`…|l’¯ žęęZë:š­uëĘoƒ˛Ô=ũøņą„ínƸûąŨīy KûÍķŸ„ŅßLČGdáŸ<9ė[ KĄKŽq°Müi üi° 6ČÆnŨ _ۏÆ„ĶŠë‡=l}‚.œˆ4>`Ņ-æer§|dšAĻ+ÂŌņ•ÖwęįšÂ§:ōÆ9aŒķôŲÄ8Į¸/“ũĨUösŸŗ—6îö ŗ_Í2†CD|"rĮö—E{é s<ŸĐüûX œ4i[‹ņ62Žf÷xo-˜ÍŽvčˇAgUčaķ âá‘ām‹eO2†x.47hl˜L1éC(LũįrĶ0Üi8yҏ Ŗâ¨á ,°@ņ ´i -ã„:¸ÁMœ×1#MęWŪūSãņ`HqyŽÁŧîWúŒž„đ˙ķ‹ļÔ|ÕVãĀĒÂA@Ökzõŋ^fģu:ü-ô+d-\A1VŽ a˙—ߎ˛>čo'÷í÷ZA* OÆxûũ€Ÿ “íī3ŋ—đĶgåŒGöcQí:ėG;äÜ/l‘Å–Š{í:wîęĶŪÚyŖĮ ˇļC˙e§ūæÆņøņãÂGsÛہŸÛVĖĮcˆ˛Š'8qaŧ>ŅūQ.oáÔ7Û.âĮŒOsØ´@ž>Fąũžôr ķ:1æi/äŲØ`ÎéQļpĪø=Nīŋ˙~|ųãņôhã]Ķ„|/+¯ū^g¯ÛÜæoÉņÖ2ųHŗ–KYĄÜ|l„GCÄ ˜^āfv2á7*Ḛ<=ayÆĶxœOēøĶŪɈ§s;-'+ ?77øŨx9^vŠļ—Ęö<ČōpĪ‹?-Bˆ!Ë‰É?Ōx|ëãųS™^ž—åؤix¸z¸—‹ )ôüØiŊ)„ĶįnŧœTž‡Ąå!ĪĀd@š\L^ÄņdBŸNXîF{Gy\.wj›Mãų)‹ Îëƒã~lŌŌN Ž“5ˇIãeâÆĖë~ŸŧĀ,z…SĩŨē‡_eÅ/Áxĸ'ĮīiRÛŨ^ī/ü~ænˇÉ—įöúeãņcȓšyÍīX: ,PˆKĀ…§i¸Đ q1)ÜqD†hÕčnČZ] 9ÕC?°Å:Šã%‹Ĩ—íĢtŦx\jgķ66ũšĀKÂqĮí÷hĄicĖĮg=ĒĢA4(|øwœmąŲ֑¨@ô|ŗŊęácÛë‘âæeĨ÷ǎ1 KÛH|ęĮíy°]>e§õĀIĶ;NÄĨ2ŲûÉŊęybÆđsˆĖåĻ6íÄī2ąS3ˇûŊmŪĻ–ī^žėzDÖfb$øMįvöa4ĸ”t@€ņÁū7öÔņMNŽĸ…eĸJ'æáĀã“ãÍĮœĮgĶ:œ¤ķ4„áwų.;uīešęH8ļĖôx˙ytęRÃ,č°øųŽ 3 Ļ„$k›ŠŸķ¨Ž )&OąA|aī<úø^ü8vŪķ„>ĀäÅ%ĸËr66}Ü06āAõ?L–wáDSĮ2ø÷ØąãĻĶ*ųsTČĮ”ĮæãÎەĻ÷xÂ<ÜĮŸûIƒŠ¯c=Ys?ay—įušž†:xXūqēÔåy6/Z8ōb°Ķ6 ‡ēz|LÔJūĩäxo%Í–fhĪÚlUBįe|ŸKCėaC2û`ØëÂō ûƒø"ēObnƒnŋCŸP°1éd“NūPõxŌú$âq. ŋ—ã内=@Ø\23"ĀōÚ$ú’%14§l)ā”3š(߇8cÎéC >ŒNasē¤ų\ÍeʏhŪX*e?Kƒ´ŋ/õų¸ō1Įø Ŋhų~!{,ų7~Ę$môôŒ/7>ö\&á>6 #“Ļ‹៏åŧŧ‡íų\&ōĀÖë•ĘĮM: m#ŋŌOS<šĮņ§eyžÖbĪmãŊĩāžm‡ČZų…Ā,"ƒž8r.&q&0K0š1!3Šņ€w2•éFFēÔxˇŗņiZÜŲxüž—xܞÛŨÄÉL“6“7û!mpúÔIZvĸŸ>÷4˛ÍI>Ū !B2œŦ!ŋšLšãŅĮcō™¤ĀøXq›ēų8qųŒyÜ\.ĢĄ6¤˛JĨķ4n76.ĶøÔíų)w֟ 'o6?y<Ûīß4]ŠvĖÍásÛxŸ›ąn¨îÍ÷úÖP)Šķ>0áqĄ™Ā°ŒÂƒ‡nĮŽT“Nj•ZĮ–Ž—÷aJf|ōv˛ŌnÄûØpÍ~;ÍŲ&—Yj<NŊy¤$¯ž./Ž9ÛUi˛Zk{įļņ^iãĸšę#˛Ö\HJŽHđˇQ&tŸŧ˜Ũæoæ•JÖZëäã}0+6ØpŅĪ\Ū—ôą÷w)ųi^ŌCÖ'¸‘5;Lcã‘˛Ŋ >KĩƒđėØČúķŌĖŽvUŠĖlû+Ĩ^ÍUtĖÎ ãŊšÚ]Ir´ ZIŊĄē! „€B ƒĀėyË"¯B@! „@ĶYknĘ%„€B@A@d­E`V!B@! „€h:`Đ4Üb.6ŅōI†Ī>û,ū6]Cĸøy“VX!Ķoí›QÂAqB@! „ĀĖ! 3‡WLž’âˇų æŌK/]ō$§ĢžúęĢø­ÕW_ŊXâė m^ˇˇß~;ū€8ßmšåŅDõ䃹Ÿūš­ąÆQĘėŽ'eŽ7.~¤ļĨĘl"<Ę&„€B ˆ€4kE(fŪÁˇ‰ĐŦņ%š'ÍāÁƒã÷Œ8&qb…ûæ›oŽŋ¯ĮGTųPæFmŋ"N\9$&•EžūũûGMdÍãʑCŪŲiŧ.”Yãg˜œ8y\šõ$}9i].eŌ_ •YŽLd•2Í!Ŗ”l… ! „Āŧ‡€öŦ5ąĪ™ųbšsˇÁÜޤĻļ>Ė?8IZԐ×/ŠĮŲqĮ{Ū† IDATí ƒŠß[‚lšņx÷7f{zˇK?§âŊ~n—SŌrņķ6wÜqGĮrex:ˇŊLüĪ>ûl$r¸ŗņžŽ”íyfEF)Ų B@yiÖfĄ˙YŪDŗ9ŗĀˇÚTMûÉÄį“8„ ŋpŌ‹õxü×ĨK—¨rÂđÎ;īÄåB~ĢoŨu׍ŋ'Hú{īŊ7jĨŪ}÷ŨøQÍuÖYĮ–\rÉ"ŅpŲĪ?˙|üŨ>ꉋŊs~ōčĨ—^˛‘#GÆü›ožyü˛>K¨,Of˃@~ųå—ņ'”6Ųd“âGaS˙åĨ öë×/.Ŗ5¤ üĸˇĪíožųÆŪxãø‘ĐÕV[-ū^"bŋũö[{õÕW‹äx¯ŊöŠōВŨwß}ÆŌōōË/ooŊõVnŊŋūúk{å•W" îŨģwŦŠ—‰‡~! å÷ŨwąģîēklgZīõÖ[/֛ēgà 7Œ˛ž~úi[e•UbúŦ /‡ô2B@! š‚€ČZPcæ‚\ņåq–.§T7üŖ×5Ō’Į'p/ÚIÚ÷ßÉÄa‹-ļˆi!Tø÷Ū{oûņĮíõ×_ˇwŪ9f3fL Ûc="ɀ”Ą™sƒ\.ˆO¯^Ŋ"YBķͧOŸ˜RÆoîģīž‘ ‘–cÎ+ĸúŲĪ~ķxŠMã8AüøEʁX~úé§ļæškF< eŋüōËļÛnģÅßGüĪūcK-ĩT$X/ŧđB$™+¯ŧrlJČâC=d´SĒŪÄŊøâ‹Öˇo߈Á|P,—8Hu€ä.ļØbļđ å–­÷'Ÿ|bk¯Ŋvŧ ‰ü7ŋõ‰ ō‘'+C$ ”e„€B`VYk"zN2üwCZ i=ŸOâø!*˜Aƒ؈#"Y˜ūųc8š,ŌŧöÚkŅ2dH$‡? öĀą'™C‡ˆsŲhȆ fA6Øy8p`\zõŸš!O^yhÆ(­ÔŖ>joŧq‘œ¤í@Nš-e!“8ČåķÃæhÃŧŨØÔ˛÷Ū{īQ˜ī‡~ˆų Dh‘…!=õĮ¸Æ˛TŊ!q” žäį79 e@úŖ Ø~!Ÿ°lŊŠĮZk­ûq›mļąĮ<K&y<ŋÛą‚áŸcä~ŲB@! f‘ĩ™A+“–I"¤ĪŤœ˜IƒˆÖũ„ų¤ÎDa‰B€† $ rÃ˛(Z&ĖŌáÔ)ų<6„ÅåēöŽ´ÄĄ™{ėąĮ"9šožųŽéŠy¨ˇË".¯‚qŌ€&÷đáÃcHQ@Ú)H¤‰z‡Ļ "ąÄKK{”CxŠō #䥖PYÂdo—×ÛÛA~OņD“‡\ڀfĨXڇíu$/nÂҏš?ØaSoל!Ÿ4ÄQ'Č-ū<œ¨7Ú=´kH /Kŧ^_ˇ+ú‚†<ŌĻõw¯7õdiōJ{ØČÃÅé[—árcú'„€B ‰T˙æ7ŋ9¯‰yįŲl> CØGAr"AH/@ÂĪfxHÚ"ˆ†d1ÉķŊļå–[.ÆąŠĨ:ö ‚@>ūøã¸ŋ Ãū+dC¸>üđèíB>?ÄĒgĪž1ōØãFz´Mėą‚Ä‘Ž‹x6ũŖŅË+‚ōđÃĮĨZˆ!š5Ō#C;˙āƒÆ4āŠcO„‹Ī–°į ›å^4g6䯸⊑Qw–J!T|h"æ‚AØh?y‘ ŖîÔb•­7dō1%?{ĐĐ.BŪØ—F¸ęOŋ° KŨÉ AËĢ7‡2¨e‚#‡* ã7ƁËX:h]ģæ8yy˛…€B@”‹€>Š[.RI:×ŧ@Ļ QlNgânČ e‚˜lļŲf‘@øä,Hn7Ä3ŅC"0ž2āyīšįžx؀0ŌĻäƒ<žKrœ˜x´SN6‰ãBŗD EČá"œ´„Q„1s­Ä’äÆeRŌgãHįi°Á5-×åxxšžúĐ.äbhåxūūæ‘–ē{ũ)“|Ž1íĻŽ^§´Ū^ŽĮš|Įvy:ušŽLO+[! „ĀĖ  =k3ƒV&-“?Ú+´=hˇ˜¤ķ 8“ĒÍņIô¸h!Öī„*#=dÅM6¯×ÉĶdË!Ū  §Åöō—Ęô:†+ķ:Æã ÍAsåéŨ&Üã ãrĸ•ĻIÃŊ\l/ËåPoĪOųHįí÷°Tļ‡aCā#ü¯w6O}ė4RėņäOËķt˛…€B@4i֚€ZV Ãæx– wâáb™Ā™ŧY*eYIœ‹pŌršFŠüY“Ęs2āyŲTīڛ4Îex^/‡đ4]ęNķx>¨ģ§Ë†įņÄQÚâåĨéqģlwSF6ŊĮšMwģæKŨín—O: uvRF÷~%‡áƤōđ§ņŲ8üŽÛ„É! „€h ĶT2MÉ=įņI™=ShxōČeÉÃæ8ņ÷ㆠ¸ÁÆy8{š0‡ínO“’ ķ4nģ /ĮËÎĘÃīi<Îm—A[˛eēâŧŦlūÆōēĪëu÷z“ßËpYn{Ū´|Ëŗ]fšéķd(L! „€# ˛æHĖ„ÍDa)-=Ų9"ZeRĮĨU6NB@!0‡˜öí‚9T+„€B@!P‘ĩŌØ(F! „€s‘ĩ9ŪĒ€B@! J# ˛VÅ! „€B`Ž# ˛6Įģ@B@! „@iDÖJcŖ! „€B@ĖqÚŪxãsŧĒ€B üâĮV[meË,ŗLLŌ߯ķoč}õÕWöÜsĪÅßÁ-UžÂ…€s6īŋ˙~ŪæG˛ųkˆÍ銩|! „ÔÔÔØģīž[wuÖ)‚ŌŌ–>ßŪ~ûmûčŖlíĩ×Ö÷‹¨Ę!„@% ĀķU~WœŸ•lK4%ĸÔO&UBåU! æ=x6­ĩÖZöÉ'ŸØČ‘#mË-ˇŒĪ*ˆ×Ė6'jŧ”žđ QDŸŠ›9ķ^¨ÅB@´4<÷¸œŖĩ o–…I“&E­?Â-#„€¨ W酆íķĪ?7žW;밃ņ›ŧ˜rˆ–ĩņãĮÛã? ÚōË/5jŇáÔ×Jhģę „€āW’PĸÅĘX…¨ĄUķ‡š`B@Ėiü™ÄķɟQƒļAƒŲöÛoo .¸`ŦbC„ÍŸiÆ ŗ'žx–Xb [|ņÅã[+C.ōķ+#„€¨ü™Äķ‰ĨĐ6,đôũjū`Ģ„ĘĒB@Ėģđ,‚Ŧqņ|ōįTMÍ:ėGûlĀĮļŲf›Ų˛Ë.AĘ#lū<ã Aŋ~ũŦĪ +[īĩú7VsM—æ]ÄÕr! *žg\hÖâ å÷ßÉ5ŋ*Ĩ˛Ē‡ķ&ū,†¨qą :jė$û~ø$kW]gmjĮÚgŸ|`ĢŦ˛ŠeĪ$čŗŌjVhÛÕjĻTŲ"ķw°ž];ÄeP†\ūpĖ#}.KļB %HŸG‘Ŧ >ŧāK éŽ%*Ŗ2„€ĨāyÄŗ [5ž>Ņ^ũt´umWg];ÔYĪÎSŦŊMļO?ũÄzöėYųĄœPm5…ļö‹íæˇųēˇš5íYËë… !0§ˆdmôčŅĶÖ ætTžB`*ŽņĮžôží‹ī'Z÷ŽSŦī “méųk‹ĸĐĀq…-Æá 8D°Č"‹LˇŧÉCoāđļöô€ö6zbĩ-ˇHG;c¯ŠZ56 ?! *ĒÄ^Q„€ˆ$ ú3Ų^ũŧÖF‡åËÅį+ØrŊ ‘\ÅˇÍŠ§8Y.€˜õéĶĮyä‘h;QKĶá&?r‡\äc´W- B@T "kØ)Ē’õ@Žî|iŦՆO@ÖÚØ6}ĻL§Ëą^ŊzŲÆolØÄeã!d„!yČE>a2B@JE@O¨JíÕKĖÃøa§QãĻØ߄%΀ņËÔZ—Žõ°<æDŒ8OÃ܍ä!ų”ƒņrŖG˙„€‚€ČZ…t„Ē!„ĀŒŧ:`BЀ~rjq¨UŊqâå¤,KĐŠwõōĒĸ|ʑB@T*m+ĩbĒ—ķ6hš̉ ´¯.„CuVÕ&Ģpā!ķË#¤š1sB3MũGō;yJ›XyÉ##„€¨4šLÖ&LŽ Ë“íƒA“mЏ56fBøŌ¸Î•VZ˙Ē>B`.F `ƒ†×Æú÷ėLåQ-'lDB°ƒlå‘ĩ,#-y=‚ÜacÛØŗN´Īøi1N˙„€ŗŠ@uxČ,ĐŊĘzwokŊ{TÛËw ūę&‰i˛6dT­Ũ6ä>ķÁx›0YėŦI¨+“3…@׎Ķ?kō¤,KÖ˛…8QķđnAî°ąöŦÂU¯Åķ8ŲB@æD€ÄMVėd{oØÕV_ĒCQtúÜ*f’5€ūfúđ[cí†'FMGŌX5X¨›Y÷Nŧáf¤Ë+„€h–œ¯:~ė6+*Õ°eã˛ū,Q#~šŪfí} f%É/„€hVG7Žúíf/~2!^GlŨÃŪĸ{QHc„­McÅu˛vņ‡ÛĶšĩ–4Ûrŗ•1ëÔ^,Íq‘-„€B@¯‡ėųOÍ^ūÜlâT%~ßÕ;ÛY{Ī?ÃŽ4Ÿģ%k$ŧķÅąvëŗ?Å< -Ú˙mIAse ! „€B 1~øŠ`~ŌėûzJe§ėÚËvZģscŲŦA˛†ZîũpˆāÔÛØxkļHŗßíŅÆ:K“Ö(°J „€B@,ãÃ~˙˙÷߂ũö˲2yã1Ŋãßr–Mŋän _?Ŋīĩ -˜ŽíĖNŲĄĘēt˜}5~yâĉMūš8ûW:vė´9VZ˙„€B@!PAĀŖ~ąUÁ.~¨.žāĐæ‰;÷ˆËĄĨ[.Ysĸ6ė§Z{eĀÄØÄMû´ą…{L;lāí&m)áŲ¸ŦiؤI“lōäÉÖĄCũ) s;-ĶŨnSōbwéŌ%įåËÖ5›Æåagã˛ūŧ4Ę? ,^Yŋđ›qŒMCoÆ8á7ãŗ&Į0—õküÍ8ÆģÜÆŽk]ģvĩųįŸ?ū^ņK,a:ušOŦ˛h[{É:{į‹_×øEߎ֊Cõ éüžĖ%kųúį‹ßNÛzåĒ\R–í<Ī‹ËúķŌ@Ønēé&ûņĮ M[uuĩĩmÛļø]%Āá¸ģļļÖæ›o>ûÅ/~Q$zy˛Ë)? žú/›>ëĪ+ŖÜü555öÕW_ÅĨî.û­ˇŪ˛|ĐÖZk-ÛsĪ=SqÅ4i įKÃpßvÛmöå—_ÚÁÔē”ÜRųŋūúëˆ{īŪŊ­]ģ V &/m^XLœ¤˙îģīėĶO?wĨ•Vōčh—“ß3äĨÍ +•>/m^˜ō×#Å&ë'U^˜đ~yc#oŦä…iühüĖ-ãį‡~°?ū8’5ˇØcƌ‰×mđāÁļōĘ+Įų/Mƒ{Ģ•ĒYĢ׎ąålƒ>áŗ%LI˛â›j˜vánK/Đ2ŋLAƒdlģíļ‘Ŧõë×Ά Iqę†ÛmÜüpŗĮ7ô8ôĐCí•W^‰røˇôŌKÛÎ;īl?ûŲĪlŅE-†Ī.ėûâ‹/ļ^x!2pĘißžŊŊøâ‹‘p~ūųįvĮw؄ l¯Ŋöjr5žzęŠØÎmļŲÆVXa+WîŸūô'{衇ė›oŨ,˙đ‡?ØĐäēЇŋũíomīŊ÷ļË.ģŦÉr”Q! „@% Ā\ūöÛoGÅRCõAëÆ|žîēëÎ@ØVY %X]ā2üFņ$[?|4ˇiŦ ]OŽz…UÅRĒdSâВą÷läȑvėąĮÚB -ÉMįΝŖ†‡8רa§Ļ˛æíØjĢ­lܸqöÎ;īØu×]‡DÍnYyä‘Gl5Ö°C9$jœž|ōÉØ&¯uĀúgļ^iŪŦ;õ§rüņˆE=ėŦŗÎŠ{Ÿxâ‰H‚KåIķ—r¯¸âŠvÄGؚkŽ9Smâ­äöÛoˇîŨģÛI'TJŧ…€B@´/4jŦbV[m5ûāƒf(ßÃIGz”J,‰ēéöŽ->ĩÆÉP~­NSjŽŦ9Â>f*Yë<ũ:-!ĐC°Ō°ûėb™Ņ‘ų—Ęō(s›đÔíé<<õ{˜÷Ÿ×ųõ×_ÉöŲgŸ¸¤Lø‘G™+×Ër;•™uķFąÎ:ëDŲūĪķšÍC8ÚĀŋ˙ũīļÅ[xļĸíųÜÎËīíJ͏s[ų§?Ĩp~õ8>nkühü”3t˙´Žûm™¯>AČXyžëŽģŧ‹ãjŨĒĢŽũ9Ōŗ•.+Ø=ŋú>|΃Ÿėô9 ›¸ÔäŽm’kĘÔûä'Ș^Áab ī™gž‰Ä;ë†dĨyq{~ˇ]–kÎîžûnûß˙ūgėíZxá…mÁ,ž…ĐAÚF/և9\āD/•ŸįŽ…‡ÄĄíÁŒ?>–Eeī´ĶNvË-ˇÄ4ğ~úéqšôŊ÷Ū‹a”Éō)K•C† ‰äfũõ×7H; ˛˛åŗņķæ›oÎG¸§Į ‘Ü}÷ŨĨLęäō°Y‡dŽŊöÚļųæ›ÛĨ—^ZԀĨ2ÜívZ†‡asųÁ {=Üķāį ,(“ÁšãŽ;ÚŗĪ>ĶĸúûĖ3Όj_°@“Hø•W^Y”™Ļ…Ŧ‚ŨvÛmgĪ=÷\LķíˇßÚī˙{ŠŽX‘˙Ĩ—^*æ÷:šMŨĘqgÛTNž4ōO?ĻSlĘq ?á—ŪĢ匙4ÆÆO%Œöaģažüđà bÆv* 6~ÂSųf¨˙TAuSy—ļŠÁEk͚ĮÔļŠžŠdÍãRM›Æû÷īŸOį^e•UŠœ."ãĄL׎q"m¤ä†n(2NHiØš˜,YķđR6é˙ųĪÆčM7ŨÔXjÅpĸƒ ņė•s`ańAęŖ|üė7ûųĪ6 áCŠũYyfˇŨv‹C–\ —95’5ā‰ļošå–3–!ģîēĢuëÖͯNDų!Kš7Ūxc$´GuÔtĸ¨ĢˇÁ#˛~ße—]â2(67PGÚâ†ļCNpK-ĩ”Ąd!„™ŧm€ÉųįŸŨ‹-ļX ˙駟b8äÎËö´2úŋøâ ;î¸ã B ŠEGYuHá"‹,RĖīu’-„€B %đåO/š4ˇ!jŠĻ´äķ9ĐķZŊž!pŠúũøÅđŒ#—ŦÕĩiûÁęĻ„Ķ ÉōcF†õėŲ3^h瞆‰ÔP~΃6Įɚ‡y]ˆƒ”27âI×PY¤Ã@~ĐŪ@xĐŽ]pÁÅ|^uqYžĪå{8Äq=öˆË…ˇŪzĢ]~ųåQĶ„f.Ī@Ž(ķæ›oļ{īŊ7jĪX~E{†ņ˛ŠÛŋūõ¯¨2Ĩķ!oJ ?:Ba‚Đp ã?˙ųO<ũ‰œl}].ÄČëNēÔ,ŊôŌö×ŋūÕN=õÔHŽX=ė°ÃĸRN)kÉ%—Œ‡|ÉČô2Ųc†ļÕ׿ķĘö´}H!8B9…JŪM6Ų$4; :Ļ^NtčŸB@9€ŸįȚ”°å5Ō“/;˙ÖÅŨfõŒÍųÎ „.äÍ%k%Sø3,‡ÖRũ÷Öb@ÎŋÅ_<.IĻQėSC‚FĻC# ˆ’4ŸØi@}ŊęÉn#ndø§&Ë—æŽOf@œ8l€ĪëéäÛÃ<u"Ė'dŠ0H+™ž/[>~N mŧä’KĸöîÄOŒš1>×iÁ@ĘĀ9ŽyCC…Ÿ€ųčŖŒŧnĐVyšŲúē\põ4ž/ĩŅfąŠ˙ /44l˙øĮ?b_œrĘ)År!Rā5^&'né/'¯lOÛˇoß"–̝žz$kR°đ2H벲eĘ/„€B %@Å<ŸšTŖæKĸYÍų˛sŲ”ēŽA {å§}–,•ëîÜ=k9•ĢŊ 9 -ŲO_° ÆōVš˛ÅEc` NšČO¸5Ÿč].á\„{+eŸp vÕUWÅo‰]ũõqŠąTÚŲžå–[ڝwŪŋFÛ{ėą˛‹!=Í„ŽëđÃˇũ÷ß:ōZļĀLBúí/ųKQKĮž3ĘtōD_ĪÃ÷ô0^Îė(C2…€B@Ė ޘq)Qƒ ĄPqÂæi°ŗųŌ8į[Ĩ8L.Y+•x:Á9>ŗáä ÉUgÖ@¸˛KĄŠ ¯ļ“âŨīņižRnö]xāQ›uŪyįĩzžŧĮ! KsœLlnCĮąWÃ˛gšfŲe—IŅXA:Ķ+{ęļ\™Ųth1})—΍ I\f™eb24_ŗÃøFL–=1Ž!ÍžÁĖŽ˛%S! „@9°ŊË {ąũ0kŌRÂFŧ›4Ÿ‡•k—\-W@š’Ã~&ˆ D(oŨ5MŸuCž 5´jžė™%b¤ãōp'xäM \V~žŸ ųhŽ ,˙ĄĄb ÊV´Hœvt—'cfÂØ@Ī9>g1tčи÷‹ü,-–köÛoŋ¸qöÎIJ–!–´“šN˜Ë•įé8ČÁžÃõÖ[/nđ÷Ã|Ž“ĸ|Bm ‡ N>ųäčgīš8Ns6Å ÕDŖÆ‡s7āÍa ũ€Ÿå^4āÆ˛ēŒB@9…ķ_āøŽdpÛëaƒ¨y8yfeūjV˛F%Ņ-ŋüōÅĪ@xÅËą!Z548|˜‚ä¤ b–jÍ<š¸ũ pΌ„üęWŋ24klŽį“öąĄA‚ȝvÚiņ0Āģīž;3ĸsĶB<Ø ÆOjaØ` BZŽa$‡ųœå‚đ@”SŒĘ•įé ^÷ß<¨@šQOđ3^4§×^{mÜĪÆ!.ˆá¯ũë&“5NģžqÆqŲ›ąÃa WŖ…L3čųú‰“ˇ2B@! æėyg…‹/@°ōä„,[‡ŸŪ÷<›Ž›đˆiĮ>C&{×TyĮHûčģ:[~Á)vō6 0(§°ÆŌ@8õˆ6Ō•ÕĖ9q›ĮÎō{Ø¤žĀ 4VTYņh™8ŲØ\K‹^čˆ#Œßƒe͉ŗbXžd°@¤šCûĮ~AŪhŗ/{æÕM˓ēĻāÃ!‹7ŪxÃūüį?ۆnOˇŌīĶ´Lú-$eåŧiåB@!Đđy/Vš˜3KæyˆZŠ%ĐĢžéhŸĢļU­˛Kî/ĖåŲšŽŲ5kĨ*\N8ÄMÚĩlEŗųŗņLčh—f•ü¤å¸†' k7§PššÃpČĀ?‘ŅōĐfĄíjĖđŊ7Žæ0ô>.ečkˆœŒB@JA†B‡ų ↂ…ķ(üxČÚŦhÔŧ­EÖ`“ŲĨ^QŲ­ –šũķ)­ĢejB@Ė+0-žQĘ5;ME‘ĩŲŲPÉŽ,X•B@! G ÷ĶgS ! „€B@–@@d­%PVB@! „€h""kMNŲ„€B@!Đ”ĩgmøđááã­ĪļD}T†B@! æ †OØ:´ŗņ_{*‹Ŧņķ?§qÚ<œ)„€B@–@ā”[‡ØČ¯'5Z”–A…H „€B@!0įY›sØĢd! „€B@4Š€ČZŖ& ¨ú IDAT)B@! æ"ks{•,„€B@FYk"%B@! „ĀœC@dmÎa¯’…€B@!Đ("kB¤B@! „€˜sˆŦÍ9ėU˛B@! E@d­Qˆ”@! „€s˛~Á`ÎUoÖJŽĢĢŗO>ųÄ `üdVģvíŦP(Ä ÉmÚ´‰&ëĀã–KĢŦēzæŪAڄî_pá.ÖwûĨėĐWŗŽÛÅņ B@æF@ķRåĪģ•8´Z˛Æ ņØcYUU•íšįžÖĄC‡æžį$¯XaãaļôBŨ­*q¸xøkY¨ˇ b† ”=vŗ)á_픂 ųvŒŨsÛģvō˙=cžĨo/­öÖ¨@˙…€hq4/ĩ8äM*°į‘™SA4ŠŲs&͇~h“&M˛wŪŲÚˇo+&­~g"¯ŋ䟆EkĀgčdŗ …*_ׯÆc˛6!\[ãÂ?;č ö„ēĒ_eînû¸ąčÜÖnûëûsfĐĒT! Z5š—æŽyˇį‘VŠ>˜2eŠõīßßV_}uÃí˜UU ”Ē臘.ģuá0b\ÁFN˜û5tw´ëŸū¨ÔÚØs˙ĪļÜ~ˇ W Úĩđ¯ŽŽ´kAÃė 5mlíûØŊ7ŋjGŋFXN­nÕ‡'„@Ë! yiî™o+qiv˛6jÔ(?~ŧ-ēčĸņ.øūûīíîģīļ“O>šėģ"›įĸ‹.˛ã?ŪzôčQ– nŠššëŨģˇÕÖ2qׅ+deōæo*QsaŠ˙‡~°{îšĮN<ņDn0=‰Ōü ųīŧķN[e•Ul­ĩÖ*Ȇԇɓ&Įw\Ä$/Ū jŠü­5~LMÁÆíëUĄ¯ ÁžējīŋŲĪÎûÍ1vá Ŋlõ6‹}P’ÖÖVÛ¤ˇĮ‚ŨíË!¸:‘5Œ͂ĀŦĖKT@ĪųzłwÆėÄŖį‘f]=捪l÷Ũwˇƒ:ČÖ[oŊˆé!CėĻ›nr|˲ŗyŽžúj3fLYyIY„ŒpsL™R/&ßBОÔMŠ‹áø‰Į˙ÜsĪŲ¯ũëč˙ūģīc}Ķø˜.¤§Į{ė ų=ŪåĨ~–a!€ČģīžûėÃ>œŠüyõEū5×\cãRņyõĪĢ_kË?Ąļ`ãÃ5ą6ŒƒhY°G›h×]rNC×_zļ;!Əm|Åôã‚=6¤­îŪÉÆWöxSB! G gĪžņe•ų6ÚČŪyįÆ35!ÅģīžkĢŽējr–Ÿ…įë˚™—Ōy¤ĩ=§Kĩ§ļ–ųē~^ž“í¯Äy¤Ų4k¯ŧōŠ}ôŅGöōË/Į1Ėœ’F‡ˇmÛ6Ú¸ĢÃ!ƒT“äõĒ_3{ä‘Glģíļ ÍšĢĢ_6%ŸĮ{úÏ8"žē(—°l|Ö?2)öÍõęÕ+æ‰2ČGv9ųŗō˛ū)Ô%Q7ŲøyŅ?‚6ŌL´já_„įąģoĩĄß ˛ö:{°=t÷ÍļķAĮ[ đõKĄČ¯Šŗš°×­ĒSģbņö&#„@ķ đāƒڒK.W.Žēę*ûĮ?ūŅ<‚)lyõÕW“æuŪvÛmöÔSOvšĻ)ķ’ËžWžãwÜq‡=ķĖ3öˇ›o.ކ€Áœh%Î#ÍĻYcĪ7ß| wîÜĢh¸)yÛéÛˇ¯ <¸~É%—ØÚk¯m{īŊˇŊũöÛÅđRŽũ÷ßß †ČÚäɓYš&Ū@ bS/ۊ¸ Sũ/žøĸm˛É&ŅīoL×^{­­žÚjv衇ÚĮĶ˙;,R_ŌļûŽģÚíˇßnëŦŗŽí´ĶN68´ßßHķt¸ĄˇŲf›˜>–ˆäˇß~kģė˛Klķ_BžūēëŽŗwØÁ6Ūxc;ûėŗ‹õãĄ°k(gĶM7ĩË.Ŋ´˜ž›˙­7Ū°­ļÚĘÖ_}{öŲg‹íĄŦX^‰öļæøÉA;6a2KĄuŅž×Vûm×>ö™]3õÚzŋcm\͔Ž`cƒvmäÄ::ĻÆL/5! f|Biå•WļĪ>û,pôŅGۖ[nŸc˙üį?‹…˛’A8ķĪA ĪŽ_üâļŲf›ŲkŦa?ũôS1Ŋ;øTĶžûîë^ÛpÃ íĄ‡ŠĪPō@0<ÃwĪ\Ęéͧũėg?‹aÄŊöÚkĶɸüōËc:ļč\xá…öôĶOĮ:|ūųįö /Ø!‡BļFM9ķŌņa{ Ęžų˙ú×ŋŠĪuæ$Â7 íŧį8[cļOōú<°ųæ›Ø2W<ō‚Û‘Gˇäėž–pĀDšôׇščücQūÁaĨŒ9—8ļ3ŨČķ5ķų-ˇÜb÷ÜuW\IÛ~ûíãüÆŧ:zôčØOhPOúÕ¯ėģīž‹ųKÍ›Ė‹—†ųyŦīÖ[ĮąRƒ•ŦžaeĨ.Ž$…:øŧ×~o¯ĪĢMõWâ<Ōlšĩ 6ØĀŽ9æÛb‹-ėŒ3ΰßüæ7ņŗŒ^ČŲ_|aorÁŪŗģBįžzꊹC¸‰x Buũģßũ.ŪT ø .¸ ¸ŽĄt|˛­Čĉi›ŨQG5%|ļŨkf_ üĘZhĄHę&b‡FeØAķĖĶĪØUžĘÎ?˙|ģūúlذa1n˘Ņ6bÄH{=´g5× šš‡íŦŗÎļ;Åāâ]ų?üpĄôø|<(ūøĮ+l„‰vA¸ōĘ+E’ļßžû… .‡ös[dá…íŠ+ްŖŽú?ÛvÛíŖVoėØąQ>mŋ-En–'žxÜūüį?Û:k¯ķ{ųõí%å´öÖŋ˛´^˙ˇcƒflhM{Ąõá•,O1xn|[ãš5üė[3ĄÎ†L y:5Ûmø2B@LE€Iœįâ 7Ü's‚O:餸<ĘËúaõâ3aÂûÃū_ūX`8Ņ“bôÁDōˇZBV3R…Ā×_Ÿ“÷ß$$<+y‰&Ũ[oŊe|°Ŋ˙ūû‘„ũū÷ŋķĶĉ bæfäȑáû‹m‘E‰ķ\ŗÆŪhæŽrL9ķŌá??ÜVXq…xHî”SNą]vŪÅ&NšÉĖķĪŋ`ķĪ7_x^Յ­AõķJúœ˙yČģâ !īûũŧ;‡ŧÄŖHyūųįíŋ˙ŊĪēwë‰ÛØącėŅGŗB;ųå1á[¤?’5ƆįA—Ņĸũøq3ŗĩéÛoķdûŅG[‰îšįßvdčÃ;īēĶēví>Ÿõx˜;¯ŗ[oŊÕN8áøįÍãŽ;6ŦĖŊb×\}MœĮž|ō‰Ø/?ô0OéЊ°%Ô/m¯ĪãÍ=¯Uâ<Ōlš5ę˙û˙ĪîŊ÷ŪxcĀŧaˇČ„mÛJ+­;œpöpqÝsÎ9qS?ė›¤!ŗâŠ+Zˇ0Ø3ŧŊĄíãæĀŽîŠūĒ*üUV.˜üļÛn[ôCđ\pÁđ–u€uęÜÉöÛo?{éĨ—B=9¤P8üŌyæ™ÖĨK×øfÉŖ<âXŧ9ōöáå‘y‹-ļ¸-ŋüō‘”õë×/Æã˙öģoãÄēd…úņfyÎ9ŋĩ˙ũīkÛŽm"ß"ĻÔaÅWŠ$’ô^žˇo^펨MĸfJ›h×âK›~M nÂjŖm!ŧʂÎ&…kJ›jëōˇŅGqģŊ/š„Z1H+ ~čl…@. j 'Y:uŠĪGž‘ÉË<Ī1 ĪSČÄa‡ĩ8o„z=ö¨ß^Ęgū$=WŠyĶËõöB¤Y‰‚ØsP¯4đ5¯olTø7;ü•84YãÄ#ŸÖāˆŽÁ^jŠĨ"3vPŗ6ëī,‹^ũõ‘´dãķü,zĮįÅ{“NOq *. ëö¨Â[ląč§ĶIĪI@´d„CĐŧ1ˆc@Ĩƒ-°ÄšŸAļãŽ;ũ@š_~ųe”ƒšŸˇI4Ž,¯˛–ĪÉöņfĮZ;åp –‡¤2ëō‘‡Û/d“ãíŖ=ķšŋsģđĀíX˙Pqĩ1xŦģõnöâWØØá?XĮ.=í€3ūbŨ‚ ˆjÂá‚Úp*¸ĒĒÎē´}¨=kqÜčŸ˜Ũ°˛€V m K’<ûX‘ņ=G˙÷˙'c´q‡˛Æķ‘\ž›ŒKråĩRí@Ū AƒĸVȟؤ/,5ĸLĀ|úé§Æg—XĸÅp`ŒųÁ ufEĸטil^b‰‘Uö“ą5ŲĖ+žJE8~"h1ūœ÷ŧ`ÆI[ĪKz sséŲ_Æv$4•ėĪŖ,Vȟūų#ļ¸xāãCžĖ}ø‘ås*ō0„cˆãÂĪ23u`‰ÛĶņv76~ŸSņŗÜũã?åą%‰0–˜ŲĶÖŋ[3l;ōöÎÎyŽį‘f#klNüío÷`A‚`˙¨EųMÎRļĖį>ĐÂņíą#Fğˆ*•žp6ōŗ¯€ÁАá­Á6Æ;7 ˆ ÂpC4yscŖ*Ē\Ū ÷ÁˆyČʨČAíËōŽĮF~H-7Ų{īŊ5ŠZ íaŋolʤ¨ĒŲøI>ČÛYgU”įe#ßۖ–…΃˙ēt¨ šĩöŗĐ=ĄÂpčÖyAÛ˙ÄKė–sˇŊN`ßãbaßGũ^5NøBØĒĢk­ëäļÖ­ë4Mđ<Ąš,Z ^h/ģė˛8o@ē¸xn2@(–]v؏ГŖž‰Ė3„ķLäĀŲŦV- d‚˙ū÷ŋQõ€Č@$9|Ā\å%ßšäpÂÍaŗ={č8€ĀĄƒÆLcķxĐVV¨V ܨ{÷ØÆAŗe–Y&îįŗtŪĸÜŧŧėņ&?ķé=ōpŗ4ʁ7ʂ¤†Fėoû[\†Ļ­Ä1Į‡ÜĖ5î÷yĮįGülr [—X*æ0^Cķ&eąGŌȞFČįyįÛL_ŗ…ˆ2[ÂTâ<Ō&løŦWŋLEÖ ‹‡•ŸyĮHûčģ:[cŠvå 5Š‘oėd@Ņqå>` ÁƒEĪĒĄūDX=ûãÉāaypcxųU8ŠQÄxÛũ-‰:ą?Îķ•Ëčŋúę̏ ĩ-ÆËs­ ōĐŪų›˜ĮsÚí$~w“?[O_n}æĨô~ŊÖí0 Ã/l+ŒÆmúŊĖv;ęôî˙zÂļV†ƒĄáôh­}ųí(ûņ“ėŌC–Ž/ĮŽ^’ū !0;āā:sKt]ēt‰Åđ,‡D¤†‰›ôhØfÅ Mâpš#äņŦĪŪī^¯ŧrĐ•;gÍĖŧDZĘe.æUđ nāÖãuÍÎĖ`É–ūe†RéŅ`Ą4@Á9EáĖQYų3ãgÎŖŋRlËĪJ¸R_ōŌúēTũ“×”ø–œGNšuˆõ˙z’­˛h•]rp¯HHÔĻãŽYi*o é~„´ †ÜŠr}CrˆŖCØlîįˆ:šęŲ;Ûm4zhąÜīęXnu™ØŸMŸõŗt‰ú ]š?•GŗōŌxōzŧßlîĪ–'=+Ÿ^Ũ¯ô û<Y CĄž°M%môÅág:˛ž¤…3#áÅ$¸ƒžkÖaB[k=ÆžÆĐĒÅq;Q˙„€˜m@.0Ė\n˛Dp^vg•¨š|ˇŊ|÷ģ]*œø™™ŗxF—;/ņãųOžtĀŋøâ‹į…RĪũtĄžyķÆŋ˙ũīøy4wœ„åKŒizę›úK•—'Ÿ|yõ/G+ržÛįŋĻ”Oū†ęW*žį‘f%k4ŧ 7;74ûÃØwæęZīl¯cö¸u6žŠ~ž•–gš*Īe)Âē(yx œíȚ+v=ZĩÔÕɐļ„ŦÕņúĶgļø‚ĩĶMŽŋl! Z˙~[K´ĒÜy)īš–Ö¯9âŲ^ŗMØzÃŌ/KžhrÜ4‡|—…=7ĘĢÄy¤U’5{Û8¸Ā÷Ũؗ†–-}cK“Ü­N]ÂiNš´e˛HĘĻ6/uˇ ŸīĀTW…_0˜<ņ dŸ<÷´ûö#;(ė—I^SŗËB !Ā|ĀwĶZĘTÚŧ„ÖŌ5—,7ĘLC į‘VIÖ`ō¨R9ŧĀwßøBĩ㴁(׌ ‰åÁ}`3ŒėÛāŒ9"„€(ÍKåc5ˇĻœķHĢ$kt4 ąޝ8s›/0ûÚõÜ:Tī؃Q6í.~1‚ˇmĩ؃ŗ¤ yÍK­wĖîy¤Õ’5†āq¸€o”ųĻÅÖ;TÔ˛YA€ą"’6+*¯å  yŠ”æÎ4ŗsiÕdÍģ{včeČB@!P.š—ĘEJé@ üĄ /! „€B@G@d­Å!WB@! „€(‘ĩōąRJ! „€B@´8"k-š B@! „@ų4Ûƒŋūõ¯å—Ē”B@! „€hÅsĖ1ÍÖēf#küúÖ[oŨl“ ! „€B@T Œßâä“`|“›Ÿŗäûy\žį:%üčôK/ŊÔŦÕÖ2hŗÂ)aB@! „€h^æY{ų嗛ˇHkéōōĒĶž3ŗmhéōfĨmĨōÎjJÉUøœE ļļ6VĀíæ¨Ërģ9dJ†B Rhq˛öÍ7ߨņĮß,í¯ŠŠiTNs”w÷ŨwÛ`ãÆ›Ąŧ†âŌÄ+Ŧ°‚ŊũöÛiPtĪlfĩŧ*Đ0Ëi–‚§vZËcĮŽ- rÆgY‚’Dü´×ˆ#ŦOŸ>6`Ā€$ĻŪyä‘GÚ×_=CxCÉl(¯â„€•Ž@‹“ĩ+¯ŧŌN>ųäYÆ­ËēëŽÛ¨œæ(o§v˛>ø —Ŧ5—VîŧķÎŗe–Y& ŠëÚ3ۆY)oēÂđ´ĖhŪ<Åoå~ôŅGVY+÷›Y@_|qëÕĢ—õîŨÛZhĄböūũû۞{îiƒļÃ?Ü~ųË_ã\cļÎ:ëÄēģß”’éņ˛…€s3-JÖx›~ėąĮ렃*böúë¯Û&›lb .¸ ­ēęĒöŸ˙ü'Æ]}õÕļâŠ+ÚwÜa›ožšmēéĻvįwÆ8ˆĶ\`h€~˙ûßĮëūûī/ĘtGļŧɓ'Ûę̝n+¯ŧr|s‡ø0iüå/‰YXjä Ȏ;î'5"ēwīn:u˛Gy$ĸ >wŨuWĖĶP úõë5Ôw„ 1˙šÚ†Ļ–įõ8ķĖ3#i\oŊõ,oiunÅ ‚Ļf¯ŊöŠīģīžŅŋķÎ;G?Z͍7ŪØ:wîlkŽšĻmŋũööÉ'ŸÄ¸§Ÿ~ÚvØaƒ0>öØcŪØŋRc—|ĨdŌŒë5ÖXÃÆoh‘¨÷ųįŸß`qœļ&ߐ!CėŗĪ>34ĩ^Άî„BÎvß}w[{íĩíoû›učĐĄø;¨ĨÆ|cãķŨwߍ÷åĸ‹.ëuīŊ÷6X˙4ōškމå_tŅEÖŖGbÔM7Ũd[lą…=ņÄöĖ3ĪØYgUŒ;účŖ­oßž6jÔ(;捪lŖ6*Æá(%sēDō! æVF]H¯Ÿ~úŠ&ėÂĐĄC G^ųiaŖĶ>.}헅°ØāŽáDÃ&LH…?ũéOÅDaâ)„å‹ÂmˇŨV˜4iRኧž*„ˇíB˜@bš0š¸~øáÂ?ūņÂb‹-Vøøã aé¤V!­Â 7ܯįž{Ž(×Ųō„­°üōË6ÛlŗB˜P aR*„7ú˜%L@…wŪy§PWWW¸öÚk ŋúÕ¯\T!hĀ ë¯ŋ~Ėķī˙ģ°ÔRKÂ$ãŠ#Á˜1c āÂ$[”7+mhJyŽé-ÍEÄúh1ú’K.‰€ŗä’Kã˛ŽŧōũôS÷m&›°§§Ā¤š Ú§b\ļ.W\qE!ŧųĮø†â\ĀV[m5Y#ŧŠmhjya¯`!h*c• 7ßÔĖí˜ũá(œ~úéąIŒ­_˙ú×Ņ}Ī=÷Dr”… Z›BĐ´‚Öą@xĐŪ¤IsŨŨÆdŌܐ§r /NÖ;)Yˎ ŋWxņŲrË-‹E„åĪB—.] ß˙} khĖ—Ÿ=ôP;—_~yÁ¯ ),\zéĨÅršę O¨{ĐnG‚ér‚V:’ÎW^y%ļû‹/žđ(ŲB@A`N’ĩ[ŊõÖ[mŋũöŗŽ]앐, .°ĀE?üér!ËŖnØãÂwN܄Éĝ3ØyåĨ‰˛ûĮBOÛ!‡bl°A\îüã˙÷”Ĩy˛uy˙ũ÷‹Ņ Åå8šÚ†Ļ–4ą|#ĻM›6ĶÕhnĮŒåą õ´ u1– =öØØžŧqÆ˛ ã C_‡ĢŽŽļ[nšÅļŨvÛŪĐŋ<™éØmLæüķĪŋĶÃ˛sv˙UCå˛ “7n˛c‚{…%Ķ@ʋ"YÎ÷1PΘĪ+‡ũnČ`Sŋ_,Cīŋ˙ūÅršâvëŲŗ§qÆ´ėvã7ÅtėØŅnŋũö¸üI‡ĩbœB@ÖŽ@‹5&˜ëŽģβâtxmS|(ûŪĄaÆÅr:Y†7÷xrŒ‰įúë¯ˇ°Deđ!:ö¯paؗÃeLŠōbd‰aY( Ø{īŊ#ĄdBȚ°„‹&ŌH HëŲP\VŽûgĨ M)ĪËÍŗ[fė5Üpà #ų‚L„åîØÔ YŠûķŪ|ķÍčK¤vŌI'Ų—_~YŒš) š9 Z¸¸’ũd ™ÆÆ.e–’Éū9öZōŅDö^ũüį?ŗĄōˆ[e•Uėĩ×^‹É|˙fš'ī^”˛O”=hŗ›ož9Ž_ō56æKO04hPÜŋɞģ#Ž8‚–β@Z™v‡eęHøØ˙Æ!—ėGļ)ÃŪBę&#„€˜Wh˛ņaōrM†ƒË†iŪĻ;î¸xȀÍāhCŌ7t4`hģ8 °Ī>ûÄāžŸ ČlÔfĸ@+æ“EŠō˜Ŧ9Äņ#“™1‹,˛ˆmŗÍ6ļÜrËYØû'O0œzęŠq‚ûđÃŖ&ŠúfĨ•VŠŸ aō+‡\ÚM9lFįĐî|¨hfļ M-IžCh-&Nœm&ëßũîwą­3 ÁŲgŸ5eąaá_Ø_ûC á@ ›ė Įđ™p8Îie"4dģĨdŪwß}‘„„íņĐ ÚMúå„Nh¨¸w衇§Š{°°”i47y÷ šĒ‹/ž80ā0cņ N y—™7>Ã^@C É Kŗ†\Đđ5īY1W]uUŦ'§@šņË! „€Y›¸q-A‚ˇo´,,͜yĮHûčģ:[cŠvåĶŽØ'ɋNČ@öMØ#9Ņ iáx})Ã䕞 #'ÞĩxR´T>NxrĨËĢå”WJšē°§'.QåĨ › c0“}Ö4—M›ú›Ú†Ļ–—–íîր™ˇ>kXE{›~.‚4,ëŅįW^(X“7vgUfŠōš?}2MĶØŊBÛŅ CŪ˛Ļą1Ÿ7>]xĸÅd™˛9 mÛnģí,ėMkq’!„€h6PôøĪLš–ŋÔĪMųj@CĐ UHIDAT8åÖ!Ö˙ëIļĘĸUvÉÁŊâĒsPv›R‹Ŧ%|đÁ Õ5Æe‰Ÿ8øîģīŒĨŪäK}H—ˇųė}9å•ĒPŪd–ĻÍ#ißPœ§Éŗ›Ú†Ļ–—W‡Ö€™ˇ+¨Į •%j„;ŅGĶÔ“ģÍ!ŗT=¸}Ī™§)į^ĄíĨÆvŠp—Ÿ7>=.Ũ'įaŗbŖŅd‰XF! Ļ!Đ"dmZqåģ˜|„oĄÉ–D€˙ėÅ*eÂį6âō|Šø– oM÷ ¤’oāÉ! „Ā4*–Ŧą/‡KFĖ 8å>ã1'Šžé2u¯Ė4dĘ „€˜Ģh‘s"ĒŦB@! *‘ĩ ę UE! „€YDÖ˛ˆČ/„€B@ B@d­‚:CUB@! „@‘ĩ,"ō ! „€B ‚YĢ ÎPU„€B@!E@d-‹ˆüB@! „€¨ DÖ*¨3T! „€B@dYË""ŋB@! *‘ĩ ę UE! „€YDÖ˛ˆČ/„€B@ B@d­‚:CUB@! „@‘ĩ,"ō ! „€B ‚YĢ ÎPU„€B@!E@d-‹ˆüB@! „€¨ DÖ*¨3T! „€B@dYË""ŋB@! *‘ĩ ę UE! „€YDÖ˛ˆČ/„€B@ B@d­‚:CUB@! „@‘ĩ,"ō ! „€B ‚YĢ ÎPU„€B@!E@d-‹ˆüB@! „€¨ DÖ*¨3T! „€B@dYË""ŋB@! *‘ĩ ę UE! „€YDÖ˛ˆČ/„€B@ B@d­‚:CUB@! „@‘ĩ,"ō ! „€B ‚YĢ ÎPU„€B@!E@d-‹ˆüB@! „€¨ DÖ*¨3T! „€B@dYË""ŋB@! *‘ĩ ę UE! „€YDÖ˛ˆČ/„€B@ B@d­‚:CUB@! „@‘ĩ,"ō ! „€B ‚YĢ ÎPU„€B@!E@d-‹ˆüB@! „€¨ DÖ*¨3T! „€B@dYË""ŋB@! *‘ĩ ę UE! „€YDÖ˛ˆČ/„€B@ B@d­‚:CUB@! „@‘ĩ,"ō ! „€B ‚YĢ ÎPU„€B@!E@d-‹ˆüB@! „€¨ DÖ*¨3T! „€B@dYË""ŋB@! *‘ĩ ę UE! „€YDÖ˛ˆČ/„€B@ B@d­‚:CUB@! „@‘ĩ,"ō ! „€B ‚YĢ ÎPU„€B@!E@d-‹ˆüB@! „€¨ Ú6g]ž}öŲæ'YB@! „€˜įh6˛ļá†Îķ` ! „€B@47ZmnD%O! „€͈€ČZ3‚)QB@! „€hnD֚QÉB@! „@3" ˛ÖŒ`J”B@! š‘ĩæFTō„€B@!ЌˆŦ5#˜%„€B@æF@d­š•/,ĮíiÜNãķÂŌxå~>FÜNĮG^X¯ņŖņãcÄít|ä…Ĩņ??>FÜNĮG^X¯ņ3oŒŸũēŲČáŲžŸŅ_YĢŽŽļ.]ē˘; )gā%Égp*ãÄwВá'ü˛/SÉđhÔŠņŖņŖņ3Ŋ2ĸŅ›&I ûG÷OSīøU9ĻL˛VeŨēu‹ōŌAénˇIānˇĶ°Rîŧ´yaĘ? ß‹<ŦōÂŌ<Š;/m^Xš'uįĨÍ Kķ¤îŧ´yaižÔ—6/,͓ēķŌæ…ĨyRw^Úŧ°4OęÎK›–æIŨyiķÂŌ<Š;/m^Xš'uįĨÍ Kķ¤îŧ´yaižÔ—6/,͓ēķŌæ…ĨyRw^Úŧ°4OęÎK›–æIŨyiķÂŌ<Š;/m^Xš'uįĨÍ Kķ¤îŧ´yaižÔ—6/,͓ēķŌæ…ĨyRw^Úŧ°4OęÎK›–æIŨyiķÂŌ<Š;/m^Xš'uįĨÍ Kķ¤îŧ´yaižÔ—6/,͓ēķŌæ…ĨyRw^Úŧ°4OꎎŽÁÛ¨)‹ŦUUU[§Nâ’gļ”āŒŌã°Ũį~w§é•_øĨãÁĮˆÆO=)îNņŌũŖû'>Ft˙čūņgƒæßz>â÷Fzŋ8FØsŠŋTũ˙öÎFŠ2‹ãĪaf‘EEd9 hd¨¸‚QŲÖ[4ÆDâ5ęzĮŅD"ĸÆ#¸xtUĸFQ`WŒēČä˜Ãíß×ŧύéîi`zÎ˙—ÔTÕwŋ*RŪ{U]P™Ŋ‚)dM9‰5zđú>šį#x™īãųņ6™ęeĘWû]×!Î"z.~ģģ3ĸ<2‹ßŽ{+Ę(Ę%Ûq´Líu˙q?xŠŪ™ŽŠëežWû$(LĮâ×đīŋß3íõéŽLd”/" " " õ€€ÄZė"Ė›7Ī^xá+--•ÔŪéöíۍĪĨlÛļmŸŨŧyŗąžõë×īS?šņŠ+Ŗōōō=^Ļøî125Ø 9ģA÷ĸīi‚ųŦŗÎJõÕącG;ųä“mÔ¨QŠŧšúČ^yå{íĩ×렃Ēv˜†ÆˇÚŠ‚ˆ€ˆ@Ŋ'Đ ,kvîšįÚĶO?m;wļ×_Ũ–.]š¸Œ ¸đ íŅGÍËXņNxāûōË/íĄ‡˛éĶ§ÛØącmÁ‚vīŊ÷Ze%AˆŲ̓>DŽ×:účŖmʔ)vâ‰'zVŊÛÃģuëÖöÆoØ3Īi?üđC`5tčPģā‚ Á4f˘PŸ1N‡~¸ŨvÛmÆ‘ķĩfgÃøˆ%,[=zô°e˖ŲgŸ}ÃK#×bŨēu Ö8žû÷ũ÷ßۄ lņâÅáüîģīļ#Ž8ÂļlŲbĪ=÷\āU´˙ūÁē8iŌ${įwėĸ‹.˛—^zÉnŧņFû駟BהĪĶ`ŅĢmžÎA{ÆO`ëÖ­ÖĸE‹=Zhƒ°Ŧąĸ_ũÕ^}õU{ų嗭OŸ>†ÕˆÄÑķėŗĪÚ AƒėąĮ ņf<¤Ÿzę)ëŌĨK¨ƒ@s‹}ãÂÍēzõę´1j#GŽ "ˇV/ŌģīžkŸūš=ņÄAüüņ!_˙ P˜ßqĮ—˛ĸaMãœ|ˇ$2×>ø äŸqƆAĖôíÛ7pApĀ C‡A¸QĮŽáøž{î â åđáÃmâĉöūûī‡ŠÃ+âåüķĪL闔¯5‡Îwūá:°^Ä&ŧYŗĮí=ōČ#A´r‰Á›>ųĩÉ7>žÎE@D@„Ú[oŊ„Zôš›ë*ŗŠĩÄ3­Ū$‡•ä’K. ąH¸yč„u…˜§ĶO?=Ä,!B05ūøã!& ("dųōåa=XžpĢķ„đʖe¸ã\Ņ'y¸Ũˆ)ãËšH¸uŲk¸#IXžøâ‹`%Šē[q‰"Pf˘D…—1/,L”Åb˜0,UÄųąį!¸ĢKųZŗËĩÅũøÍ7ßņ;ūüģ×ŗgO;öØcC5ŽŽŪN8!XÉ$NsÜŨ\s¸pOPv¸ĢéWi4ei^§ļųú¸Ú‹€ˆ€4>Ä}G…úÄSåÎ|Úé,ôė*ûŦ/´,IĒĩ [wöVĨyífđå“ĶĻM o†ģÆg-“††7 qqáĒDdņ ?í´Ķ‚ sÎ9'ˆ->k9Ō­WéVCÜ1PÄxE,î8\¤ˆ>‚÷k"1/ŪúÄzxË-ˇŽWօšá†v‚5Ũwß}A`M$žŠ„û’—!ˆĮĸ7§'ŦfôOė/E`9â“(ĪåõŌíķĩf‹—8.ģė˛p°žņŌ/`Cdb-åđ"×qŠ+ĄË›ĩy䑯ĩ"]ũõ!‘—,¨ĪK ¸ÂsMĩÍ7×yŠžˆ€ˆ@Ã"€…8k´ÆYã™GZŋ%НZˇĖj;ŗũV–Ũ”ĸy˜O˜ąÉ&Í-ŗ‚„f›8ē•í_\7Ļ6â”x€˛‘ˆe‚ÂKĖaCįXØ9äSī÷ßsÚړ8vWõxØSƚ8lŽ|ŠËÆ9Ž5Ę›~ųíânļ0Č^ūa.ĖKßc<Æ`žlÄĒņs‚ ë%1/X`9cí$ö”sM‰gŖnŪĻäܙĐΙŌ.Ę<Ÿkf\ø’|ĖÕ¯5ų”3oâ‰KcžĖ›ĩą§.ķuN”SŸûžX+ X›_[úŽæÕ_æĄ$" "иąēŖ 7Vûą­,5ĸ‘:ĩUĐ<ķxŽESVËZ¯Ã’J3Ũ‚˙•Û€îģ,5ŅNō}}¸2áhrąÂ:úËŗhØlžüØâČyžOžˇE¨‘ŧĖÅ@ČŦÁ?.žpi"}mŅ!äŗļh9ų°an. ŖėČŖ]3}Gûá<Ú.ŸkŽËØņÄ5āZ"Î|.Ôņû úåfįēų´ļ§tyĩ͗y(‰€ˆ€4šĩĨk†‰Ō¤Mˤ8‹‹4'’VŦyåŪ ­¤hģmK´>^¸ŖÎĚOļ)í ņÄuáKûXƒ”jž€øÖ+æ´t5˜L_ôöáŊė×5­KĄËč$åÁĩq ę‘T{s–”Ûĸåģ,PŠtPĢpķú'Ejuā&2˜ø6‘ ­eŠ€ˆ@ Ėrj+ÖWØĖ˙&ÅZŋ?›ĩųSU×gtziÅB͡a}›Yķ¤•gÜ´RÛ˛ŊĒÅ'ÚĄŽķK Å-ŋ#6­ŪŎi]o­VD@jŠ@܂?÷qĐQcĻl ^ËD´ļ í“jŽģŧ^tŸöXÄ ?EŦĐÔųĨö¯YI]×ņāûįßZØa'ƒÂŖéXD@D@D@D =<”žVoLūŪ÷ßûVÚȁûņæūrÂ-šŌŠ5* Öž&ˆÁ6ūãr›Ŋ,)ĐJ!S§ö.ļŋö)ļŽm%Úĸ@u," " " N tĮá%Mb˙ )ķ4 Kš\„/ЏŽX#U+Ö¨„e7ycëš ļÉķ*ėß nßĨøŠũō}ƒØ/|âƒöJ" " " "ĐÔ đÚU*Í?~ Bˆ˙eģ >Ē0%ÔøJ_/ā“ZqĄF›*–52kî Å篧ll˜đf,.´E̊ƒīm´S¨J yŗJë×šĖ†ô.ŗ­‹Ã፰¨!ÔÜĒ–)n-ãģĸ4@áĄô°˛ą!āŽędÖŗŨ[ģšÔūŗ˛ĐÖmŲĪ֗ØĻmģ)ĮĒĶTŽˆ€ˆ€ˆ€4 ˜ŗZ˙aíZVXˇ6ÖŖ]ĨPÂĮõ‹ƒ@#FÍEZ&‹š“Ę(Ö¨lĩh^ûfe‰WM+".ųƒØ^*鏈€ˆ€ˆ€4qn)#­Yŗä¯č ĐjlÄüĨ‚l¨ŌŠ5:G|Eŝø931mQĢu$Ú  $" " "ĐT  —HQŨäÚ ††JgUķvqniŚlŅAũg˜$ÖâHu." " "ĐÔ  ™\7yXYŌÂÖ,õ2AÔũ™I¨Á1ŖXŖ†QÁæƒ2˜‹4eŖžŦjPShęĐLž!Ę⛗Á‰ãl)ĢXķ\°yĮ čâ,ēĪ6ĘD@D@D@D )pŨ”nīĒjÔĢVŦQÉ;ŠŠ6Ž=Eŗåy™ö" " " "Đ ¸fōĩųšīãų~žmŸ“XķâU—īåڋ€ˆ€ˆ€ˆ@S'IGUĮeÄZ´ŗŊ0ڇŽE@D@D@D@˛Hū:{ö:*¨#ku^ʀˆ€ˆ€ˆ@.$ÖrĄ¤:" " " "PG$Öęŧ†\HŦåBIuD@D@D@D ŽHŦÕx +" " " šX˅’ęˆ€ˆ€ˆ€ˆ@XĢ#đVD@D@D@r!đYęūōbtIENDŽB`‚rabbitvcs-0.19/clients/osx_finder/services/SVN Update.workflow/Contents/document.wflow000066400000000000000000000160651445560650400313040ustar00rootroot00000000000000 AMApplicationBuild 247.1 AMApplicationVersion 2.1.1 AMDocumentVersion 2 actions action AMAccepts Container List Optional Types com.apple.cocoa.string AMActionVersion 2.0.1 AMParameterProperties COMMAND_STRING CheckedForUserDefaultShell inputMethod shell source AMProvides Container List Types com.apple.cocoa.string ActionBundlePath /System/Library/Automator/Run Shell Script.action ActionName Run Shell Script ActionParameters COMMAND_STRING /opt/rabbit/bin/rabbitvcs_osx update "$*" CheckedForUserDefaultShell inputMethod 1 shell /bin/bash source Application Automator BundleIdentifier com.apple.RunShellScript CFBundleVersion 2.0.1 CanShowSelectedItemsWhenRun CanShowWhenRun Category AMCategoryUtilities Class Name RunShellScriptAction InputUUID E86D82B3-74F9-4154-872D-EB71C690C797 Keywords Shell Script Command Run Unix OutputUUID 7A324629-564E-4136-8E09-4D176E5C2B40 UUID F1B87754-8CCE-4BE7-8A0E-3A27D10AF24C UnlocalizedApplications Automator arguments 0 default value 0 name inputMethod required 0 type 0 uuid 0 1 default value name source required 0 type 0 uuid 1 2 default value name CheckedForUserDefaultShell required 0 type 0 uuid 2 3 default value name COMMAND_STRING required 0 type 0 uuid 3 4 default value /bin/sh name shell required 0 type 0 uuid 4 isViewVisible location 309.500000:382.000000 nibPath /System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib isViewVisible connectors state AMLogTabViewSelectedIndex 0 libraryState actionsMajorSplitViewState expandedPosition 108 subviewState 0.000000, 0.000000, 381.000000, 475.000000, NO 0.000000, 476.000000, 381.000000, 107.000000, NO actionsMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 475.000000, NO 164.000000, 0.000000, 217.000000, 475.000000, NO variablesMajorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 350.000000, 555.000000, NO 0.000000, 556.000000, 350.000000, 148.000000, NO variablesMinorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 163.000000, 555.000000, NO 164.000000, 0.000000, 186.000000, 555.000000, NO majorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 381.000000, 628.000000, NO 382.000000, 0.000000, 619.000000, 628.000000, NO minorSplitViewState expandedPosition 0.0 subviewState 0.000000, 0.000000, 619.000000, 437.000000, NO 0.000000, 447.000000, 619.000000, 162.000000, NO windowFrame {{191, 73}, {1000, 705}} workflowViewScrollPosition {{0, 0}, {619, 437}} workflowMetaData serviceApplicationBundleID com.apple.finder serviceApplicationPath /System/Library/CoreServices/Finder.app serviceInputTypeIdentifier com.apple.Automator.fileSystemObject.folder serviceOutputTypeIdentifier com.apple.Automator.nothing workflowTypeIdentifier com.apple.Automator.servicesMenu rabbitvcs-0.19/clients/osx_finder/toolbar_button/000077500000000000000000000000001445560650400222715ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/toolbar_button/English.lproj/000077500000000000000000000000001445560650400250075ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/toolbar_button/English.lproj/InfoPlist.strings000066400000000000000000000001341445560650400303270ustar00rootroot00000000000000˙ū/* Localized versions of Info.plist keys */ rabbitvcs-0.19/clients/osx_finder/toolbar_button/English.lproj/MainMenu.xib000066400000000000000000003755541445560650400272470ustar00rootroot00000000000000 1050 9D29 664 949.33 352.00 YES YES com.apple.InterfaceBuilderKit com.apple.InterfaceBuilder.CocoaPlugin YES NSApplication FirstResponder NSApplication AMainMenu YES NewApplication 1048576 2147483647 NSImage NSMenuCheckmark NSImage NSMenuMixedState submenuAction: NewApplication YES About NewApplication 2147483647 YES YES 1048576 2147483647 UHJlZmVyZW5jZXPigKY , 1048576 2147483647 YES YES 1048576 2147483647 Services 1048576 2147483647 submenuAction: Services YES _NSServicesMenu YES YES 1048576 2147483647 Hide NewApplication h 1048576 2147483647 Hide Others h 1572864 2147483647 Show All 1048576 2147483647 YES YES 1048576 2147483647 Quit NewApplication q 1048576 2147483647 _NSAppleMenu File 1048576 2147483647 submenuAction: File YES New n 1048576 2147483647 T3BlbuKApg o 1048576 2147483647 Open Recent 1048576 2147483647 submenuAction: Open Recent YES Clear Menu 1048576 2147483647 _NSRecentDocumentsMenu YES YES 1048576 2147483647 Close w 1048576 2147483647 Save s 1048576 2147483647 U2F2ZSBBc+KApg S 1179648 2147483647 Revert to Saved 2147483647 YES YES 1048576 2147483647 Page Setup... P 1179648 2147483647 UHJpbnTigKY p 1048576 2147483647 Edit 1048576 2147483647 submenuAction: Edit YES Undo z 1048576 2147483647 Redo Z 1179648 2147483647 YES YES 1048576 2147483647 Cut x 1048576 2147483647 Copy c 1048576 2147483647 Paste v 1048576 2147483647 Delete 1048576 2147483647 Select All a 1048576 2147483647 YES YES 1048576 2147483647 Find 1048576 2147483647 submenuAction: Find YES RmluZOKApg f 1048576 2147483647 1 Find Next g 1048576 2147483647 2 Find Previous G 1179648 2147483647 3 Use Selection for Find e 1048576 2147483647 7 Jump to Selection j 1048576 2147483647 Spelling and Grammar 1048576 2147483647 submenuAction: Spelling and Grammar YES U2hvdyBTcGVsbGluZ+KApg : 1048576 2147483647 Check Spelling ; 1048576 2147483647 Check Spelling While Typing 1048576 2147483647 Check Grammar With Spelling 1048576 2147483647 Substitutions 1048576 2147483647 submenuAction: Substitutions YES Smart Copy/Paste f 1048576 2147483647 1 Smart Quotes g 1048576 2147483647 2 Smart Links G 1179648 2147483647 3 Speech 1048576 2147483647 submenuAction: Speech YES Start Speaking 1048576 2147483647 Stop Speaking 1048576 2147483647 Format 2147483647 submenuAction: Format YES Font 2147483647 submenuAction: Font YES Show Fonts t 1048576 2147483647 Bold b 1048576 2147483647 2 Italic i 1048576 2147483647 1 Underline u 1048576 2147483647 YES YES 2147483647 Bigger + 1048576 2147483647 3 Smaller - 1048576 2147483647 4 YES YES 2147483647 Kern 2147483647 submenuAction: Kern YES Use Default 2147483647 Use None 2147483647 Tighten 2147483647 Loosen 2147483647 Ligature 2147483647 submenuAction: Ligature YES Use Default 2147483647 Use None 2147483647 Use All 2147483647 Baseline 2147483647 submenuAction: Baseline YES Use Default 2147483647 Superscript 2147483647 Subscript 2147483647 Raise 2147483647 Lower 2147483647 YES YES 2147483647 Show Colors C 1048576 2147483647 YES YES 2147483647 Copy Style c 1572864 2147483647 Paste Style v 1572864 2147483647 _NSFontMenu Text 2147483647 submenuAction: Text YES Align Left { 1048576 2147483647 Center | 1048576 2147483647 Justify 2147483647 Align Right } 1048576 2147483647 YES YES 2147483647 Show Ruler 2147483647 Copy Ruler c 1310720 2147483647 Paste Ruler v 1310720 2147483647 View 1048576 2147483647 submenuAction: View YES Show Toolbar t 1572864 2147483647 Q3VzdG9taXplIFRvb2xiYXLigKY 1048576 2147483647 Window 1048576 2147483647 submenuAction: Window YES Minimize m 1048576 2147483647 Zoom 1048576 2147483647 YES YES 1048576 2147483647 Bring All to Front 1048576 2147483647 _NSWindowsMenu Help 1048576 2147483647 submenuAction: Help YES NewApplication Help ? 1048576 2147483647 _NSMainMenu 15 2 {{335, 390}, {480, 360}} 1946157056 Window NSWindow {3.40282e+38, 3.40282e+38} 256 {480, 360} {{0, 0}, {1440, 878}} {3.40282e+38, 3.40282e+38} NSFontManager YES performMiniaturize: 37 arrangeInFront: 39 print: 86 runPageLayout: 87 clearRecentDocuments: 127 orderFrontStandardAboutPanel: 142 performClose: 193 toggleContinuousSpellChecking: 222 undo: 223 copy: 224 checkSpelling: 225 paste: 226 stopSpeaking: 227 cut: 228 showGuessPanel: 230 redo: 231 selectAll: 232 startSpeaking: 233 delete: 235 performZoom: 240 performFindPanelAction: 241 centerSelectionInVisibleArea: 245 toggleGrammarChecking: 347 toggleSmartInsertDelete: 355 toggleAutomaticQuoteSubstitution: 356 toggleAutomaticLinkDetection: 357 showHelp: 360 saveDocument: 362 saveDocumentAs: 363 revertDocumentToSaved: 364 runToolbarCustomizationPalette: 365 toggleToolbarShown: 366 hide: 367 hideOtherApplications: 368 unhideAllApplications: 370 newDocument: 373 openDocument: 374 addFontTrait: 421 addFontTrait: 422 modifyFont: 423 orderFrontFontPanel: 424 modifyFont: 425 raiseBaseline: 426 lowerBaseline: 427 copyFont: 428 subscript: 429 superscript: 430 tightenKerning: 431 underline: 432 orderFrontColorPanel: 433 useAllLigatures: 434 loosenKerning: 435 pasteFont: 436 unscript: 437 useStandardKerning: 438 useStandardLigatures: 439 turnOffLigatures: 440 turnOffKerning: 441 alignLeft: 442 alignJustified: 443 copyRuler: 444 alignCenter: 445 toggleRuler: 446 alignRight: 447 pasteRuler: 448 terminate: 449 YES 0 YES -2 RmlsZSdzIE93bmVyA -1 First Responder -3 Application 29 YES MainMenu 19 YES 56 YES 103 YES 1 217 YES 83 YES 81 YES 75 3 80 8 78 6 72 82 9 124 YES 77 5 73 1 79 7 112 10 74 2 125 YES 126 205 YES 202 198 207 214 199 203 197 206 215 218 YES 216 YES 200 YES 219 201 204 220 YES 213 210 221 208 209 106 YES 2 111 57 YES 58 134 150 136 1111 144 129 121 143 236 131 YES 149 145 130 24 YES 92 5 239 23 295 YES 296 YES 297 298 211 YES 212 YES 195 196 346 348 YES 349 YES 350 351 354 371 YES 372 375 YES 376 YES 377 YES 378 YES 379 YES 380 381 382 383 384 385 386 387 388 YES 389 390 391 392 393 394 395 396 397 YES 398 YES 399 YES 400 401 402 403 404 405 YES 406 407 408 409 410 411 YES 412 413 414 415 YES 416 417 418 419 420 YES YES -1.IBPluginDependency -2.IBPluginDependency -3.IBPluginDependency 103.IBPluginDependency 103.ImportedFromIB2 106.IBPluginDependency 106.ImportedFromIB2 106.editorWindowContentRectSynchronizationRect 111.IBPluginDependency 111.ImportedFromIB2 112.IBPluginDependency 112.ImportedFromIB2 124.IBPluginDependency 124.ImportedFromIB2 125.IBPluginDependency 125.ImportedFromIB2 125.editorWindowContentRectSynchronizationRect 126.IBPluginDependency 126.ImportedFromIB2 129.IBPluginDependency 129.ImportedFromIB2 130.IBPluginDependency 130.ImportedFromIB2 130.editorWindowContentRectSynchronizationRect 131.IBPluginDependency 131.ImportedFromIB2 134.IBPluginDependency 134.ImportedFromIB2 136.IBPluginDependency 136.ImportedFromIB2 143.IBPluginDependency 143.ImportedFromIB2 144.IBPluginDependency 144.ImportedFromIB2 145.IBPluginDependency 145.ImportedFromIB2 149.IBPluginDependency 149.ImportedFromIB2 150.IBPluginDependency 150.ImportedFromIB2 19.IBPluginDependency 19.ImportedFromIB2 195.IBPluginDependency 195.ImportedFromIB2 196.IBPluginDependency 196.ImportedFromIB2 197.IBPluginDependency 197.ImportedFromIB2 198.IBPluginDependency 198.ImportedFromIB2 199.IBPluginDependency 199.ImportedFromIB2 200.IBPluginDependency 200.ImportedFromIB2 200.editorWindowContentRectSynchronizationRect 201.IBPluginDependency 201.ImportedFromIB2 202.IBPluginDependency 202.ImportedFromIB2 203.IBPluginDependency 203.ImportedFromIB2 204.IBPluginDependency 204.ImportedFromIB2 205.IBPluginDependency 205.ImportedFromIB2 205.editorWindowContentRectSynchronizationRect 206.IBPluginDependency 206.ImportedFromIB2 207.IBPluginDependency 207.ImportedFromIB2 208.IBPluginDependency 208.ImportedFromIB2 209.IBPluginDependency 209.ImportedFromIB2 210.IBPluginDependency 210.ImportedFromIB2 211.IBPluginDependency 211.ImportedFromIB2 212.IBPluginDependency 212.ImportedFromIB2 212.editorWindowContentRectSynchronizationRect 213.IBPluginDependency 213.ImportedFromIB2 214.IBPluginDependency 214.ImportedFromIB2 215.IBPluginDependency 215.ImportedFromIB2 216.IBPluginDependency 216.ImportedFromIB2 217.IBPluginDependency 217.ImportedFromIB2 218.IBPluginDependency 218.ImportedFromIB2 219.IBPluginDependency 219.ImportedFromIB2 220.IBPluginDependency 220.ImportedFromIB2 220.editorWindowContentRectSynchronizationRect 221.IBPluginDependency 221.ImportedFromIB2 23.IBPluginDependency 23.ImportedFromIB2 236.IBPluginDependency 236.ImportedFromIB2 239.IBPluginDependency 239.ImportedFromIB2 24.IBPluginDependency 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 29.IBEditorWindowLastContentRect 29.IBPluginDependency 29.ImportedFromIB2 29.WindowOrigin 29.editorWindowContentRectSynchronizationRect 295.IBPluginDependency 296.IBPluginDependency 296.editorWindowContentRectSynchronizationRect 297.IBPluginDependency 298.IBPluginDependency 346.IBPluginDependency 346.ImportedFromIB2 348.IBPluginDependency 348.ImportedFromIB2 349.IBPluginDependency 349.ImportedFromIB2 349.editorWindowContentRectSynchronizationRect 350.IBPluginDependency 350.ImportedFromIB2 351.IBPluginDependency 351.ImportedFromIB2 354.IBPluginDependency 354.ImportedFromIB2 371.IBEditorWindowLastContentRect 371.IBPluginDependency 371.IBWindowTemplateEditedContentRect 371.NSWindowTemplate.visibleAtLaunch 371.editorWindowContentRectSynchronizationRect 371.windowTemplate.maxSize 372.IBPluginDependency 375.IBPluginDependency 376.IBEditorWindowLastContentRect 376.IBPluginDependency 377.IBPluginDependency 378.IBPluginDependency 379.IBPluginDependency 380.IBPluginDependency 381.IBPluginDependency 382.IBPluginDependency 383.IBPluginDependency 384.IBPluginDependency 385.IBPluginDependency 386.IBPluginDependency 387.IBPluginDependency 388.IBEditorWindowLastContentRect 388.IBPluginDependency 389.IBPluginDependency 390.IBPluginDependency 391.IBPluginDependency 392.IBPluginDependency 393.IBPluginDependency 394.IBPluginDependency 395.IBPluginDependency 396.IBPluginDependency 397.IBPluginDependency 398.IBPluginDependency 399.IBPluginDependency 400.IBPluginDependency 401.IBPluginDependency 402.IBPluginDependency 403.IBPluginDependency 404.IBPluginDependency 405.IBPluginDependency 406.IBPluginDependency 407.IBPluginDependency 408.IBPluginDependency 409.IBPluginDependency 410.IBPluginDependency 411.IBPluginDependency 412.IBPluginDependency 413.IBPluginDependency 414.IBPluginDependency 415.IBPluginDependency 416.IBPluginDependency 417.IBPluginDependency 418.IBPluginDependency 419.IBPluginDependency 5.IBPluginDependency 5.ImportedFromIB2 56.IBPluginDependency 56.ImportedFromIB2 57.IBEditorWindowLastContentRect 57.IBPluginDependency 57.ImportedFromIB2 57.editorWindowContentRectSynchronizationRect 58.IBPluginDependency 58.ImportedFromIB2 72.IBPluginDependency 72.ImportedFromIB2 73.IBPluginDependency 73.ImportedFromIB2 74.IBPluginDependency 74.ImportedFromIB2 75.IBPluginDependency 75.ImportedFromIB2 77.IBPluginDependency 77.ImportedFromIB2 78.IBPluginDependency 78.ImportedFromIB2 79.IBPluginDependency 79.ImportedFromIB2 80.IBPluginDependency 80.ImportedFromIB2 81.IBPluginDependency 81.ImportedFromIB2 81.editorWindowContentRectSynchronizationRect 82.IBPluginDependency 82.ImportedFromIB2 83.IBPluginDependency 83.ImportedFromIB2 92.IBPluginDependency 92.ImportedFromIB2 YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilderKit com.apple.InterfaceBuilderKit com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{596, 852}, {216, 23}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{522, 812}, {146, 23}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{436, 809}, {64, 6}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{608, 612}, {275, 83}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{187, 434}, {243, 243}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{608, 612}, {167, 43}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{608, 612}, {241, 103}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{525, 802}, {197, 73}} {{207, 285}, {478, 20}} com.apple.InterfaceBuilder.CocoaPlugin {74, 862} {{6, 978}, {478, 20}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{475, 832}, {234, 43}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{608, 612}, {215, 63}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{335, 390}, {480, 360}} com.apple.InterfaceBuilder.CocoaPlugin {{335, 390}, {480, 360}} {{33, 99}, {480, 360}} {3.40282e+38, 3.40282e+38} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{437, 242}, {86, 43}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{523, 2}, {178, 283}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{219, 102}, {245, 183}} com.apple.InterfaceBuilder.CocoaPlugin {{23, 794}, {245, 183}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{145, 474}, {199, 203}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES YES YES 449 0 3 rabbitvcs-0.19/clients/osx_finder/toolbar_button/Info.plist000066400000000000000000000016241445560650400242440ustar00rootroot00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile schelper.icns CFBundleIdentifier org.tigris.scplugin.${PRODUCT_NAME:identifier} CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleSignature ???? CFBundleVersion 1.0 LSUIElement 1 NSMainNibFile MainMenu NSPrincipalClass NSApplication rabbitvcs-0.19/clients/osx_finder/toolbar_button/SCToolbarButton.xcodeproj/000077500000000000000000000000001445560650400273115ustar00rootroot00000000000000rabbitvcs-0.19/clients/osx_finder/toolbar_button/SCToolbarButton.xcodeproj/TemplateIcon.icns000066400000000000000000001461361445560650400325660ustar00rootroot00000000000000icnsĖ^is32Ѓg;€˙ū€˙ĩ‚ƒg @Vž­´ÕĶ˙ĩ‚ƒg D]?8SyŸÖV0ƒg o*TÔ~ČĀZb‘ egK ßæÛęΟ¨ĸ‘ ÷v+Xžz÷˙pyëĸ€‘IŽīøĻøeLʄ„¸ĘėéŅĖSx~ēxy¸īŅÚČ˙Ū‚dfŽ}žž‹ėÎ˨˛˙˛g4Wŗwĸĸâģĩĸ°ĄÃßĻaDwĮ€`,āĖģÚØœ¸ŸvHG–”6:<Âäīņņ˛ÂۍHJ];<<?‘‘ŧÃķ˙ø˙e]€< €F‘‘xqr­Žd]€<˙ƒg4„˙¤|ƒg :?ˇŖĢŅĪ˙¤|ƒg ?H':cĘG%ƒg ` 6ÉbsšąRY‘ ce0ĘĪĐāĀ~žŸ‘ øvA¤_ķ˙NIā€‘IŽīũ€÷@Ģ}}ˇĘîíĮģ?ONG™ssˇđŅßÁ˙ÄqX]‚mš™‹ėĪË­­č›Z.KĄjâģļŖ°¤ĀU:hˇ€V,āÍŧÚØœŧ”^;:…‡-01ÂäīīņŗÂߌCCuR122A‘ŧÅķ˙û˙euR€2 €G‘xrsŽŽduR€2˙ƒi+„˙ˆtƒi 2А—ËĮįˆtƒi 8$@f°3ƒi E1Ī_p­‹BP” ]`ŋąĪÚžaœ” ût<QęúI2Ŋ™€”I‘ō˙e…ī/€jj••šĖî힐094.ress•”šņŌäŗā–UEIiX˜–“‘îĐÍļ§žyC#8†WœšãŊŧ§´­ž”nA+Q€DâĪžŲØ¤Â€6$(ir!$$Äį€đļÅį‰;9`A€%‚C””ĀČņ€˙g`A€% ƒI””{ttŽg`A€%˙s8mk3Uf<lš.’˙˙˙˙Û˙˙ب˙˙˙˙˙˙˙˙Ē˙˙˙˙˙˙˙˙˙3˙˙˙˙˙˙˙˙Æ Â„ä˙˙˙˙˙˙˙oœ˙˙˙˙˙˙˙˙˙˙%F˙˙˙˙˙˙˙˙˙˙īî˙˙˙˙˙˙˙˙˙˙Ž‹˙˙˙˙˙˙˙˙˙˙˙w3˙˙˙˙˙˙˙˙˙˙˙Đē˙˙˙˙˙˙˙˙˙ā\b“Ų˙˙˙˙˙)]’ô—il32 bš˙âŌ˙ņŋ¯„˙ķëâŌ3˙ˆF=˛ūžŦ¨ļŌŪâ­õįۃ@tˆ.-*RJŊX>GUi„›œˆŗō˙¨Jv‰0/RO>LPB;Rh{t–Ģʝ(]p)‡0//-ˆNL&CΒ;[:¸´ÜĸW{"t‰exWGU†õ˙ĖŖĩžī̘˙˛3å‰ex8(žßÕö˙ēÃŅ˙åXé÷>iŨ…‘Ämnnq6iŪõ­Ŧ¤įėÔŪ¯EĒ˙aĩĩ…‘Ŋõ7>*Ϟ’´˜ũņÃęp8Ĩ˙Ļĩ˙…‘ģíâ„. Ē˙ ž˙ũ˙ö‘IPÄ÷ļĩ˙„‘ŽģæŲúkxHG€Ŗ˙˙Į}Wq˙ŽO˙˙„‘Š˙ö˙ōϞMFĖŅôá+8shę÷P˙˙ƒŽŖōøŌŲ˙ŊÁßq(Q’jEAb äŅ‚ €˙‚ŽŒĄ˙ÔĶ×čĩŋ˙üŧ†c\w‘ĩÂŋž‚‘ €˙Ž‡˙ßŌÚÛæŋĀ˙˙æŅˇŠĨž‘|_{ŋ}€˙ŒÄüūĖĖŌÎØĮĀ˙đĪĸpQ7!E…ĻĀU€˙€Œ‰Ä˙āĐËĶßÄ Ã˙ėɤdOHRr”ŠļLI€˙€Œ‡˙ĐĒÎØĘ¤†Ęúæž™{bPKX{šą§ED8˙˙qoŽņõ ąĨǘ–ˇÃęāŗ‘t[MK^… ģ•88-˙˙qm˙”‹Ģ šÂĩąįÄŧå̉mVKMh¨Æt;<2˙˙jgŨuÃÚÎČØĩž´Ī—ޝ†hSJQuœŧš;@@:*˙æÄ˙6ĪßéâäŪŲĒYēÅĻkjvcQKX€§˜S?@@=/˙ä˙öÖØØŨÜØųž|ÂĩäČe;/(3_~ƒiT€@?1˙|ĒĘæüīÜÖÜĐÁĘÍËÜķä§u[\B~ƒiT€@?1˙‚Ŧ"V}ŖÁį˙đĩĩØãÛŅ׿Ũ˙zD‚†iT€@?1˙‚ą*^€Ĩ#^t žé˙˙ôÕČÅūõ‰iT€@?1˙‚ŗ-`€Ē*fyĨ#SŒÂî€˙M‹iT€@?1˙‚ŗ-`€Ŧ-fyĢ-[ ?’oS‹iT€@?1ž˙š˙ØĘ˙ōˇĨ„˙ėįØË)˙‰ B&¨˙šŠĸž­ÍÜåĨî×Ãh7nˆ/.,N5´C&0@UqŠŠyĢíķ—@pŠ1N<#6:'8Pg\|–ÁUb Š1u43 $Į€=}ĢĄÄ•Spo‰eo>,:bî˙ē‹ĸŦį ~ū§*ãŠe ĒÆģæ˙ĻĢž˙Ø9Ķå2]څ‘Ãikk[XÉ퍓ŒįčÅՑŽ˙Q˛˛…‘ŧõ6>j Œ•‚y—oųņąãP‚öœ˛˙…‘ēíãsŒ˙jĻ˙īūįv)žāą°˙„‘ŽēæŲ˙a]"iŒ˙˙Ģ\*AúŸL˙˙„‘‹˙ö˙öŸŸ0 ŦēįÚB+Áé M˙˙ƒŖņøĶÚ˙ˇ­ĖX$p@ $hžÄw€˙‚‹Ą˙ÕĶØė´Ŧ˙č¨oA/Gb‚š°—u„€˙Œ†˙āĶÚÛꞎûéÍŊ¨›•‘‰vVi¯q €˙ŒÃũ˙ÍÍŌĪÚČ­ôŪļŠ`F29t”˛G€˙€Œ‰Ã˙áŅËÔáÆĻĩëײŽpWD>Fbƒš¨@<€˙€Œ‡˙ĐĢÎŲĘĨŽŧãŅĻ…kUEAKk‰ š<;-˙˙pnŽīö ąĨ̘—ģ¸Îɛ}dOB@QuŦŠ.-"˙˙ok˙—ŒĢĄšÂļąėĀŖÉ”w^K@BZ˜¸i11'˙˙ieÆŠwÃÚÎČ×ĩŸĩՌ’–t[H@Ef‹ŦŽ166/˙æÄ˙6ĪáéâäŪØĒ[ēĮĒaRcUE?Kp˜‹G5663$˙ä˙öÖØØŨÜØųž~ÂĩæĪe1$'Sqw]H€64&˙|ĒËčũđÜÖÜĐÁĘÍĖÛōéĒv[[?qw]H€64&˙‚Ŧ"W|ŖÁį˙đĩļ×ãÛŅ×įā˙|@sy]H€64&˙‚ą*_€Ĩ#^tĄŋę˙˙õÖÉĮ˙ķ|]H€64&˙‚ŗ,a€Ē*fyĻ#TÃī€˙M}]H€64&˙‚ŗ-a€Ŧ-fyŦ-\‘ ?’oS~]H€64&ž˙š˙Æŧ˙ņĒ”„˙ÕÚÆŊ˙ˆ$##=—˙ޚ‘‹žÃÛî’ÖŊœ>,f‰21IĨ)Hhgd™ÚĶy1hŠ4I !9O7HqŽtGLŠ4V Đ~7 wŸ}šƒK_fˆeh_ 7_ô˙¸ˆ›˛ø›UĖ” ãˆefF€š˛žÍôž™ĒņŅ/ĄĀ Jڅ”Įehh4QÂāc”ęÜŧÎ{oí9­­…”Āø4?@{‘t`\đō¯åDgÁŽ­˙…”ŊīéPtØO“ųÛßÎe "ŠĒŠ˙„”‘Ŋčß˙L0eŽ˙˙ŽF2Į~I˙˙„”Ž˙ø˙˙–x ĨĐÎ2–ģH˙˙ƒĻķúÔÛ˙ŽŽĸ6Y-K’œd€˙‚ޤ˙ÖĶ×ō¯ŠįŊ€S,0F_w‹xap€˙‰˙âĶÚÛíŧāȤ‚zvsp^BU•\€˙‘Æū˙ĪÎĶĐÜʐ׏gE6'(Zz™4€˙€‘Æ˙áĶÎÕáĘŽÉˇmUB4/5Kj€‘2,€˙€‘Œ˙͝ΨĖnjž§ģށeR@519Spˆ„.+˙˙tr‘ņøĻ´Ģ¯Ÿž˜ÅĨ§¤w_M<21=\w“u˙˙so˙”°§ŧÄš´ķ¸yžp[H911Ef~ W""˙˙mjʰ€ÅÛĐÉך¤šßybsYE604Oq“{$((!˙éĮ˙ĐßæáäŪŲ¯gŧͲR,E@508Y~v8€($˙į˙÷רØÜÜØö†ďęŲc" @[dL9€(&˙}ŽŅî˙ôß×ÛĐÃËÎÍÛķđ°w[\;[dL9€(&˙ƒ°#X§Įí˙ôģē×áÚŌŲčä˙…:[eL9€(&˙ƒĩ*`ƒŠ"_xŖÃî˙˙öØËÉ˙úgL9€(&˙ƒˇ-bƒŽ*g|¨"VÆō€˙NhL9€(&˙ƒ¸.bƒ°-g|Ž-^• ?’pTiL9€(&ž˙l8mk 1?C7!  ''#.5;/.{_DƒĻ¸˛˜Yy˙˙˙¸xë˙˙˙˙˙˙˙ÔŦ˙˙˙˙˙‚ Ũ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Čũ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ˆĢ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ËT˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙*V˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ë˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙S‰™%Ô˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙0˙˙˙Ųâ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ģķ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙r˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙( ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¸•˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙z˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙FŨ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ S˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ũ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙#§˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Gt˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙čŒ–đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙c]˜Ú˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŊPÎ˙˙˙˙˙˙˙˙˙˙I‹Ō˙˙˙˙˙q R“ōŨit32{'˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ø˙îßĐÄģŊËéō˙ ūåŅÆÂ§‘ˆáī˙îÔÍØãäāŲĪôœn`ĒĖ˙ũíÛĪÁšĩŽŠ¨ŽļģÄÔŨęöŒ˙âĐŨíīėčā×Ëž¯Ÿn=xĮ˙ķÚÁ¨“‚vrtxwy}~‚…‡‹”˜Ŗ°ÃÖé†˙ũŨÕëķōîčā×Ėž¯Ą’€sd&_Ã˙ đĘŖ…qjlrx{~‚„ˆ–™ĨŠĒ¨ĸ™”’›˛Õ‚˙ũŨÚđôōîčāÖĖŋąĸ’‚qe]S}Ē˙‰ō‡˙=Ü­„jdilkigghknprpqu}ƒ…‡‘§ąļĩąŠ•{’ˇę˙˙ŨÜņôķîéá×ÍĀŗ¤•ƒpbXRL=ģ§˙+‰ f„˙?ĶŖxfgc^YXXZ^bfmqtwxy~‚ƒ†ˆŒ”›ŖĨ¨¨Ē­¯Ģ“yzĢëīōķķîéâŲĐÃļ§—‚maXP?6BAĨ˙)ŒGC­ō˙˙ŌĄugd[USRSYbhlopruvuvy~…‰Œ“˜ŸžžœĄŠ°´ĩĄ|ŽĖ˙˙îčâÚŌĮģŠ˜‚h\XM6@`l_ˇĸ˙) ]¸jaTOOSYafghhiij€m/lmv|ƒ‰‰Š’™›šš›™Ÿ¤¨ąēŊĄ‡ĻäüįÚĶËžĒ›bZVI5Oz~m`#t ˙)’Fg€gOKLPYchiea_`beimoprw}…‹“‘“–˜™••™œžžŖ°ŧÅž•ŒŋčŨĖĀĒ™~_XVH4[„vfbW3Iú˙)“GBŗPEHLU_dc`^]]`dgjiijjllipz€…Œ‘˜ž™˜˜šžžŸŸĄĻŽģÆÉąŖĪĮŠ›~WSVH4`ˆthb\T:6ō›˙)”HcŋwBCGO[a_[WWY^bca][VTVVURPSY\_gmot~‹œŠŠĸ ĄĄŖĻĒŽšÆÎŚ’Ą›WQPG5h•~od]XQ,Sû™˙)•kÂf>DIS]^WRRTX[WVWL7/7KS€U-XWVXZ`a]VX\du‘аĻĸĨŠ­ŽąģĮŌÎĻzPPRL5hĄ†sg^YUOr˜˙ē6–IlĮ_;EKU]YRNPTTPOLH5F|„`3‘Šž¤ŸŠēÛÜŅØö€˙+éÖėÖĖÔŗ­ÁŋļĐãėīíåãëëėī˙Å[uI‡îØØ×Účãą‰S[ehc5Ķ—˙õ”K]ëd1IOGDBD>.,$ `}§´ŠąÔŌÔŌĶĖÍŨåСžÉÕãÚÖŲÔáÃēĖÛāâãâááäëūáqspJšīŲÛÜåņž–h_kmDm˜˙ú”KŽØN8LLEECA3,$! L§ÅŅØÚĶĖĘĖÎνœĀęãĐÖčāŲËŌōɲČŅÚŨŲÜŪŨŨâ˙Ûrs{WuíāááåöΟydpl6Ř˙ՕJ´Ŋ@?NHDEE;.) ‘ĐųûéâãįáĖÄÆÂŧąžĮ˙˙úæČÍØīđŨÎÂŦļÚįããÔŌØÕįõnwy{TēöãæåôŨ§ƒjuLj™˙Æ!-ƒ/.8&‰KĖĻ:CLFFEB5/'‰ōž|¤ĐČÂÕäŨġ˛Ŧ™˛ų÷ėōą›Ÿ°ü˙úŧ  ā˙ķō˙÷ßÍįŨ–r|x{€ZŠúææåņᝇmr8ę˙ĨO„nmqŒQˆJ)Ũ–7FKGHF=11'›ÕŏŠČÂŌÍĶÁŠĨŽĘĶēŠÜ°eˆģõ˙˙Ë~×˙˙âžŨ˙ųŨ•sg„v|{pmŪîæįņí´ŠpQj™˙îMU„]\T~Í`‡J*ܓ6GJGHG9/2*! ĖžąŗŽŗ˛ÎĀÉĀž~tĄčŌ‹t~Ŗ‚Ŗōû˙˙ãĮ˙˙ũΰÆĩąä’Pv~xt~}aÁûčęņđĩŒm8ř˙š9`„]\Ws¯ˇA†&)Ų•9GKIJF603-,ĒąĄ”ąŗŠšÁŌ›_qœÃ͐‰euĄė˙û˙÷ÛĀŠĢŖ…œäüsdlp†‡ƒ…c¯˙ėėņņĩHl™˙îMU…]\Wu¨¤„…%'֟AGLKLD40418°­]UxļĤšŲ>:¨ÉΒ€ĄÎ­ĄČ˙øņøņ¸Ģ›§ÁšĀÜëvJ`…ƒkfƒnĻ˙íėõđ¯‰<͙˙š9`…]\WuИq„%Į°JFMMOD4033E­Ž—P4[ƒ„žž#WŅט“’ŌĪËԀ˙ãŨėô뭓ÁéíâëķYJvŽaJM=+†ōåĄĒņ˙ķķøū˙ģŧũ˙˙ÚqXqgTPVZ^u“xm›¤†Ü˙ō˙ԇMŖ÷øīõ”˙Ž=eˆbZeOgė˙ú˙ųÛÆ–mƒWĻØ¤h[nlA405698458;@BFM4A¯āÍ֒n…Õ˙ōÛęų˙Ú[‡­Ÿfcvf][WW\fˆPKy‰Ē˙ôú÷ŸzTJUNMä”˙s+HˆGF%´˙ėčåæô˙˙åÎĨ¨z€FuĪŏae|\53367;768?ŌⓍŋš‘ĢšÄŨø˙˙ū˙˙›Nilh^bda`cn}Žqƒ›—€ģ˙ō˙ۈyTCHI(z”˙ˇ?‡>7?6"Ī˙åæįåéėīęëíęë÷˙˙îlpÉΊ€j€y>537:==;;>A=>@C9fn[ny›¯ÆÎÖĘžÍđ˙˙ĩOWWX^`admy‰…}tķūüō uuoIDGC6ā“˙÷5‡.\02ëųåæåããįåâæéååęéîōņ˛g ēÛÅ …z“u967:>@@?AC;D ĨŖ¸ŧŌĖŋØčŪĐÅÁŸb^YYX\`en|ˆŽ—‰ė˙ûđĄuk†p?FH6Wũ“˙Ķ2K‡M&L!°˙įéëæåááŲÛāāãëčåėíėÉo–ŗČäÅĄŒƒš~>4;:@€B1CF3VÄæÜāáÚÔİœˆrbZd]ZZ[ahs~‡’’w’î˙üčri~–\=EG‡”˙y8†6(8n˙íææäāÜŨÚØ×ÚÜāŪßææįįÜ|‡šŊØîËĨ•ŒĄŽL2;>@€C0DI6QĸÁ¸ĄŒxeVQU^im]Y`ekrw€…‡‹‹…v¤÷˙üؓoi‚œ‡NDIJ%Ā”˙L%†7]9-Í˙åäŨÚÚØÖÎÔŪÛŲÚÛãįãåįč}ēĀĪåöØ­œ•ĻŖk85AABCCGODG]XNMU]dilpnfclswwx~„„‡†u€Ã˙˙ōÁ†lkˆšxDHK?FLSY]^aa`^[[^n‰ĢŌø˙˙Õ°sgky’œ™œž›žzCDG0i”˙—?ƒ=E>AXū÷äãäßŨÜÔŅÕŲÜÚÜŨŲŌØŨßáÛÜßۉ—Î×åōöôîëęęíčŲĘžšžŅãâŅŧ§”†|tnmqrx‚ ´Îč€˙āŊ ƒmfjuˆ•”–›Ÿ ›œk@FG)w”˙J „(_)Ã˙âååāÚÖÖÍÖŲÖ×ãŪĐØÚŪáÜÔÖÚâ֌ĪØåōööķīęæáßŪŲÎÄŧēŧÄŅßęīîéæäãįčėōú˙˙ûčÍŗœ…rebepƒŽŽ”šŸĸ œ•\AHH)“˙Č„"_!—˙ââãŪØÕÛØŲŨŲĶÜŨ×ÚÚØâŨŲØÜß×Ņ™ÍŲåōöôķķíäāÛĶÍÉÃģŗ­ĒĢąļģĀÆÎÔÕÖĶĐÉŋ´§™ˆwi_YX^jyƒ†ˆ“™ŸĸŖ ŠPDII%Ŧ“˙‹!KƒI`M'b˙īįæâßÜÜØĪŌÕÖÚáĶ×ÜŌÚßÚÖŨÛ×ÔÜNJČŲåņ÷õķōîäßŲŅĘš°¨Ÿ–‹Š‹Œ‹‹Šƒ€zqh^VOKKNValrw†‹‘˜žĸ¤¤žž~GGJJ%ž’˙û\HƒWaYC[ķūäčįßÜÛŨØŅĶÔÎŪÖŲÚĪÛÖĶĪÔÛØŲŨ⡈ÂŲäđöõķķîåāŲŅČŋĩŦĄ˜†~void^YVRMIDB@??CIPV[ajq{„‹‘—œĄ¤ĨŖq@EGF)°’˙ŲC\ƒ][;ē˙äčęæâŪŲŌÅĘŌĐŪ×ÎÕŅÔÛÚׁØ%ÕáŪŊ‹ģÚäīõôķķîåßŲŅČž´Šž“Š‚{unha[UPKHECDGKOT[dnw‰•šŸŖĨĨĸ›˜c>FGC4Ķ’˙‡+N‚MBO+˜˙æįčæââŨ×ĐĪĐĖĘŅČŅÎËÔĐÔĐÎŌÚØĪÔĐŊ´ÛãîôôķņíåßŲŅČŋ´ŠŸ“ˆ€xpjc]XSOJFDBCGLRXakt}‡”™ĄŖĨĨ ›VBIIF5Б˙ôK>‚JDM5NîųéęãāáÜØĐÍĶ×ÕÕĖŅŅËĪÕĶÍËĮĪČŊČŅÖȓ­ÛãíôôōđėåߨŅÉĀĩĒ •‹ƒzrkd]WRNIGDC€DGKQW^gqzƒŒ“—›žĸ¤Ļ¤žœ†JBGGD0ˑ˙ČJjiEjdNÖ˙éėéččßÜÚÍŌÎÆĖÍĐÕÉĪ××ĪĮÆÍŌĮÄĪĐĖ˓§ÛâëķķōīëãŨ×ĐČŋĩĢĄ–Ž…}unfa[UQLJHG€HLPV\dmwˆ•˜œŸŖĨĻŖzBCFF@9ڑ˙•JihDjEŸ˙îíęåįáÚÖĘĐĐÉÉÆÅĖČËÖÔÎÅÉĪĖÅÂĘĘÅÔ͕ŖŲáęōķņîęâÛÕÎÆŊĩĢĄ—‡xpic]XSPMJKPT[airz‚Š‘–šĄ¤ĻĻĸ››l=FGGB6ڐ˙ņD:EDG.XøöėëéæåÜĶËÉĘĮĘĶĶŅČÆĪÍËÂÄÎĪËÅĮÉžÉĖžŸ×āčņķđíéáÚĶĖÄģ˛ŠŸ–ˆ€yrke_[URONOSX^ckt}„Œ“—›žĸĨĻĨĄš—_=€GH#—˙Ā"DEEAž˙čííčåâßĶĐÔĐĘŌĐŌÎÆĐÎĖËĮĖĪÔÍÆĐÃĀČŧŤ›ĶāįīōīëčߨŌÉÁš¯Ļœ”†xqke`[VSPOQUY_env‡Ž”˜œŸŖĨĻĨŸšŽSBJIIJ5\˙,P€OEQ-‹˙ôņįëņæÜÛÕÔÖŅÉŅĐÆĘÍĖÄĖĪÍĮŌĪÅÆÚ˜XtÃŌĄ˜ĪßæîņîęčŪÖĪČŋļ­¤›“‹„}voic^ZURPOQU[`gpy‰–šĄ¤Ļ§¤žœ„JFJI*Ў˙ũC€2E3#&â˙čėëÁÁáöŌĘÜÔĪÕĶČÍĐŌĪÎÍÎĘÛŲŌÖËËldeÆÎŦ—ĘŨåíņîéæÜÔÎÅŊ´ĒĄ˜‘Š‚|tnhb]XTR‚ORW\ajr{ƒ‹’—›žĄĨ§ĻŖœy@ADE ‡Ž˙ŋ -€.E-ĸ˙ééëėÔģĘĸ íéÎŌŲĐÛŲĐŲŌĶĶØã˛¯ąĢ˰wŽxÅôšÄŨãėđėčäÛŌĖÃēą¨ž—ˆ€yslfa\WTQ‚OSX]dlu}…”˜œŸŖĻ§Ļĸ››l;B‚D8@ī˙KŸ0UTTU@cøöëíîééۈ\y‡ČīęÖĪÖÍÖÕÚåīÎĢSO‰g˜ŗqÉȸšĀŨâéîëæâŲĐÉÁ¸¯Ļ•†~xqke`[VSP€ONPTY^fnw€ˆ–™Ą¤Ļ§ĨĄš—_=ƒGI Ĩ˙K~ThgheKĶ˙îķëææâ‰iēĩ‰l‚ĘâÜĶÛæãĐŽ”“ualáŲ€OĨ°pŅŌž–ģÜáįėęåā×ĪĮŋļŦŖš“Œ„}vpjc^ZURPOQU[`hqz‚Š‘—šžĸĨ§§¤ŸšT@ƒHF-ŧŒ˙KîMSYY]4~˙äĀŅōøäz„âÔąģ¯‘jƒÚęΧ“‰…‡ļšģvĩÄn`ȞußŌĕ˛ÜāåęčäŨÔĖÅŧ´ĒĄ™’‹ƒ|unhb]YUR‚ORV\bks|„Œ“˜œŸĸϧ§¤ž›†KCƒHF1Ό˙K˜*)*'ŨũæĖąČɈŸčáâįÅÁ×Ãs€›ޝĐßāĖN=‹‚čŒ{åŌÍšĻØÜâįįâÜŌĘÂē°§Ÿ—‰€zsmfa\WTQ‚OSX]dmu‡Ž•™ ¤Ļ§ĻŖœœ{CEƒGA;،˙Kv$BADˆ˙æëôėÂaJÅ÷ęåôķז€›’ŽļÕÚÚŅĻ{}tugöĻņ€ƒėÜÖŖ–ĪŲāãäāÛŌČĀĩŦ¤œ”†xrkf`[VSP€ONPTY^fox‰‘—›žĄĨ§§ĨĄš›n=EƒF8Pų‹˙īD:GH-Xū퀿@ãĘØŊs„ÃÎ̖މēāŪ×ËŠnŒ§ĀÜâÛå|¯îŠŒãÔвŋ×ÜßáŨ×ĪĮŧ˛ŦŖš’Š‚zuoic^ZUSPOQUZ`iq{ƒ‹“˜œŸŖĻ§§¤Ÿ˜•^?„J;U÷‹˙KĖ>€?BGOZfs…‰ngb‡Œ^fe_eYG‚IJ"ÁŒ˙ĩf˙îįäâÚØØÖĐÕŌĪÍŌÕŲŲ€Ķ7××ŨÜŨÕÖÛÖÕŲÕÜŪÜÖÕāņu”üˇoÚâÛøžvޝÆŲŌÛŲØÚ×ÉÁˇ¤‹mVMKKLLKJIH€IKPZgppuwqajmse…‹^fe_eYGIJ/]˙h–Đ˙ãäãÜØÔÖÍÆÅČÉĪĪÎÖÕÕÔĶÕÕÖÛÔŌŪãÛÕĐ×ŲÕŪŲØņÃhĪęĒsŨßÛãÉāŲĩŠŗŨŪŨÜÜŌĪŅĖģą¤ybRHCA@>BDDEGJE:=inksdrore…‹^fe_eYGIJ"Á˙hšį÷ôčŪÜØĪÉĮÉĮËĖÉØÕĐŅĪĪĐĶÔĖĐÛŲÔÔŪßßŨÛÔĐÚô”„úåÂ~ÖÕãÚŨÛÕŪÎÄŅĐĶßÚÕßŪČÂĀ´Ŧĸ–ˆxm^SHEA>=??Bjznserore…‹^fe_eYG€IJ/]Ž˙hœ>nŸÆāėęÔĐÔĖĖÕÉČĪĮÍĘĮÁĘĪÍĪÔĪÔĐÔŲÜØØÜŲÛÜæwŽíŪģzŨįâŲŲÖÚ×āäÛŲÕŪĐÕÚÚŌÖĪÂÃˇŽŖ ”ˆ€|vqnmora B„nserore…‹^fe_eYG€IJ"Á˙l1Cm˜ŋŲåßŪŌĪØĖÎĪÅĀÂĘÎŌĖČĪŌŌÖ×ŪÛØÕÔŌáÃyââæ´zØÖÚâŨÚÜŨŪÛÛŲáŪÚÛÜÔ×ĶŅØĐĖÂģ°Ŗœš–‘Œ‹‡)oserore…‹^fe_eYGIIJ/]˙ë €K !@l’ˇĐééŨÛĶĶŅĶÍŅÉĀĮĐËÕØŲŨÚÛŪÜŲÔuáĀåŽhŊČŲĶÔŲÔŨÜÖßŪØÍÔØŲŲÚĘĪŅĪÕÍÍÁēļ´Ģ§ĻĻŖ•O€myserore…‹^fe_eYGIIJ"Á‘˙Á  AfĩÎãčßרĐÄČĪÃÍËË܀ÖHÔ×áędLŅßŨdeÔâÛÎĐÎÎŲÚßŪØÎÖØÕÍØÎĪ×ĶÖËĖĖĮÉĖĘÅÄÃĮŽ|  :ƒrerore…‹^fe_eYGIJ/]“˙ ¨  €[>a‡ŦËáŨßŪØÖÕËŌÖŌÕĪÍĶŅĘ´^n¸~^˛ØÖ×ÛÜÜß×ÚÛÜØÕŨāÛÖĖĪÚÔĶŅÎÕĪËÎĪÉÕŲâΤ1  p}erore…‹^fe_eYGKAÁ”˙gf  5V‚ĻÅŨįŪãįŨÜĐĐרҺŋЏ‰ŧĩŋÍßÜØßŪ××ÔÚĶØÕÎĘÆÍÜÔĪĪČÉÎČĖÖŌŌŲæãĀg;‰drore…‹^fe_e[D('–˙M4  .Qv™ÂŲãčāáßÖØ×ĐßæßãâŅÖŲÛÖĶØÖÚØŲŅĖÕĪËČÆÎČÅÍĐŌŅĪĘĶĶÉÖŨîˑ‚ vorore…‹^feac:+nʗ˙Mí")FmĩĶāäéâÛŨĶĪÛŅÎŲÖÔĶ×ĶÖŲÔĶŅÕ×ÔÔĶÎËÆĖËÉĪĐĐŅŌĐÖŨå׹D‚;zpore…‹^h]?L|Ț˙KÅ# (>bŠ­ČâëãåâŌÚ×ÎËËĖÎĐĶÔŅÕÚ×ÔŅĖËČĖĶĖËÅĮČĪĪŌßįęÁw„ h~nre‡†GF\ˆĐ˙J’ # 8X¤ČÛčėâÚĪŌÎĪĶ×ŅĐÔŲŌÕÔŅÔÎĐŅĐĖĖĘÔ×ĶŲÜčĖž) … 3ƒleKjƒ{˛æ ˙Is# "-MtœžØįéáÛßŲĐ×ÛÕÖ×ĖŌÍŅÕÎĖŅÔĪ×ĶÕß騺^ „  )x|•Āė¤˙G5# %'Eo•¸ĐßãäåŨÖßÎÎÕŅÔÎÎĪĶŅÎĘŌÚß덄…ęü§˙%č# % € #Dh°ĘŨëéāčáŪÔŅĶÕÖ×ÔÔßßęҰGƒJāĢ˙Ճ!# % € %BfŽąËßčįáæßāÛØßãâéęŧ~„ ĢŽ˙Ņ„„UL ‚5 !%   'DfˆŠÄÚįëíéæįįôʧ-‚aī´˙ ôđĪŊ™†aNE!, $  *Ee†ŖÃŲëųūęÆl€)ēŋ˙ īÚŊĩ‰|N?'„*   "3If…ĸŌąR ˆÉ˙ īīÂŋ‡dO.ƒ! $!$(D@†ōŌ˙ üđÎŊ˜…^Eƒ $ '%#‚īÜ˙ ôíš‹‚WS%ƒ#*!‚īæ˙ ôâŊ˛ˆ‚P;% ƒīđ˙ îÜžšŒgJ#īų˙îú˙˙˙˙˙˙­˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ø˙íÚĮ¸ŽąÃįķ˙ áȸą¯ŦĨ“|w“ßī˙ëĘŋĮŌŌÍÅģ¯Ą‰[RĨĖ˙ūëØËē˛Ŧ¤ŸŸĨŽĩŋŅÛę÷Œ˙ÜÅĐßŪÛÖÍÅ¸Ē~^/qĮ˙ķÖēž†seabffhlnrtw}‚‡™ĒŋÔé†˙üÔĘßåãŪØĐÆē­žqeXYÃ˙ đƚw_WY_gjnrtx‡Š˜›œš•Œˆˆ”ŽÕ‚˙üÕĐæčåāŲĐĮŧ°ĸ‘‚scXRIxĒ˙‰ō‡˙=ÚĻvWPVZXVTSUX\]_]^bkrsv™¤ĒŠĸš„ppŒļë˙˙ÖŌčéįâÜÔÉŋ´Ĩ“„udVMHB5š§˙+‰ f„˙?ҘhSSPIECCEINSZ_aeeglqrtwzƒ‹”–ššœž šƒlrŠįæéččãŪÖÎÄš§”†taVNG7/:;Ĩ˙)ŒGC­ō˙˙ҘeSPF@><=DMUZ]^_ccbcgmswz}ˆŽŽŒ‹‹‘™ ¤Ĩ‘o…Åø÷ãŪŲĐÉžĒ•†s\RND08T^S ļĸ˙) ]ąrWL>99=DLRT€UVWZZYWZdjpwvx}‡ŠŒ€ˆ†Œ’– Ē­”~žÜķŪŌĖŋĒ–‰sXPMA/Eko_Up ˙)’F\nR9449DOTVRLJKLQVZ\\^ckrx~€„††‚†‰Œ‹ŠŸŦ„ˇáÖŊŠ•‡pVOM@/PtgZUM)Cú˙)“&>Ļ}9-16@KPPLJGGKPTWVUUVXXU]gnsz†‹‹†……ˆ€‹Œ’œĢˇēŖ…Ŋ­•ŠpMIL@-Uxg[VQJ0/ō›˙)”H^ąb+,19FMKEABDJOPLFC<;=>=:8FHEAEKSd•œ’‘•™™Š¸Ãŋ†kEFHC._”{h\SOJEm˜˙ē6–IgˇI$-4AGC<8:@?70*(,hqH>;=>7247?DBCGB<:9D^{–˜œž ĨŦ¸Å¤~G=I2U–~kaUOLIE —˙t—J]ÄM!-4AE>65:;2*%%# 5žÜ˙üŽ;>D92>?C?$%Bm‹œĨĸĻŠŠ­šÅžĨ„H0J’†ncXOLLI?Ŗ˙ņ—K7Î_!-5@B835:2%!"'Gˆ¨Øü˙˙īQ,4w}@ <@>A*.ƒÆ÷õÖäЏĄąĻŠŦ­Ž¸ÉÁĨy@ƒog[PKLKG,>ú–˙Ÿ–Ką!+5@A5156*!"w–‡Ēņ˙ū˙˙û:&¯˛ÅĒK*D'>Ãøû˙ŌĢË˙ÍWŦēŠ­ŽŦ¯ŊĐŊ—‚…uh^UKJKJGu—˙M–‘ē,#2>@6043$"Šģf:|ļō˙(åē|(4ĩõ˙ĩGKé˙ØŽ­ŠœŽÛ˙j3ĢÁ­Ž¯°´ÅĶąŽth`VNI€JFÖ˙ü• 9ÜW-:@6/3/ €=7žGC1L—Īû˙˙ü˙˙Ÿz¨›į˙đĄÖŌ­ fzs†›É˙Ø?¤Į¯˛ĩĩēÎÍ ^WOJGIKM3Hū–˙Ī–K­Š#$4?7/2.Gœģ’77C`ˆ¯÷˙˙ũūôËŗÎēĢĄĨÚ÷ô˛V4Ad”ųŨåõ˙sEĨČ´¸¸ˇĀÕš“nKLFGKPQ—˙‘•?áW/;:/0/ A›ˇ•p›“ˆ‘Ņ‚˙,ôˎ„••a| žäĪl:ežüÉÍŨ˙Ë,8FąËˇģššĘŌĻ…RDFKQRF0į—˙h•Kœž+"6<2-/# Xo˜¨œmŸÎ×Îõ˙ũ˙˙đĶäŗt†gDp„ŽÛ˙ėÂģÖŨËĖŲō˙p/:UÅĮŊŊģÂŲŧ™i\RGOICXĘØĐĪÛÛ§‚d?a™˙îMU„]\T}Ė`‡;)ք03/1)…ˇ¨—š•››ŧŦģĨq\]‘áÂiP\‰aŠīû˙˙Ūē˙˙ûš¸ĸšßz'RVJB€K D¯äĶŅŲŨ¨ƒa)™˙š9`„]\Wr¯ļB†&'͇"0422(•ƒnv—šĸ­Â}=ZˆąÂ­nf;Mƒå˙ø˙ķĪ­‘“‰e€ÚüR?B=S[RP@œîÖÔÚܧ…;b™˙îMU…]\Wt¨¤……I%В)0543'$”\6/S›­‡ĄÅ+$ŽļšoZƒē‘ƒ´˙˙û˙õéņëŖ’€ŽĨŽĐåU1L]ZFNDîÖÕŨÛĸ1ʙ˙š9`…]\WtИp„H¤3/665'.u$ 1_]a~¨ <¸ˇŠwrqŊģˇÂúüōÕŅáėâ“q¯āäÕäí2Vd@&;[JëØ×ß՛^|™˙îMU†]\WtКh […G¨ŧC+898'5~Ŗ…‡”Žg^‹/§ē™ĸȧ¤˛ˇĖôōŪÎÅÍŌĖŧ§ĒēÎļā˙Œ:\3SKahF‘ëÚÚâ˒Ož™˙š9`†]\WtКl—D„G…Ķ\):;<+ 6ÖīûüėØģŸĢqRĒÃËŧŽŦŗ§ĩėŨØđęŌÉŧ¸ŌÔÁŅčįv.80-^†acZH™đÚŲæŧ^ä˜˙îMU‡] \WtКl˜1ƒF\Û|.9;A0?ÎëÖŅÔÖŌÎŧ´U.!O€v´æėŪÃĀÔûũûōÜąŖŊØÚëĮQ C8+9}a94SVĢņŲØâ¨\}™˙š9`‡] \WtКl€w“‚5ÍŖB4=G6 )¤ļŸĻļžŊšĮŦ00/ Œ‚˙!ÚŅîîėņđĖŦ¸ŅåĨ9*F8*/JaBS?NjžėŲŪՑLļ˜˙îMUˆ] \WtŠ™k€y„…s! ŠĮe0?J? 5ds‰œ§­§H$*1 ‰Õķū˙ ņĖÔāäįčČĮք-7H4(,5IaA1:cˆÕâŲįēq`ī˜˙™8_ˆ\ [Xh™Vnu‡py˜DuŌ’@?s”˙ˇ?‡>[?6"Ī˙åæįæéėīëėíęë÷˙˙đc_ŊśiPf^'!7y9REL{nÅ°Ÿŋđķü˙ųP"4559>?>BMOFdCHcEvëâäĶ…jbC;??Ŗ”˙n2‡1[4{˙ėéęįččėååėíëîíæė÷RžÅŋ”iWqZ# !?<*BU|’Ž¸ÂŗĨ´Õėü”*0/08;;>EO\VLLKbJbŨëāØijd>:=8*Ū“˙÷5‡.\02ëųææåããįæâæéæåęčîōō°XŠĪēnax[#  #ƒ‚ĸģĩĨÂÔȎР{@:3217:=COZa^\Y\F[Õīß֐h`{d5=>*Nũ“˙Ķ1K‡M[L!°˙čęëæåââŲÛāāãëčåėííĘb…ĸļÕšwj€d(  "4§ĪÄÉĘÁŧĒ”~hQ@8B8534:>EOW\^_^XAdŲķáЍf^r‰R3:<”˙y7†6(8m˙íææäāŨŪÛØØÚÜáßßįæįįŪruŠĒÄßž”€t‡s7 /%+‚Ĩœ…nXD3.3=IL928;@EHORUYXYP@{ãõāƒc^v{C:??ŧ”˙L%†7@9-Í˙åãŨÚÚŲ×ĪÕßŨÚÚÜäįãåįë…kǝēĐæÉ‡}‹‡S" !$) 73))1:AFJNK=8@E€HMOQORS?Nĸķķ×Ŧxa`|l:?A1Fõ“˙Û2G†K\L"Ŗ˙ãäåááÛāØŅÖŌĐŲßäâÛŨåéíšhаžĮÕęØŦ‡›wB !&++(+036:‰”˙…]8ųđâįæåßāØÎÖÕĪŅĶÔÔŌŨâáãæ­i¤´ĀĖĐ×čäÁ ŖsE $+02359=>=>?BDDEFGE@FC7Dwžû÷ËŖ{b]mŠ’‹Š…O7=<Ŕ˙g:N„M=NG2Å˙áåįāāŪŲÍŅĶĐŨŨØÚÔÖŌ×ŨÛßŧl›¸ĀŌÜÔÖßįÖˇž•œ¯Ļ€W0!),-.269:;=>€?>AA92:YŠÅųúĖĻ„e\bxŽŒzB;>4;ī“˙æ_q…t]vRĨ˙įææäáßŪĶŌÚØÚŪŲÜÜÚŲÜÜÛÛÖĮvģÃŌæßÖÔ×áßĖĩŖĨ¸šŸ~`E0# $(.2356652/.3Ec‹ļâũ휁g\^k‹ŠŽ‘n9:=%a”˙—?ƒ=>AXū÷€äāŨŨÔŅÕŲÜÚÛŨŲŌØŨßáÛÜßŪ…ŋÄŅãéâ׀Ķ5ØÔÆļĒŖ§šÉɡŖ|nbYRQTSXbp—°ĖčøīÍŠua[]fx„„†Œ’Ž_5<=o”˙J „(_)Ã˙âæåáÛ×ÖÎÖŲÖ×ãŪĐØÚŪáÜÔÖÚâ؃~ĀÆŌâčįâŲŌÎÉĮČÄģ°Š§¨¯ēČŌÖÕŅÍĘĘÎĪÔÛäëėįÕš ‹xfZVYbq||…Š‘”“‰Q6=>ˆ“˙Č„"_!—˙ââãßŲÕÛŲÚŨŲĶÜŨ×ÚÚØâŨŲØÜß×Ķ“zŊÆŅáčåääŲĖČÂģĩą­ĻŸš˜šŸŖ§ŦąšžŋÁŋŧĩĢĸ–ˆyj]TOLP[irtw|ƒ‰”•“‘~E:??¨“˙‹!LƒI5M'a˙đįįâāŨŨØĐĶÕÖÚáĶ×ÜŌÚßŲÖŨÜ×ÔßĻxˇÆŅāéåääÜÍĮĀšąŠ ˜‘Š‚}€{'|~~|}|usld\SKEAACIS]chnu{ˆŽ“––‘’r<=@@˜’˙û\HW‚VaXBZķūäéįāŨÜŪŲŅĶÕĪŪÖÚÚĪÛ×ĶĪÔÛØŲŪäĩwąĮŅŪčåäãŨĪČÁ¸¯Ļ”‹‚yrle_ZVQMKHC?:97558?EIMS[bjsz€‡Œ‘–—•‘e5;=<Ģ’˙ŲB[ƒ\CZ9ē˙äčęæâßŲŌÆËĶĐŪØĪÖŌÔÛÛ×ŲŲØŲÖâßž|ŠČĐŨįåäâŨĐÉš°Ļœ‘‡~uoid^XSNHDA>;99€:=@CHMV^gpy…‹“——”ŽŒX4<=9)Ņ’˙‡)M‚LCN)—˙æįčæââŪØĐĐŅÍËŌÉŅÎĖÔŅÔŅĪĶÚŲĐÔŅŋ€ĄÉĐÛååãáÜĐÉÃģą§’ˆ~umg`ZUPKFC?<:9€89=AFKS\env~„ˆ‘•——“Ž„K8??;*͑˙ôK=‚JBL5NīųéęãāâÜØŅÎĶØÖÖÍŌŌËĐÖÔÎĖĮĪČŊÉŅ׈˜ĘĐŲäåâāÛĐÉÂ잍Ÿ”Š€wphb[VPKFB?<‚:<@EKQYbks{‚†‹’–˜–‘z?9==:&ɑ˙ĮIihEicNÖ˙éėéččßŨÛÎĶÎÆÍÎŅÖĘĐØØĐĮÆĪÔČÅĐŅÍΉ’ĘĪØãäáßÚÎĮÁēąŠŸ•‹zrle^YSNIFB@==€>@EJOV^gpw„ˆŒ“—˜•‘n79<<5.ؑ˙•JhgCjDž˙îíęåįáÛÖËŅŅĘĘĮÆÍČĖ×ÕĪÆĘĐÎĮÃËËĮÕŌŽÉĪÖáäāŨØÍÅŋ¸°§ž•Œƒ|unga[UPLHEB@AEINSZcksz€…Š‘”˜˜•Ž`3<==7*ؐ˙ņD9EDF.WøöėëéæåŨĶĖĘËČËÔĶŌÉĮĐÎĖÃÅĪĐĖĮČĘŋĘÍ׊ÆÎÕßãßÜ×ËÃŊļ­¤œ“Š‚|voic]WSNJGDCDHLQV]emu|‚‡‹’–˜˜”‹T3=‘˙Ā"DEEAž˙čííčåâāÔĐÖŅËŌŅĶĪĮŅĪÍĖČÍĐÕÎĮŅÅÁʞɥ‡ÁÍÔŨâŪÛÖĘÁģŗĢĸ™ˆ{tnhc]XSOKHEDEIMRW_gow~„ˆŒ“—™—’Ž‚I8@??@)S˙,P€ODQ-‹˙ķđįęņæÜÛÕÕÖŌĘŅŅĮËÍÍÅÍĐÎČĶĐÆĮۙZvÄÖ †ŧĖĶÜāŨØÔÉĀšąŠ —ކyslfa[VRNJG‚DFJNSYbjqy€…‰‘”˜™–x?;?>͎˙ũC€2E3#&âūčíëÁÁáöŌËÜÕĐÕÔČÍŅŌĐĪÎĪËÜÚĶ×ĖĖmfgĮĐ­†ļĖŌÛßÜ×ŌÆŊˇ¯Ļ•Œ„~wqke_ZUPMIF‚DGKOT[dlt{‚‡‹’–™™•m68;<Ž˙ŋ -.ĸ˙čéëëÔģĘŖĄíéÎŌŲŅÜÚŅڀĶ+Ųã˛¯ŗŦÍąx°zÆÅËĐŲßÚÖĐÅģĩŦ¤›’Šƒ}void^YTPLIF‚DHLPV^fnv}ƒˆŒ“–™˜”Ža19‚:-6î˙KŸ0UTTU@cøöëėîčéŪ‰]zˆČīęÖĪ×ÎÖÕÜæīĪŦTPŠhž™‚´sËĘģŠŦËĪÖÛØĶÎÚ˛ĒĄ˜ˆ‚{tnhb]XSOKHE€DCEIMQX`hpx…‰‘”—™˜“‹U3ƒ=? ˙}S€gEeJÔ˙îķëææâŠjēļŠm‚ËâÜĶÜæäĐŽ””vbmáڀQĻąqŌĶÁˆĻËÎĶŲ×ŅĖÁ¸°¨Ÿ–ކ€ysmfa\VRMJG‚DFJNSZbjsz‡‹’•˜™—’„I6ƒ><"šŒ˙KîMRYY]4~˙äÁŌōøå{…âÔąģ°‘kƒÚęΧ“Š†ˆļšģwĩÄpbɞwāĶȈËÍĐÖÖĪÉŊĩŽĻ”Œ…~xrke`ZUQMIG‚DGKOT]emu|ƒˆŒ“–™™–Žz@9ƒ>;&͌˙˜€*F'ŨũæĖąČɉŸčáâįÅÁ×Ãt€œ¯ĐßßĖžP?Œ‚‚č|æĶԐ‘ČÉÍŌĶĖĮŧąĢŖš‘Š„}wpid^YTOLIF‚DHLPV_gow~…‰‘”—™˜•o8;ƒ=60׌˙Kv$BADˆ˙æëôėÃbLÅ÷ęåķķחœ“ˇÕÚÚҧ{~vvhö§Žņ„ėŨڟ€žĮËÎĪËÅŧąŠž•އztoic]XSOKHE€DCEIMQXaiqy†‹’•˜™˜”Žc3<ƒ=.Gų‹˙īD:GH.Xū퀿?äËØŊt…ÃĪŦ—ŽŠēāß×ËŠnŒ§ĀÜáÛå}°í‹ãÔҞ{ŦÆÉĘËÉÁ¸°Ĩ›•…~xpie`[VQNJG‚DEJNS[ckt{ƒˆŒ“–™™–’‹‰S5„?/Lö‹˙KĖ„?:,Ũ‹˙K˛:aKVęõøčŒr§Nžāēq|’¸ŪōūäšjÂōįāâáãÍ´Č¯Tšãē†ëãāÕËËĩv­­°ŽĒ¤™‘‹‚~yrkf`[VQMIG‚DGJOV^gow†‹Ž’•——”ŒC9…A)Zū‹˙Ku1I'Ā˙˙Ė„Ŗë˙ĀWHqruĸ×īöæãŪâøârvģöęŨÜåęāœkÍā­SČųîŨŪׯk‰ĒĻϤŸ™‰„zvqjd_ZUPLIF‚DHKPXaiqy‡Œ“•–”Š‹X8EEƒDFš‹˙Lāh˙ØtVeŽ}z]\ˆ¸ĪâŪįáŲÜŲŪãåô؍qyšōįÛŨųœmâėPŽ„ŧėčáÖÍgŸœ™”Ž„‚|rnic^XSOKHF‚DHLRZckt|ƒ‰‘“””‰d?ģ‹˙LëT8}˙ņėíëæäā×ÔåáÕŨŪĐãÖŌÔÍØØÜŨāØÚäÚĐÛéįŗ|pEcšxKļĪĖžŋž•ĸÄĸk\qyy{yvpmjd^XTQMIF‚DGKQYbjr{€†‰Š‹ˆˆŠlLXQ=„?A#UŒ˙Lŗ%Kå˙ėėčäŪŲ×ĶÛāßāß×ÚŨ×ŲØŪŪßÛÜÖĶßßĐÚÚŌåėãž:uēkvîâéėŌÂāĄMĩģĩ kVclopojeca\USOLIF‚DILS[dksz€„†…‰ˆhMS^O=„?@žŒ˙L‹'š˙ėëėíåÜãŨÖÛĶĶÚÖÛäŪåŪÛáāÛÜāÛßåÚÖŪÕäįáņė`t°Pƒ˙ëāÚā˙ÃR´ŪÁĢŠœnPV`bdd`\ZVSPLIGDCDHMS[ckrx|}zƒˆ{cSZV\O=ƒ?A#UŒ˙ë,˙ōėėíëäæŲÎØØÖÔÔÚÜ×ÚÜÚããŪÛŪŲÔ€× įÜÕŪŲĐÛĮO‚Ĩ]X|žöčėāb¸îĪįÚŋģŸqRKSW€USQNKHEC‚ACFKRZaglnr~‰‚weT]ZU\O=ƒ?@žŒ˙Lƒč˙ęéčįâáÜŌÕÚÔŌÛÛßŨ×ÕÍÕÕŪŪÛÚØÛÛŌßÚÕßŲÚĖÉĻXĨœ\Ģ„p|Ā÷o’öÜÜ×ŨÛÎ賈_MHNNJGFDCB@>€=>=?BGLRY`l{…ƒvXu†S\ZU\O=‚?A#U˙gL‘˙æįčįáÜÜÖØŨÖĶÕ×ŲÕÕŲØ×ĶÖŨÚØŌÖßâŨÚ×ŪØŲÜŨ÷Ÿ{õē[ËôŪ“ƒWrōÔŌÕØØÕĐĖ—vWJGHIFB=:86565569=EPZeouzpa]Y„S\ZU\O=‚?@žŒ˙ĩf˙īįåâÚØŲÖĐÕĶĪÍĶÕŲŲ€ĶQרŪÜŨÖÖÛÖÕŲÕÜŪÜÖÕāņv”üˇpÚâÛøŋx¯°ĮÚŌÛŲØÛ×ÉÁ¸ĨŒoYLGDBB@>=<=>>?CLYbbfifW`ci[}ƒS\ZU\O=?A#U˙–Ņ˙€äbÜØÕ×ÎÆÆÉÉĪĐÎ×ÕÖÕÔÕÖÖÛÔĶŪãÛÕĐ×ŲÕŪŲØđÃhĪęĒsŨßÛãÉāÚļŠ´ŨŪŨÜŨŌĪŅÍģąĨzeUIC><9;<<=>B>66`eblZgdh[}ƒS\ZU\O=?@ž˙hšį÷ôčßŨØĐÉČĘČĖÍĘŲÖĐŌĐĪŅÕÔÍŅÜÚÔÔŪßßŨÛÔĐÚô•„úåÂ~ÖÕãÚŨÛÕßÎÄŅĐĶßÚÕßŪČÃÁ´ŦŖ–ˆynaUKFB?>@ADbpdk[gdh[}ƒS\ZU\O=€?A#UŽ˙hœ>nŸÆáíëÕĐÕĖÍÖĘÉĐČÎËČÂĘĪÎĐÔĐÕĐÔŲÜØØÜŲÛÜæy¯íŪģ{ŨįâŲÚ×Ú×āäÛŲÕŪĐÕÚÚŌ×ĪÂÃ¸ŽŖ ”‰|wrompra >ydk[gdh[}ƒS\ZU\O=€?@ž˙l1Cm™ŋŲæßßĶĐŲÍĪĐÆÂÂËĪĶĖÉĪŌŌÖØŪÛØÕÔŌáÃyãâæ´{ØÖÚâŨÚÜŨŪÛÛŲáŪÚÛÜÔ×ĶŌØŅĖÂŧ°Ŗ›—‘Œ‘‹‡*vek[gdh[}ƒS\ZU\O=??A#U˙ë €K !@l’ˇŅééŪÛĶÔŌÔÎŌĘĀČŅĖÖØŲŪÚÛŪŨŲÔváĀåŽiŊČŲĶÔŲÔŨÜÖßŪØÍÔØÚŲÛËĐŅĐÖÎÎÁēˇĩ̍§§Ŗ•O€cok[gdh[}ƒS\ZU\O=??@ž‘˙jÁ  AfĩÎäčāØŲŅÅÉĪÄÎËĖÜÖ×ÖÔ×áęeMĐßŨefĶâÛÎĐÎÎŲÚßŪØÎÖØÖÎØĪĐ×Ķ×ĖĖÍČĘÍĘÆÄÃĮŽ{ 5xj[gdh[}ƒS\ZU\O=?A#U“˙ ¨  €[>aˆŦËâŪāßŲ××ËĶ×ŌÕĪÍĶŅĘ´_o¸_˛ØÖ×ÛÜÜß×ÚÛÜØÖŪáÜÖÍĐÚÔÔŅĪÕĐĖĪĪĘÕŲâΤ0  ft[gdh[}ƒS\ZU\O=A7ž”˙gf  4VƒĻÅŪčßãįŨÜŅŅרҺŋŅŠŧļŋÍßÜØßŪ×ÖÔÚÔØÕÎĘÆÍÜÕĐĪÉĘÎĘÍÖŌŌŲæãĀg7Zgdh[}ƒS\ZU\Q:y–˙M4  -Qv™ÂŲäéāáā×ŲØĐßæāäâŅÖÚÛÖĶØÖÚØŲŌĖÔĪËČĮĪÉÆÎŅĶŌĐĖĶĶÉ×Ũîˑ‚ ncgdh[}ƒS\ZWZ.gĮ—˙Mí")FmĩĶāäęãÜŨÔĐÛŅÎŲ×ÔĶØÔÖŲÔĶŌÔ×ÕÕÔĪĖĮÍĖĘĐŅŅŌĶĐÖŨå×°D‚7nfdh[}ƒS^R3AtĚ˙KÅ# (>bŠ­ÉãėãæãŌÛØĪĖËÍĪĐÔÔŌÖÛØÕŌÍËÉÎÔÎĖÆČÉĐĐŌßįęÁw„ ]rch[~:9Q€Í˙J’ # 8X~¤ÉÜéíãÛĐĶÎĐÔ×ŌŅÔÚĶÖÕŌÕĪŅŌŅÍĖËÔØĶÚÜéĖž) … /v`Z?a{q­å ˙Is# "-NuœžØčęâÜāÚĐ×ÜÖÖØÍŌÎŅÕĪÍŌÔĐØĶÕß騺^ „  !ksŽģë¤˙G5# %&Ep•šĐßãäåŨÖßĪĪÖŅÕĪĪĐĶŅĪĘĶÚß뎄„įü§˙%č# % € #DhąËŨėęāčâßÕŅÔÕÖ×ÕÔßßęҰGƒJāĢ˙Ճ!# % € %BgąËßčįáæßāÛŲāãâéęŧ~„ ĢŽ˙Ņ„„UL ‚5 !%   'DeˆŠÄÚįëėęįčįôʧ-‚aī´˙ ôđĪŊš†aNE!, $  *Ee…ŖÃŲëøūéÆl€)ēŋ˙ īÚŊĩ‰|N?'„*   "3Ig…ĸŌąR ˆÉ˙ īīÂŋ‡dO.ƒ! $!$(D@†ōŌ˙ üđÎŊ˜…^Eƒ $ '%#‚īÜ˙ ôíš‹‚WS%ƒ#*!‚īæ˙ ôâŊ˛ˆ‚P;% ƒīđ˙ îÜžšŒgJ#īų˙îú˙˙˙˙˙˙­˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ø˙ã˲Ÿ•œĩãō˙ ūĪŦ—Ž‹ƒoY[ƒÛī˙ÜĢžŦē¸ą¨‚k>;›Í˙ęŌïĨž•—ĸĢˇËØéųŒ˙Ā ¸ÍĮĀšą¨™‹}peGeĮ˙ķĐ¯ŽpZICEHIKORVX]dlr{ŠŸ¸Ōę†˙ú¯§ĐĶĖÅžļŦžŽrgYPEOÃ˙đŋ‰_B79AINRXYXYZ]gorw‚††ƒ~vsxˆŠÖ‚˙ų­°ÛÖĐĘÂēŽĄ‘‚th\OFA:rĒ˙‰ō‡˙=֘^8/5;:64359=?@>?CMUVYft‚—”ŒiV^´î˙˙°˛āØĶĪÉÁ˛Ą“„uj_PF>95)ļ§˙+‰ f„˙?ˈM12/(" "',3;@CGGHOUTWZ^hq{~ƒ„‡€hWf¨ÉŋáÚ×ŌÍÄļĻ–…vl^OF?8-&. 3Ĩ˙)ŒGCŽō˙˙ΉJ20$!,5;?@ADECDHOV[^bfmtutqoou‡‹‹v[mˇíčÖүˆxk]KC?7'-BI@ŗĸ˙)E ]§Z6*!+24556579:869DJS[YZ`dloqljjgouz†‘•o’ĐäÉ´§™ˆxn]HA>5'7SVJBi ˙)’FJQ0 .562+()+.38:8:?GPW]a__bhiicbgimljqƒ”œ•ux§ŊĒ•‡wkZGA>4'?ZPFC<:ú˙)“&9\ )0/+'&%)-/22358;=:CMRX^afiiddfi€lkmp} Žx†”ˆxnY?;=4$B^QGC?:"%ķ›˙)”HU˜A #+)#"&)-,**&'-/0.,07=:7‹—˙t—#V­)!,˜Ų˙ûŠ/38, %/3€1#618g‚tfv„„ˆˆĒĸ’w8!;t]TH?==:1 –˙ņ—K4ē=  =‚ŖÖü˙˙ėF $ls2 .2/3xÁõõŲčČrzކˆ‹‹Œ™­Ļ”k2s}_WKA<=<83ú–˙Ÿ–Kļg   k¤đ˙ū˙˙ú,а´Å¤>5/Ŋųū˙ŌĢË˙Ė@‡”ˆ‹Œ‰ŒŸ´Ŗ†sveXOE<:<:8n—˙M–ˆ¤   €˛a7wĩō˙áļ}'3ĩ÷˙°<<į˙ØŽŦ‰œ­Û˙e#‰š‹€Œ‘§ļš~eYPG@::;:6 Ā–˙ü•6Ė5€@  -“•D@/H“Đü˙˙ü˙˙›xĨšį˙ņ›ĐĶ­Ÿeys…œĮ˙Ō6„ Ž’–¯°ŒpPHA:8:;< ;—˙Ī–K¤’   <¯‰54@Yƒ¯ø˙˙ūūōįÉĩ§ĸŲđīĩV3@c”ûÜßđ˙f =† ””œĩŸ‚`==67;>?ˆ—˙‘•L;Ō7  4qĒŒh‰~‡Æüöų˙˙ī°~^x„’ŨĐn:fŋúÁÄ×ũÂ.=Ŗ“•‘§ŗwD46:??3 æ—˙h•K”Ē  H_‡˜Žct‘ŧÚßėįīöŨÅÚŠn€bAmwyĮ˙įžļÍĪžÂĐë˙b0Hž ˜–‘œ¸ĸˆ[-:@CCj˜˙B”LËd Ga}qxs}´´§ŦĖØ×Ķą´Ķ¸­ļ‘‹ĸ—} ŋŌØÔČÆĪŌÕŪ˙Š9.dŦœœ™›ąĩ’q8AŒĮ°­ˇŠFp™˙@d‡b a]x­žoƒx—’‚0Á  Œ€—–’žˆ !!‚˙!ĪĀâß×ŲØĩ™ĨŧΑ)7'5P7D-'?1%)/RW>LU>›Ä°ē—a(šö÷íô”˙ąCjˆgZiTlî˙ũ˙ûŨșp…‡Y †Ä))*  Ī¸ÁoC[Â˙īŌæø˙ŅJph54E1$#%.?M9&94gÆ˛´ąqW92=54ā”˙u.‰JI(ˇ˙īëčé÷˙˙čШĢ}€FOˇŦa"2&  (ØāĨĘŗSFb›ō˙ãÚö˙˙d $+?A2)*(%%03@I.?M>Ĩðš‰\M,#J”˙ë>AˆH K)k˙đęííėęëëōū˙öô¯k(%†Ŋ•N-7  5 ­Äifž•jˆ— žæüîø˙˙u7:4(,/)),46UM;FM2y˯šœ`W:)./ g”˙š‰BZ:&Ķ˙čééčëîņíîīíîú˙˙õVCĒļ„F&77  %i4J?Eoe˛ĄĒÛŨåķå?%&%(-.-19>8V=9E)Zġ¸ŠiTQ3+/0›”˙o4‡3[7~˙îėėčęëîčįíīíīīéíū‰8„ąŽ{D,A7 .6'(GŗÆŗĻpOKav@%,.w”˙z:†8:q˙īččæâŪāŨÚŲÜŪâāá€čéãbZ‹¤ÆŠz^KUM' g†€mYG5&!&0;>)!()+.37:<€@6&]ŧȲšhNKczh3+/0ˇ”˙N&†9@;.Ī˙čæßÜÛÛØĐ×āŪÚÛŨåčäæčņzO‘‘˜ŦÉŗƒfV[Z:&##+26;>:+%-0€167869:&2€ÉÅ̊_LMgyyZ)/1 7ô“˙Ü6J†N\O%§˙įæįãâŨâØŌ×ĶŅÚāäãÜŪæęņ“M“žĸ¯Ęŋ’qcdjS0 !#')+22,).3442//263$*_ŠŅēšvVIRnzsxL%-/€”˙…;úķäéčįáâŲĪ×ÕĐŅ€Ô$ĶŪãáãéŠPŠ—ŸĒǝÄȧ‚misoS2  #%()-/0.*,* +YšÎČĄ‚bMIYsztur=(.-Ā”˙j=†R=?>AJVdvĻŊËÄĨ†r_NHIQ`jknty{y|M%-. d”˙J (ƒ'_)Å˙åčįãŨŲ×Î×Ú××ãßŅØÚŪáÜÔÖÚâŪv`Ĩ¨˛ĮÎÍĮ¸ŦФĸ¤Ŗ›‘І„‰‘šŖ§§ĨŖĄĄĨĻǰ¸ŋÁŊ­•€o`QGCDLYbcflsy}|zv?'./ ~“˙Č„#!š˙€åXáÛØŨÚÛŪÚÔŨÜ×ÛÚØâŨŲŲŨßרŠ\ĸŠąÆĐĘÉĘšĻĸœ•‹…€}|}€‚…ˆ“˜™šš—’Š‚xmaUJC=:DKRZagnty}€z}R%-.- ¤’˙ÛH`‚ab_?Ŋ˙įęėčäāÛÔĮĖÔŅßŲĐÖŌÔÜÛØ€Ų$ÚÖâážd‹Ģ°ŋÎËĘÉĀ­Ĩž•‹xnf]VRNJFB=:630.€+€,-025:@HPX`flrw{€~yyF%-.)͒˙‰.Q‚P R.œ˙ééęčããāŲ€Ō2ĪĖĶĘĶĐÍÕŌÕŌĐÔÜÚŅÕĶÂj­°ŧËĘÉĮĀŽĻŸ—„yof^VQLGC?;852/-€+€*-148>EMU^ekpuy}€€}zq:)0/+ɑ˙õM@‚MDO8RđûëėåâãŨÚŌĪÕÚ××ÎĶÔÍŅØÕĐÍÉŅĘŋËĶØŌtxްšÉĘĮÅŋ­ĨŸ˜Ž…{qi`YTOID@<8520-,+€,-048;8420€.//048;AHOW_fkotx|z}\'+--&Ց˙™P‚mCoJŖ˙đīëįčâÜØĖŌŌĖĖÉĮĪĘÍŲ×ŅČĖŌĐÉÅÍÍÉ×؁m­°ļÅÉÅÁģĢĄœ”Œ„|tld_YTNIEA=:7421237;?ELSZbhlquy}€~y|O$-..(֐˙ņF:FDG/ZųøîíęįæŪÕÍĖÍÉĖÖÕÔËÉŌĐÎÅÆŅŌĪÉËÍÂĖĪʏiǝ´ÃČÃŋšŠ š’Ёyrjd_ZUPKGC?<964€3446:=AHNU\cimrwz~}yxB%€./‰˙Â(HEIE"Á˙ëīîéæãáÕŌ×ĶĖÔŌÕĐČĶŅÎÎĘÎŌ×ĐĘÔČÅĖÁНh¤¯ŗĀĮÁŊˇ§—‡wohb^YTOKGC@<975458;>BIPW^ekotx|€|zp8)0E˙0T€SDU1˙öōéėņįŨÛÖÖØÔËÔĶÉÍĪĪÆÎŌĐĘÕŌČĘÜ g~Į۟hž¯ŗŋÆŋēĩĻ›•…}umfa\XSNJFA>;96‚458;>DKRY`glquy}€‚{{f/-0/ Ɏ˙ũD€3E4$(ä˙ëîėÆÅáôĶÍÜÖŅ×ÖĘĪŌÔŅĐĐŅÍÜÚÔŲÎÍwoqĘÔŽj—­˛ŊÃŊ¸ŗ¤™“‹ƒzske`[VRMIDA=;85‚459<@FMT[binrwz~‚z|[&*,-wŽ˙ŋ/€0/ Ĩ˙ëęíėÖĀÍŠ§ëéĪÔÚŌŨÛŌۀÔ+Úã˛Íĩ‚ŗƒÉÉēq­¯ēÁŧļąĸ—‘‰€xqid_ZUPLGD@=:75‚46:=AHOV]ekotx|‚‚}y|O#+‚,(í˙JĄ6ZYYZEhú÷ėîđęéŪ‘i‚ÉíęØĐ×Ī×ÖÜåíаa^‘s¤ ‹¸}ĖÍĀs‹¯ŽĩŊē´Ž •ކ~vnhc^YTOKGB?<97ƒ47:>CJQX`glquy}€‚}xxD$ƒ.0˜˙‚Z€lEjP×˙īôíįæá’uŊ¸‘v‹ĖāÜÔÜåâҞ›šnxßŲ‰]Ŧĩ{ĶÖÆq„¯¯˛ēˇ˛Ŧž“Œ„|tlfb]XSNJFB>;96‚458;?ELSZbhnrwz~‚€|yq9'ƒ/,ŗŒ˙KîQW]]a8‚˙čÆÕķ÷䄍ßÔļžŗ˜u‹ŲįĪ̚‘šŧŊ€šĮ{mʤ€āÕÎuz°¯¯ļĩ­§™Š‚zrke`\WRMIEA=;85‚459<@GNU]djosx|~‚‚{{h0*ƒ.,Ɍ˙™ €,F*ßūéҏĖĖ‘ĨæááæČÅ×Ä~‰Ą‰ˆ—ŗĐßāÎŖ]M“ЋᔅåÔ؁mŦĒŦ°˛ĒĨ˜Œ†wpje_[UQLHD@=:85‚46:DKRZahnrvz~ƒ}x|R$-ƒ.9ø‹˙īF>IK0[˙ö€č?æĪÚÁ~ÄĪą•’–ŊāŪØĖ­ˆx’ŦÃÜāÜㅴ듓áÔÔ˛^ŒŠ¨¨ŠĨ“‹wsle`[VQMIEA>;96‚458;?FMT\cjosx|~‚‚€|wwB&„0>õ‹˙KÍ@Z[Y?ĩ˙įįęįáäŨæĐjZ†…“ŋÕĶÚׯƒw}­Ą”×ũæßīŧĖօ›îßÛŅrl§ŖĻĨ¤šŽƒ~yrkea\VPLHD@=:86‚458;AHOV^ekpuy}€‚‚~zyj2+„0\ū‹˙KĸIijM‡˙îčįëėĶ­…”™´ÔÚÖ͏‰€›ÂĐØÆšw‡ģōėŠ‹á׃ąîÛÛá›V˜ŸŸ  ˜‰~xoid_[VQLHD@=:85‚469=CJQY`gmrvz~‚€}w|T%/ƒ01zŒ˙KrH\TEÖūčėúؘy‚Žš¸ÕÜØŅē‰ptŽÂĪëéåίÆē{‹ä§˜æÔ…ēåÕáŨ°\rĸ˜™•‘Ёxrnhc^YTPKGC@<975‚47:>DLS[biotx|‚zwr:'…0 ˛‹˙KÛ@OU0”˙īķíž{LbĩâßŪÔšˆ|Ŗ­‰‘ĮîåŲØáíΏȏ›ŸgĒÜĮ~ÉįŨáĪÎS‹™‘Ž‹wqigc]XSOJFB>;96‚457;@FNU]dkquy}€‚€|v|W&/„0+ۋ˙Kĩ?eO[ė÷ųé•}ÅŦ\¤ßŊ–{…™ŧŨđûäĄtˆÄīåāâāáΡɲ`ŧãŊéãāÕËËģd[‘Š†wojd`\WRNIEA>;86‚458;86‚458:85‚469>DLS[binqtusuxY;JC.„02HŒ˙L´(Nį˙îíęåāÚØÔÜáāāß×ÚŨ×ŲØŪŪßÛÜÖĶßßĐÚÚŌåęâŖH~ŧu€ëâéëŌÅß§[¸ŧļĨjAFRUUTQNLIFA?<:85‚47:@FMU\bhmoonvuT<9753‚2359@FLSWZ_jtkcSDOLFN@.ƒ01šŒ˙M„é˙íëęéãáŨĶ×ÛÕĶÚÛßŨ×ÕÍÕÕŪßÛÚØÜÛŌßÚÕßŲŲÍĘĒdŠĄgތz„Ãôy™ôÜÜ×ŨÛΡĨ‡cG9897654321/.€/.026;@FMXfnk_Dj|BMLFN@.‚02H˙KP–˙ęęëęãŪŪ×ŲߨÔÖØŲÕÖŲŲØĶÖŨÚŲĶÖßáŨÚ×ŪØŲÜÜôĨ…ōžfËōŨ™‹b{đÕĶÖØØÕĐÍÁ¯™{ZE:6420.,*ƒ)+.5=GPX^bZOOKuwBMLFN@.‚01šŒ˙ĩi˙ōęįäŪÛÛŲĶ×ÕŅĪÕ×ÛڀÔ4רŪŨŨÖÖÜÖÕŲÕÜŪÜÖÕāųģzŲáÜõÁ€˛´ĘÚŌÛŲŲÛØËøĨt^LA941/€,-€.18BKLQTTFQV\LrwBMLFN@.02H˙h™Ö˙čéįāÜŲÚĶĘÉĖĖŅŌŅŲרÖÕÖ××ÜÔĶŪãÜÖĪ×ŲÕŪŲØđÆsĪč­|ŨŪÛãËāŲš¯ˇŪŪŨÜŨŌĐŌÍŧŗĨ‘}iYKB:502201274.-QYV_KWUZLrwBMLFN@.01š˙h ŊėũúíåâŨÕĪĖĪĖĐĐÎÜŲĶÔŌŌĶÖÖĪŌÜÚÔÔŪßßŨÛÔĐÚņ›Œ÷äŇÖÕãÚÜÜ×ßÎÆŌŅÔßÛÕßßÉÄÂĩ­Ŗ—‰{qdYNJEA@BCG"UdV\KWUZLrwBMLFN@.€02HŽ˙h›>oĄÉåōņŨ×ÚŌŅÚĪÍÔĖŌĪËÅÍŌŅŌÖŌÖŅÔŲÜØØŨŲÛÛ䁺ėŨžƒÜæâÚÚ×Û×āãÛÚÖŪĐÕÚÛĶØĐÃĸ°¤Ą•Š‚}xspoqsb 7kV\KWUZLrwBMLFN@.€01š˙l1CošÃŨëæåŲÖŨŅĶÔĘÅĮĪŌÖĐËŌÔÔרßÛØÖÔŌáłáá䡃×ÖÚâŪÛŨŨŪÜÛŲâŪÚÛÜÕØĶŌÚŌÍÃŊąĨŸœ™“‘Ž’Œˆ*iV\KWUZLrwBMLFN@.002H˙ë €K @m”ēÕīđåâŲŲØØŌÕĪÅËÔĪØÚÚßÛÜßŨŲÕ–āÃå˛sŋĘŲĶÔÚÕŨÜÖāßŲÍÕØÚÚÛËŅŌŅ×ÎĪÂŧšļŽĒĒŠĨ—P€W_\KWUZLrwBMLFN@.001š‘˙CÁ  Ag‘¸ŌéîæŨŪÖĘÍÔÉŌĪĪŪØØ×ÖŲáéqZĐŪÜpqÔáÜĪŅĪÎŲÛßߨÎר×ĪŲĐŌØÕØ€Í#ÉĖĪÍČĮÆËą} 0h[KWUZLrwBMLFN@.02H“˙ ¨  €[>b‰ŽĪįäæäßÛÚĐ×ŲÕØŅĪÕĶ͸kzŧˆlļØ××ÜŨŨߨÛÛÜŲÖßáŨ×ĪŌÜÖÕĶĐ×ŅÎĐŅÍŲÜæŌĻ1  XcKWUZLrwBMLFN@.3'š”˙gf  4V„ŠÉâíäéėáāÕÔÚÜÔ¸Ã͘‰’ŋēÃĪßÜŲßŪ××ÔÛÔŲÖĪËČĪŪÖŅŅĘËĐËĪØÕÕÜęįÂg0mJWUZLrwBMLFNC* n–˙M4  -RwœÆŨéîååäÚÜÚĶáįāäãĶ×ÛŨ×ÔŲÖÚØŲŌĖÖĐĖĘÉĐĘĮĪĶÕĶŅÎÖÖÍÚáōΓ‚ `SWUZLrwBMLHK[×˙6í"(Fn‘¸×åéîæßáØĶŪÕŅÜŲÖÕÚÕØÚÕÔŌÕØ€ÖŅÎÉĪÎĖŅĶĶÔÖÔŲáéÛŗE‚1\VUZLrwCOC"1hš˙KÆ# '=cŒ°ÍįđįęįÖŪÛĶĪÎĪŅŌÖÖĶ×ÜŲÖÔÎÍĘĪÖĪÎČËĖŌĶÖâęíÄy„ M`TZLtq''Buɝ˙J’ #!8X€ĻËßíņįßÕ×ŌÔ×ÚÔĶÖÛÕŲ×Ô×ŅĶĶŌĪÎÍ×ÚÖÜāíĪ * … (dPK-SocĨã ˙Is#!"-NvžÁÜëîįáäŨÔÚŪØŲÚĪÔĐÔØĐÎÔ×ŌÚÖŲâíÜĩ_ „  Xf„ĩé¤˙G5#!%&Eq—ģĶãįčęáÚâŌŌØÔ×ĐŅŌÕĶŅÍÖŨâīď„‚äü§˙%č#!% € #DiŗÍāîíäëåâ×ÔÕרÚ××ââîÔąGƒJāĢ˙Ճ!#!% € %Cg˛ÍáëęäéââŨÛâæåėîŋ€„ ĢŽ˙Ņ„„UL ‚5 "%   'Cf‰ĒÅÜęîīíéęę÷ÍŠ-‚aī´˙ ôđĪŊš†aNE!, $  *Ee‡ĨÄÛîü˙íČn€)ēŋ˙ īÚŊĩ‰|N?'„*   "3Ig†ŖÔŗS ˆÉ˙ īīÂŋ‡dO.ƒ! $!$(D@†ōŌ˙ üđÎŊ˜…^Eƒ $ '%#‚īÜ˙ ôíš‹‚WS%ƒ#*!‚īæ˙ ôâŊ˛ˆ‚P;% ƒīđ˙ îÜžšŒgJ#īų˙îú˙˙˙˙˙˙­˙t8mk@  %)5A?73565:@=8892%    $"*3>OOA;:>ADIGC@>7*%%    " %*.6=A;6;?@??=:4.*'#   "'%!%$ !$(2<>89BC=<72-**+%    !#()&"(,'*11359DD?9.(%$''"    #%%#%*&&&-/," &+),15;?>4+%"!##"    !#%&(%'("#+.,*'#,/.-+/4/+'$" #%"  #&(,-*!!)' $-+'&)%#..$"")*(&'$"$!  #+-/.("#&($&*('',,(#"$" "%%"   #+0/+%##%*,*&*.(&*,)# !!!$!   #)./*&%&+0/,(/3,%'*)($$(()#4kĸĮɯo%  !#))'()*.1/,19;2*++*($%),/'Wē˙˙˙˙˙˙˙õ–  !&',/( %)..'9Á˙˙˙˙˙˙˙˙˙˙˙õa   (D`|” ¨¯¯Ēĸœ‹xjO1%('*'{˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙“ 3j Ėī˙˙˙˙˙˙˙˙˙˙˙˙˙˙øÛš‘d0%&Š˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙žB‘Ķ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙åŠd Ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙{Ö˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ę Ež˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙2,™ú˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ĀI—˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ζ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙4mķ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙’ŧ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÄQö˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Éy˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˜Ž˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ew˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙$H˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ųú˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙…š˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙)F˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŅŨ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙eM˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø Â˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙“˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙m˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ąŦ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙-Ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙žú˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙13˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙žB˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙.G˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ĩA˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙!0˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ĸî˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙?Ę˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙öĄ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ŧ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙FT˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙č"ö˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Œt´˜BČ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙.í˙˙˙˙āœV•˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ߍ˙˙˙˙˙˙˙˙ō´p0>˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Œ˙˙˙˙˙˙˙˙˙˙˙˙˙ÜĸfCį˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙@Ā˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ō˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķJ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙´ę˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙qˆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙-˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ęĘ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¨_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙j ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙+ŗ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙åO˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¨ ø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙iˇ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙.f˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙é ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŽØ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙u‘˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙7A˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōķ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ģŽ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙zO˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙A÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ûĨ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Đ8˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ąá˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙nv˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üŽ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ō6˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ĄŲ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙vc˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Dö˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų•˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŗ"˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙MÆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙įQ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Zđ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Õ•˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙%/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙hŪ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙“˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ %˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙‘Ø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙l~˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ņ6(˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ö|Ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙õŽ‹˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ņt8˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŧz1+ö˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙8 =˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÔE˜Ņ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙"\–Ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙h!W”Ėū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ĀUŽĮų˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙J„Ŋī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙gAw°æ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Í4kĨÚ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙"*_—Īũ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙‹Q‹Āō˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ęFģī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙GB€ēđ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ģE€žô˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙KˆÄú˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ƒPËū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ėY–Ō˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙N&`ĄÛ˙˙˙˙˙˙˙˙˙˙Ė/mŦé˙˙˙˙˙Ę?Â˙Û! icnV Bđrabbitvcs-0.19/clients/osx_finder/toolbar_button/SCToolbarButton.xcodeproj/project.pbxproj000066400000000000000000000317061445560650400323740ustar00rootroot00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 9524E8930FFE6F7000C8E021 /* schelper.icns in Resources */ = {isa = PBXBuildFile; fileRef = 9524E8920FFE6F7000C8E021 /* schelper.icns */; }; 952D6E5F100EBA3B009C260F /* fileListBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 952D6E5E100EBA3B009C260F /* fileListBuilder.m */; }; 954F9AB4100C0D5100109F93 /* sendmsg.m in Sources */ = {isa = PBXBuildFile; fileRef = 954F9AB3100C0D5100109F93 /* sendmsg.m */; }; 954F9AE6100C10E200109F93 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 954F9AE5100C10E200109F93 /* Carbon.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; 1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; }; 28639AB71016873500EC00E2 /* SCToolbarButton_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCToolbarButton_Prefix.pch; sourceTree = ""; }; 28F43C4D1117C89700B7C973 /* menuitems.strings */ = {isa = PBXFileReference; fileEncoding = 2415919360; lastKnownFileType = text.plist.strings; lineEnding = 0; path = menuitems.strings; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8D1107320486CEB800E47090 /* RabbitToolbarButton.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RabbitToolbarButton.app; sourceTree = BUILT_PRODUCTS_DIR; }; 9524E8920FFE6F7000C8E021 /* schelper.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = schelper.icns; sourceTree = ""; }; 952D6E5D100EBA3B009C260F /* fileListBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fileListBuilder.h; sourceTree = ""; }; 952D6E5E100EBA3B009C260F /* fileListBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = fileListBuilder.m; sourceTree = ""; }; 954F9AB2100C0D5100109F93 /* sendmsg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sendmsg.h; sourceTree = ""; }; 954F9AB3100C0D5100109F93 /* sendmsg.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = sendmsg.m; sourceTree = ""; }; 954F9AE5100C10E200109F93 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 8D11072E0486CEB800E47090 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, 954F9AE6100C10E200109F93 /* Carbon.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( ); name = Classes; sourceTree = ""; }; 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { isa = PBXGroup; children = ( 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, ); name = "Linked Frameworks"; sourceTree = ""; }; 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { isa = PBXGroup; children = ( 29B97324FDCFA39411CA2CEA /* AppKit.framework */, 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, 29B97325FDCFA39411CA2CEA /* Foundation.framework */, ); name = "Other Frameworks"; sourceTree = ""; }; 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( 8D1107320486CEB800E47090 /* RabbitToolbarButton.app */, ); name = Products; sourceTree = ""; }; 29B97314FDCFA39411CA2CEA /* CocoPopUp */ = { isa = PBXGroup; children = ( 954F9AE5100C10E200109F93 /* Carbon.framework */, 080E96DDFE201D6D7F000001 /* Classes */, 29B97315FDCFA39411CA2CEA /* Other Sources */, 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, ); name = CocoPopUp; sourceTree = ""; }; 29B97315FDCFA39411CA2CEA /* Other Sources */ = { isa = PBXGroup; children = ( 28639AB71016873500EC00E2 /* SCToolbarButton_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, 954F9AB3100C0D5100109F93 /* sendmsg.m */, 954F9AB2100C0D5100109F93 /* sendmsg.h */, 952D6E5E100EBA3B009C260F /* fileListBuilder.m */, 952D6E5D100EBA3B009C260F /* fileListBuilder.h */, ); name = "Other Sources"; sourceTree = ""; }; 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( 9524E8920FFE6F7000C8E021 /* schelper.icns */, 8D1107310486CEB800E47090 /* Info.plist */, 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, 1DDD58140DA1D0A300B32029 /* MainMenu.xib */, 28F43C4D1117C89700B7C973 /* menuitems.strings */, ); name = Resources; sourceTree = ""; }; 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, ); name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 8D1107260486CEB800E47090 /* SCToolbarButton */ = { isa = PBXNativeTarget; buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "SCToolbarButton" */; buildPhases = ( 8D1107290486CEB800E47090 /* Resources */, 8D11072C0486CEB800E47090 /* Sources */, 8D11072E0486CEB800E47090 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = SCToolbarButton; productInstallPath = "$(HOME)/Applications"; productName = CocoPopUp; productReference = 8D1107320486CEB800E47090 /* RabbitToolbarButton.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SCToolbarButton" */; compatibilityVersion = "Xcode 2.4"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( English, Japanese, French, German, ); mainGroup = 29B97314FDCFA39411CA2CEA /* CocoPopUp */; projectDirPath = ""; projectRoot = ""; targets = ( 8D1107260486CEB800E47090 /* SCToolbarButton */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 8D1107290486CEB800E47090 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */, 9524E8930FFE6F7000C8E021 /* schelper.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 8D11072C0486CEB800E47090 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 8D11072D0486CEB800E47090 /* main.m in Sources */, 954F9AB4100C0D5100109F93 /* sendmsg.m in Sources */, 952D6E5F100EBA3B009C260F /* fileListBuilder.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 089C165DFE840E0CC02AAC07 /* English */, ); name = InfoPlist.strings; sourceTree = ""; }; 1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = { isa = PBXVariantGroup; children = ( 1DDD58150DA1D0A300B32029 /* English */, ); name = MainMenu.xib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_ENABLE_OBJC_GC = required; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = SCToolbarButton_Prefix.pch; GCC_VERSION = 4.0; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.5; PRODUCT_NAME = RabbitToolbarButton; }; name = Debug; }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_ENABLE_OBJC_GC = required; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = SCToolbarButton_Prefix.pch; GCC_VERSION = 4.0; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.5; PRODUCT_NAME = RabbitToolbarButton; }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( i386, ppc, ); GCC_C_LANGUAGE_STANDARD = c99; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = DEBUG; GCC_VERSION = 4.0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.3; ONLY_ACTIVE_ARCH = YES; PREBINDING = YES; SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( i386, ppc, ); GCC_C_LANGUAGE_STANDARD = c99; GCC_VERSION = 4.0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.3; PREBINDING = YES; SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "SCToolbarButton" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4B08A954540054247B /* Debug */, C01FCF4C08A954540054247B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SCToolbarButton" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4F08A954540054247B /* Debug */, C01FCF5008A954540054247B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; } rabbitvcs-0.19/clients/osx_finder/toolbar_button/SCToolbarButton_Prefix.pch000066400000000000000000000002251445560650400273250ustar00rootroot00000000000000// // Prefix header for all source files of the 'CocoPopUp' target in the 'CocoPopUp' project // #ifdef __OBJC__ #import #endif rabbitvcs-0.19/clients/osx_finder/toolbar_button/fileListBuilder.h000066400000000000000000000003551445560650400255270ustar00rootroot00000000000000// // fileListBuilder.h // CocoPopUp // // Created by mmg on 15/07/09. // Copyright 2009 __MyCompanyName__. All rights reserved. // #import NSArray* getSelectedFilesList(BOOL* containsFolders, BOOL* containsFiles); rabbitvcs-0.19/clients/osx_finder/toolbar_button/fileListBuilder.m000066400000000000000000000053161445560650400255360ustar00rootroot00000000000000#import "fileListBuilder.h" // Applescript to get what is currently selected in the Finder static const char* appleScript = "property stdout : \"\"\n" "tell application \"Finder\"\n" "copy selection to selectedItems\n" "set stdout to \"\"\n" "if ((count of selectedItems) > 0) then\n" "repeat with x in selectedItems\n" "set itemN to (POSIX path of (x as alias))\n" "set stdout to stdout & itemN & \"\n" "\"\n" "end repeat\n" "else\n" "set theWindow to window 1\n" "set thePath to (POSIX path of (target of theWindow as alias))\n" "set stdout to thePath\n" "end if\n" "stdout\n" "end tell"; NSAppleScript* scriptObject = nil; void compileScript() { NSDictionary* errorDict; scriptObject = [[NSAppleScript alloc] initWithSource: [NSString stringWithUTF8String:appleScript]]; if(![scriptObject compileAndReturnError: &errorDict]) { fprintf(stderr, "Failed to compile appleScript!\n"); scriptObject = nil; } } NSArray* getSelectedFilesList(BOOL* containsFolders, BOOL* containsFiles) { //printf("Running script : \n %s", appleScript); NSAppleEventDescriptor* returnDescriptor = NULL; NSDictionary* errorDict; if (scriptObject == nil) { compileScript(); if (scriptObject == nil) return nil; } returnDescriptor = [scriptObject executeAndReturnError: &errorDict]; if (returnDescriptor != nil) { NSString* returnedValue = [returnDescriptor stringValue]; NSArray* selectedFiles = [returnedValue componentsSeparatedByString:@"\n"]; NSFileManager* fileManager = [NSFileManager defaultManager]; NSMutableArray* cleanedUpList = [[NSMutableArray alloc] initWithCapacity:[selectedFiles count]]; for (NSString* curr in selectedFiles) { if ([curr length] > 0) { [cleanedUpList addObject:curr]; BOOL isFolder = NO; if ([fileManager fileExistsAtPath:curr isDirectory:&isFolder]) { if (isFolder) *containsFolders = YES; else *containsFiles = YES; } } } NSLog(@"[fileListBuilder] %i selected files\n", [cleanedUpList count] ); for (NSString* curr in cleanedUpList) { NSLog(@" - %@\n", curr); } return cleanedUpList; } else { printf("Applescript Execution failed!\n"); NSLog([returnDescriptor stringValue]); NSLog([errorDict description]); return nil; } } rabbitvcs-0.19/clients/osx_finder/toolbar_button/main.m000066400000000000000000000334561445560650400234060ustar00rootroot00000000000000 #import #import "fileListBuilder.h" #import "sendmsg.h" // ------------------------------------------------------------------- // // MyMenu // // Creates and manages the menu display. // // Interface // ------------------------------------------------------------------- @interface MyMenu : NSObject { NSMenu* menu; NSMutableArray* menuItems; NSArray* selectedFiles; BOOL containsFolders; BOOL containsFiles; int selection; } -(id) init; -(NSMutableArray*)menuItems; -(void)setMenuItems:(NSMutableArray*)newMenuItems; -(NSArray*)selectedFiles; -(void)setSelectedFiles:(NSArray *)newSelectedFiles; - (void) fillMenu; -(void) addItem:(NSString*) name withIcon:(NSImage*) image andId:(enum MenuItems)menutag; -(void)dealloc; -(void)menu:(NSMenu *)shownMenu willHighlightItem:(NSMenuItem *)item; -(void)menuDidClose:(NSMenu *)menu; @end NSImage* imageAdd; NSImage* imageAnnotate; NSImage* imageBranch; NSImage* imageCheckmods; NSImage* imageCheckout; NSImage* imageCleanup; NSImage* imageCommit; NSImage* imageDelete; NSImage* imageDiff; NSImage* imageExport; NSImage* imageIgnore; NSImage* imageLock; NSImage* imageLog; NSImage* imageMerge; NSImage* imagePatchCreate; NSImage* imagePatchApply; NSImage* imageProperties; NSImage* imageRelocate; NSImage* imageRepobrowser; NSImage* imageRename; NSImage* imageResolve; NSImage* imageRevert; NSImage* imageSettings; NSImage* imageSwitch; NSImage* imageUnlock; NSImage* imageUpdate; // ------------------------------------------------------------------- // // MyMenu // // Creates and manages the menu display. // // Implementation // ------------------------------------------------------------------- @implementation MyMenu // ------------------------------------------------------------------- // // menu:willHighlightItem: // // Returns index of requested menu item (or -1, if not in menu) // // ------------------------------------------------------------------- - (void)menu:(NSMenu *)shownMenu willHighlightItem:(NSMenuItem *)item { selection = -1; int amount = [menuItems count]; for(int i=0; i= 0) { // Ordinary commands invoked by selection number sendCommand(selectedFiles, selection); } // else, clicked outside menu, hit escape, or like that */ //[[NSApplication sharedApplication] terminate: nil]; // Never returns } -(void) addItem:(NSString*) name withIcon:(NSImage*) image andId:(enum MenuItems)menutag { NSMenuItem* item = [menu addItemWithTitle:NSLocalizedStringFromTable(name, @"menuitems", nil) action:nil keyEquivalent:@""]; [item setEnabled:YES]; [item setImage:image]; [item setTag:menutag]; [menuItems addObject:item]; } // ------------------------------------------------------------------- // // fillMenu // // Populates the menu with known Subversion commands // // ------------------------------------------------------------------- - (void) fillMenu { NSString* title = [[NSString alloc] initWithCString:"My Menu" encoding:NSUTF8StringEncoding]; menu = [[NSMenu alloc] initWithTitle:title]; [self addItem:@"Add" withIcon:imageAdd andId:ADD]; if (containsFiles && !containsFolders) { [self addItem:@"Annotate" withIcon:imageAnnotate andId:ANNOTATE]; } [self addItem:@"Check for modifications" withIcon:imageCheckmods andId:CHECK_FOR_MODS]; if (containsFolders && !containsFiles) { [self addItem:@"Checkout" withIcon:imageCheckout andId:CHECKOUT]; [self addItem:@"Cleanup" withIcon:imageCleanup andId:CLEANUP]; } [self addItem:@"Commit" withIcon:imageCommit andId:COMMIT]; [self addItem:@"Delete" withIcon:imageDelete andId:DELETE]; [self addItem:@"Export" withIcon:imageExport andId:EXPORT]; [self addItem:@"Diff against base (raw)" withIcon:imageDiff andId:DIFF_RAW]; [self addItem:@"Diff against base (side by side)" withIcon:imageDiff andId:DIFF_GUI]; //[self addItem:@"Ignore" withIcon:imageIgnore andId:IGNORE]; [self addItem:@"Log" withIcon:imageLog andId:LOG]; [self addItem:@"Mark Resolved" withIcon:imageResolve andId:MARK_RESOLVED]; [self addItem:@"Properties" withIcon:imageProperties andId:PROPERTIES]; [self addItem:@"Revert" withIcon:imageRevert andId:REVERT]; [self addItem:@"Rename" withIcon:imageRename andId:RENAME]; [self addItem:@"Update" withIcon:imageUpdate andId:UPDATE]; [self addItem:@"Update to revision..." withIcon:imageUpdate andId:UPDATE_TO]; if (containsFolders && !containsFiles) { [menu addItem:[NSMenuItem separatorItem]]; [self addItem:@"Branch/Tag" withIcon:imageBranch andId:BRANCH]; [self addItem:@"Merge" withIcon:imageMerge andId:MERGE]; [self addItem:@"Relocate" withIcon:imageRelocate andId:RELOCATE]; [self addItem:@"Repository Browser" withIcon:imageRepobrowser andId:REPO_BROWSER]; [self addItem:@"Switch" withIcon:imageSwitch andId:SWITCH]; } [menu addItem:[NSMenuItem separatorItem]]; [self addItem:@"Lock" withIcon:imageLock andId:LOCK]; [self addItem:@"Unlock" withIcon:imageUnlock andId:UNLOCK]; [menu addItem:[NSMenuItem separatorItem]]; [self addItem:@"Create Patch" withIcon:imagePatchCreate andId:CREATE_PATCH]; [self addItem:@"Apply Patch" withIcon:imagePatchApply andId:APPLY_PATCH]; [menu addItem:[NSMenuItem separatorItem]]; [self addItem:@"Settings" withIcon:imageSettings andId:SETTINGS]; [self addItem:@"About" withIcon:nil andId:ABOUT]; [menu setAutoenablesItems:NO]; [menu setDelegate:self]; [menu sizeToFit]; } // ------------------------------------------------------------------- // // init // // Initializes and posts the menu // // ------------------------------------------------------------------- -(id) init { self = [super init]; if (self) { [self setMenuItems:[[NSMutableArray alloc] init]]; containsFolders = NO; containsFiles = NO; [self setSelectedFiles:getSelectedFilesList(&containsFolders, &containsFiles)]; if ([self selectedFiles] == nil) { fprintf(stderr, "Getting list of files failed"); // FIXME : report something to user exit(1); } selection = -1; BOOL pullsDown = NO; NSPoint mouseLoc = [NSEvent mouseLocation]; #if DEBUG NSLog(@"Mouse base location is (%g, %g)", mouseLoc.x, mouseLoc.y); #endif NSEnumerator *screenEnum =[[NSScreen screens] objectEnumerator]; NSScreen *screen; while ((screen = [screenEnum nextObject]) && !NSMouseInRect(mouseLoc, [screen frame], NO)); #if DEBUG NSLog(@"screen base frame is (%g, %g) + (%g, %g)", [screen frame].origin.x, [screen frame].origin.y, [screen frame].size.width, [screen frame].size.height); #endif NSPoint menuLoc; menuLoc.x = mouseLoc.x - [screen frame].origin.x; menuLoc.y = mouseLoc.y - [screen frame].origin.y; #if DEBUG NSLog(@"desired menu screen location is (%g, %g)", menuLoc.x, menuLoc.y); #endif //---- NSWindow *hiddenWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect( menuLoc.x, menuLoc.y, 5, 5 ) styleMask: NSTitledWindowMask | NSClosableWindowMask backing:NSBackingStoreNonretained defer:NO screen:screen]; [hiddenWindow setFrameOrigin:mouseLoc]; // dunno why this is needed, but some screen arrangements misposition without #if DEBUG NSLog(@"hidden window base location: %g %g", [hiddenWindow frame].origin.x, [hiddenWindow frame].origin.y); NSLog(@"hidden window screen location: %g %g", [hiddenWindow frame].origin.x - [screen frame].origin.x, [hiddenWindow frame].origin.y - [screen frame].origin.y ); #endif //---- NSRect rect; rect.origin.x = 0; rect.origin.y = 0; rect.size.width = 1000; rect.size.height = 500; NSView* view = [[NSView alloc] initWithFrame:rect]; [[hiddenWindow contentView] addSubview:view]; [self fillMenu]; NSRect menuFrame; menuFrame.origin.x = 0.0; menuFrame.origin.y = 0.0; menuFrame.size.width = 100; menuFrame.size.height = 0.0; NSPopUpButtonCell *popUpButtonCell = [[NSPopUpButtonCell alloc] initTextCell:@"" pullsDown:pullsDown]; [popUpButtonCell setMenu:menu]; if (!pullsDown) [popUpButtonCell selectItem:nil]; [popUpButtonCell performClickWithFrame:menuFrame inView:view]; // Never returns } return self; } // ------------------------------------------------------------------- // // menuItems // // Accessor // // ------------------------------------------------------------------- -(NSMutableArray*)menuItems { return menuItems; } // ------------------------------------------------------------------- // // setMenuItems: // // Accessor // // ------------------------------------------------------------------- -(void)setMenuItems:(NSMutableArray*)newMenuItems { menuItems = newMenuItems; } // ------------------------------------------------------------------- // // selectedFiles // // Accessor // // ------------------------------------------------------------------- - (NSArray*) selectedFiles { return selectedFiles; } // ------------------------------------------------------------------- // // setSelectedFiles: // // Accessor // // ------------------------------------------------------------------- -(void)setSelectedFiles:(NSArray*)newSelectedFiles { selectedFiles = newSelectedFiles; } // ------------------------------------------------------------------- // // dealloc // // ------------------------------------------------------------------- -(void)dealloc { [self setMenuItems:nil]; [self setSelectedFiles:nil]; [super dealloc]; } @end // ------------------------------------------------------------------- @interface MyAppDelegate : NSObject { } - (void) applicationDidFinishLaunching:(NSNotification*) notice ; - (void) applicationDidBecomeActive:(NSNotification *)notif; @end // ------------------------------------------------------------------- @implementation MyAppDelegate - (void) applicationDidFinishLaunching:(NSNotification*) notice { // DEBUG printf("inside appdidfinishlaunching\n") ; [[MyMenu alloc] init]; // Never returns } - (void) applicationDidBecomeActive:(NSNotification *)notif { [[MyMenu alloc] init]; // Never returns } @end // ------------------------------------------------------------------- #pragma mark main() NSImage* loadImage(NSString* name) { NSString * path = [[NSBundle mainBundle] pathForResource:name ofType:@"png"]; return [[NSImage alloc] initByReferencingFile:path]; } int main(int argc, char *argv[]) { // TODO : determine which actions are possible MyAppDelegate* delegate = [[MyAppDelegate alloc] init]; NSApplication* app = [NSApplication sharedApplication]; [app setDelegate:delegate]; imageAdd = loadImage(@"rabbitvcs-add"); imageAnnotate = loadImage(@"rabbitvcs-annotate"); imageBranch = loadImage(@"rabbitvcs-branch"); imageCheckmods = loadImage(@"rabbitvcs-checkmods"); imageCheckout = loadImage(@"rabbitvcs-checkout"); imageCleanup = loadImage(@"rabbitvcs-cleanup"); imageCommit = loadImage(@"rabbitvcs-commit"); imageDelete = loadImage(@"rabbitvcs-delete"); imageDiff = loadImage(@"rabbitvcs-diff"); imageExport = loadImage(@"rabbitvcs-export"); //imageIgnore = loadImage(@"rabbitvcs-ignore"); imageLock = loadImage(@"rabbitvcs-lock"); imageLog = loadImage(@"rabbitvcs-show_log"); imageMerge = loadImage(@"rabbitvcs-merge"); imagePatchCreate = loadImage(@"rabbitvcs-createpatch"); imagePatchApply = loadImage(@"rabbitvcs-applypatch"); imageProperties = loadImage(@"rabbitvcs-properties"); imageRelocate = loadImage(@"rabbitvcs-relocate"); imageRepobrowser = loadImage(@"rabbitvcs-repobrowser"); imageRename = loadImage(@"rabbitvcs-rename"); imageResolve = loadImage(@"rabbitvcs-resolve"); imageRevert = loadImage(@"rabbitvcs-revert"); imageSettings = loadImage(@"rabbitvcs-settings"); imageSwitch = loadImage(@"rabbitvcs-switch"); imageUnlock = loadImage(@"rabbitvcs-unlock"); imageUpdate = loadImage(@"rabbitvcs-update"); [NSApp run]; // Never returns //return NSApplicationMain(argc, (const char **) argv); return 0; } rabbitvcs-0.19/clients/osx_finder/toolbar_button/schelper.icns000066400000000000000000001261121445560650400247570ustar00rootroot00000000000000icnsŦJics#H˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ics8ūūūūūūūūūūūūūūũūûö˙öööööööõõ˙˙öV˙˙ũŦŦŦŦüV+øú˙˙VVõõŦŦŦųöVüŦŦŦõõVVööü÷öŦŦŦŦŦŦööVųöööö+ųø++ööööųų++++÷÷øų++++ųų÷÷ŦŦŦŦŦŦũV÷ú÷÷ųú÷÷ŦŦŦŦüVVûŦũ÷÷úúøøüųųŦŦŦŦũøøúŦVøøøøVVVVVVVøVüūūūūūūūūūūūūūūis32 ŠP‰JSsáū„åéõũūávœ÷÷)./-1G‘ÃĢq÷÷šđđ-.6‹ØœA€+đđ™‘āāBēák,+-.17āā’ŒÖÅc…§ÉĶՀÖGŒ‡ĖĖËČÁ¤‚llĘËĖˆÁÁ4/.-,,*’žqÁÁ}¸¸4,,-L‘ O-*¸¸|x°°Ab‡Œ^8.,,*°°x\™Š¨¨ĸ›ƒ™КfP‰@P?ŠP‰JSuáū„åéõũūáwøø)./-1G‘Å­søøšđđ-.6‹ØœA€+đđ™‘āāBēák,+-.17āā’ŒÖÅc…§ÉĶՀÖGŒ‡ĖĖËČÁ¤‚llĘËĖˆÁÁ5/.-,,*’žqÁÁ}¸¸4,,-L‘ O-*¸¸|x°°Ab‡Œ^8.,,*°°x\™ĢĒǤƒ›̚fP‰@P?ŠP‰JSsáū„åéõũūávœ÷÷)./-1G‘ÃĢq÷÷šđđ-.6‹ØœA€+đđ™‘āāBēák,+-.17āā’ŒÖÅc…§ÉĶՀÖGŒ‡ĖĖËČÁ¤‚llĘËĖˆÁÁ4/.-,,*’žqÁÁ}¸¸4,,-L‘ O-*¸¸|x°°Ab‡Œ^8.,,*°°x\™ĒŠŠŖœƒšǚfP‰@P?s8mkLOOOOOOOOOOOOO"ˇ˙˙˙˙˙˙˙˙˙˙˙˙˙˙å˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ĄOOOOOOOOOOOOOOICN#˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūicl8ũŦûüüüüüüüüüüüüüüüüüüüüüüüüüüûŦüüû÷öõõõõõõõõõõõõõõõõõõõõõõõõö÷ûû÷õ˙˙˙ûüŦŦŦŦüüüŦŦŦŦüüų÷öõ˙˙˙õ÷ûõ˙˙˙˙ŦŦŦŦŦŦŦŦŦŦŦüųø÷+÷VV˙˙˙˙õûüõõõõõüŦŦŦŦŦŦŦüV÷÷÷VúüüüõõõõõüüõõõõõüŦŦŦŦüûųø÷øVúûüŦŦŦüõõõõõüüõõõõõŦŦŦüúø÷+øųüüŦŦŦŦŦŦŦõõõõõüüööööõüûųø++øûüŦŦŦŦŦŦŦŦŦüõööööüüöööööV÷+ööųûŦŦŦŦŦŦüüûúúųöööööüüööööö+ööö+ųûûûûúúųVVøø÷÷öööööüü++++++++++øVVøø÷÷+++++++++++++üü+++++++++++++÷÷øøVVVø+++++++++üü+++++øøøVVųųúúûûûüüú÷++++++++üü÷++++úûûüüŦŦŦŦŦŦŦüú÷÷÷ø++++÷üü÷÷÷÷÷üŦŦŦŦŦŦŦŦŦŦŦüûúøøVú÷÷÷÷÷üü÷÷÷÷÷ŦŦŦŦŦŦŦŦŦŦüúVVųüŦŦ÷÷÷÷÷üü÷÷÷÷÷üŦŦŦŦŦüüûúųųųúûŦŦŦŦŦ÷÷÷÷÷üüøøøø÷ŦŦŦŦüûųųųúüŦŦŦŦŦŦŦ÷øøøøüüøøøøøûûúųųųúüŦŦŦŦŦŦŦŦŦŦøøøøøüûųøøøøVøøųúüüŦŦŦŦŦŦŦŦŦŦŦüøøøøųüūŦųVVVVVVVVVVVVVVVVVVVVVVVVVVųûūūûüüüüüüüüüüüüüüüüüüüüüüüüüüûũil32:˙›̌_–M N_r­‹fĀäįįéŒęč įįäŊdbÃôûüũP<; ;;:9?LhŒļŲđüüûöĀcMî÷øøú;--./.-€, 1Ga‰¨Āôœ“ų€øîNKķ€ôö<./--,,2Dl—ˇÂˇ~^I..-0=]ŠĨˇ°—}aOA71/=ķ€ņīJIė€íđ;-4LuĻÃȰ„_H<2.--,,;ī€íëIIâ€äæGW‡¯ČĶĨlP<1.-,,-//2Cæ€äâHH܀Ūߘ´ÎÚאO3..358?IV`ox‹ā€ŪŨHH؁ŲĮÕŲŲЁPMS]hr|ˆ’œĨ¯ĩŋŲ×HHŌ…Ķ ÎŽ Ĩ¯¸ÃĘĐŅŌĶԃĶŌHH̓ÎÍĖ€Ë ĮĀļ­Ĩ ›šĢÉÎ͂ÎÍGGĮČ°¨ĸ™‘‹‚xoe\TNJIpŊČĮŁČĮGGÀÄÅ{nc\RH>7310.-/>pģ¡§Å€ÄÃGFŋÁ@4.-,--€, -4=Py¨°™y`Ā€ŋžEFš€ēŧ;3--,--.2:G^y—žmG37ŧēEFĩ€ļ¸?5-.18>KYp„Ž‹wY;.,,8¸ļEFą€˛´;35;FXnƒbJ3-,9´˛FHŠ€¯ °W\l|ˆ†t^E5.,-,-7ą€¯%ŠGZЧĢŦŦ Ĩĸ{^H=76678867878C­Ŧ̧‹Y{S‡š‚›Žœ ››š‡a†Ÿ]G•EG\O˙œ˙›ĢŽ_–M N_r­fĀäįįéŒęč įįäŊdŽbÃôûüũP<;;;:9?LhŒļŲđüüûöĀcMî€ųü;--./.-€, 1Ga‰ŠÂÅ´”ú€ųîNKķ€ô÷<./--,,2Dl—ˇÂˇ~^J=D÷€ôōKKī€ņô>..-0=]ŠĨˇ°—}aOA71/=ķ€ņīJIė€íđ;-4LuĻÃȰ„_H<2.--,,;ī€íëIIâ€äæGW‡¯ČĶĨlP<1.-,,-//2Cæ€äâHH܀Ūߘ´ÎÚאO3..358?IV`ox‹ā€ŪŨHH؁ŲĮÕŲŲЁPMS]hr|ˆ’œĨ¯ĩŋŲ×HHŌ…Ķ ÎŽ Ĩ¯¸ÃĘĐŅŌĶԃĶŌHH̓ÎÍĖ€Ë ĮĀļ­Ĩ ›šĢÉÎ͂ÎÍGGȁÉąŠĸ™‘‹‚xoe\TNJIpŊÉČÆÉČGGĀÅĮ}oc\RH>7310.-/>pģÃ¸ŠÆ€ÅÄGFŋÁ@4.-,--€, -4=Py¨°™y`Ā€ŋžEFš€ēŧ;3--,--.2:G^y—žmG37ŧēEFĩ€ļ¸?5-.18>KYp„Ž‹wY;.,,8¸ļEFą€˛´;35;FXnƒbJ3-,9´˛FHŠ€¯ °W\l|ˆ†t^E5.,-,-7ą€¯%ŠGZЧĢŦŦ Ĩĸ{^H=76678867878C­Ŧ̧‹Y{S‡šƒž š‡a†Ÿ]G•EG\O˙œ˙›̌_–M N_r­‹fĀäįįéŒęč įįäŊdbÃôûüũP<; ;;:9?LhŒļŲđüüûöĀcMî÷øøú;--./.-€, 1Ga‰¨Āôœ“ų€øîNKķ€ôö<./--,,2Dl—ˇÂˇ~^I..-0=]ŠĨˇ°—}aOA71/=ķ€ņīJIė€íđ;-4LuĻÃȰ„_H<2.--,,;ī€íëIIâ€äæGW‡¯ČĶĨlP<1.-,,-//2Cæ€äâHH܀Ūߘ´ÎÚאO3..358?IV`ox‹ā€ŪŨHH؁ŲĮÕŲŲЁPMS]hr|ˆ’œĨ¯ĩŋŲ×HHŌ…Ķ ÎŽ Ĩ¯¸ÃĘĐŅŌĶԃĶŌHH̓ÎÍĖ€Ë ĮĀļ­Ĩ ›šĢÉÎ͂ÎÍGGĮČ°¨ĸ™‘‹‚xoe\TNJIpŊČĮŁČĮGGÀÄÅ|nc\RH>7310.-/>pģ¡§Å€ÄÃGFŋÁ@4.-,--€, -4=Py¨°™y`Ā€ŋžEFš€ēŧ;3--,--.2:G^y—žmG37ŧēEFĩ€ļ¸?5-.18>KYp„Ž‹wY;.,,8¸ļEFą€˛´;35;FXnƒbJ3-,9´˛FHŠ€¯ °W\l|ˆ†t^E5.,-,-7ą€¯%ŠGZЧĢŦŦ Ĩĸ{^H=76678867878C­Ŧ̧‹Y{S‡š…‹ž œš‡a†Ÿ]G•EG\O˙œl8mk4fŲīđđđđđđđđđđđđđđđđđđđđđđđđđéz[wÃø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūęŗėų˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ö˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üŪø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũË#ĩû˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūâ$$âīīīīīīīīīīīīīīīīīīīīīīīīīīæcit32W‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ų€ ‹b[Z<8==;ã19AA;?POUfbuĻϑ𐑆vj^\YUPáN PVZ\]bgnuw˜ĄĒĒ€­ Ÿ—…}oc_]XQáOQX]`bgkqv€ŸŽŗŗ¨¨Ŗž‘ˆwk^[YQLāKJMSZ]^biou}œŠ¯¯”•……€wrmjic__ā^`dh€jllpw•ĄĻϘ˜šŒxvuvxtrokkjlÛk!ljkloqssmkggrž žŽŽŠ}mek~’˛¸ēÅŌÖÕֆךؖ×!ÖÕÖŌÅ珰xidj…ŒŒŒ…{g`d}—ÂÍĪāņöõöƒøųųúēûƒú†ų†ø öõöņāĪĖŋ’ydahˆ„„ygbg}œÉÔÖčú˙ū†˙úøų¯úųû€úûûú‚ũū˙ū˙+ū˙účÖÔȘ{gci~…ˆˆxvxwxv{ŠŅÚÛęøüûüūūũũū˙úõŲŅΝĐŌĶĶÔÖרØÜââãäëėîî€õ÷ųûúûũūū€ũūūüûüøęÛÚÎĨŒzwyzz|}dcfvĒļŋČÖíõķ÷€û‚üũ˙ę×rPIKMKLLKMO€NP€NOK„LK€MNRWXZagim‘•›˛ˇģŋŌ×Ûßéîīōųû„ü€û÷ķõîÔÅēŗĻvhef_^btĩÆÎ×áöüúûü„ûüūäĪQ*$(+Œ*+€)*€,-+-€,…)(')()0557@IJOcwx|† Š­˛ÉÎŅØæíîīųų†ûüûúü÷ãÖÎÆ˛vb^_]\`s¸ĖÔÛæøũü†ûü˙ãÎI%"')Œ('(**))+))**'((''))()*/456@IINbvw{ƒŸ§ĒąÄĖĪĶáåįęųųü‡ûüũøæÛÔˏr`[][Y\qģŌÚŪč÷û‡úûūãÎL)'+-Œ,+,€.-/.+(.-./24438=<DZadmŠ’–œŗēŧŋĘÍÎËĮÁĀŊŽ š‹}{wfTSOM@><94001+(*MČŨøõ‹ô÷îÎiMHJKHMiÎî÷õŠôõøŪÉN,(,./‚- .-..-.-02006€>1E[bfnŠ’—œ˛ˇēžÄČĘČÃŧģ¸Ēš–Š|yweUTQNB?>;6322-*,NÉŪøõŠôõ÷îÎiMHKKHMhÍėõ‹ōķöÛČN-*-./--../0116::=IUWYiwzz~“˜šž¨Ŧ­&ŦŠĄžž›„‚€vljh_XVULBCA?75542100-*,MČÛöķ‹ō õėÍhMHKKHMhËęō‹đņôŲÅP/+/-.7--.-/335=DDJaw}€—°ĩĩēČÍĪĖÉÆÅžĒ¤ ™{trn^NJJC;:;71221//./-.€-€.,),MÅŲôņ‹đ ōęËhMHKKHMiËęķ‹đņôŲÅP/+/‚-,4+,+.002:ABHd„‹¤žÆÅËŲßßÜĶĐÎÆĢ¤Ÿ•vlieSC?>9200-*)**++,,+-,),MÅŲôņ‹đ ķęËiMHKKHLgËęō‹īđķÚÆO.+/-/./€0-106::;DOPVm†Œ‘¨ŊÄÃÆĪĶŌÎÃĀžļž—“‹ofebSDA?:5430-,ƒ-,-,)+LÆÚķđ‹īōęËgLHKIGKfĘéņīŠî>īōŲÄL+),--.-2237AEFGXilo’•Ŗą´ļŊÂÅÃŋąŽĢ¤‰†pjhdPLKJC:98400/..„-…,-)+LÅŲōīŠîīņéĘfKGIJGKgČįî‹ėíđÖÂK*'+€-%.558?RY^_{—ĄšŅÖÖÚŨßÜĶËÉÅģ•Œ†|]RPL?;;:€12/./..-,‡-…,-)+LÂÖđí‹ė îįČgKGJJGKeČæî‹ë5ėīÕÂI)'*+*+,336=TZaaƒĸ¨¯ĮāčįęėíęÜÎÍĘģ’„~tRHEB4100++*++€,+,…-†,(+KÂÕīė‹ë îæČeKGJJGKfĮåíŒë1îÔÁL,)-0/02<2132.--.--,-+€,-‚,€-€.€/.0/€34426SŊÎåâŠáâäÜĀcKFIIFKcĀÛã‹á$âäÍŊX;7Cbjq|¤°ļŊĶÜŪŨāãäáÚŌŅĮ xpjQ5-//ƒ*‡+,€+**€+,++,,--./0101315RŧÎäâ‹á ãÛĀcKFIIFKdŋÚâ‹ā!áãÎŋcGCNluzƒŠ˛ˇžŅØÚŲŨáâßŅÄÃģ–rkfO9€3.-,-‚,€-€. /.0//.011013€245667899=;@]ŊÍãá‹ā âÚŋdKFIIFJbŋÛá‹ßāáÕʋxw€™ ¤ŠĀÆČË×€Û ÚŲÛĶ´•ŠoSML?3€0..--//011€3 46898;>=?BEGHK€ORX[\\aabdhil€ČĶáā‹ß áÛŋbJFIIFJcŧØßŒŨŪØĶŗŠŠ°ČÎĐŅ×ŲŲÚÛŨŨÜ×ŌÔÆ–cXWF3/1/€-0.++-,112356677889>AABGMMOU\^_fmmor{~€‚‰‹ŒŽ•–˜ĨĐÖߌŨ ߨŧcJFIIFJcģ×ŪŒÜ ŨØÕžļˇžÕÛÜŨŨŪ€ŨÜŨÜÖĐĶÎXKK;+')*+ **++101245567€8=BBDJNPQYacdlttvy„†ˆ‹’•—˜ ĄŖ¯ĐÖŨŒÜŪ×ģcJFIIFJcŧØßŨ‹Ü ŨØÔžĩĩŊŌŲÚÛÜŨŨÜÜŨÛÛÖŅŌď[PQ@0-.//. --/24348898€:!;@DEFLQST\cefmvvx{„‡‰Œ’•—˜ŸĄŖŽĐÖŨŨŠÜŨߨŧcJFIIFJbģÕÜŒÚ ÛÖÔĀģģĀŌ×ØØƒÚŲŲÔĪĐÑaWWH:669;:;:;::>B€FK#QRQQVZZ\afhjqwyy‡‡ˆŠ“”–˜Ÿ ĸŠĢ­ĩĐÔÛŒÚ ÜÕģbJFIIFJb¸ĶڍØÖÖŌ€ĐÖÖרׂØA××ŅĖĖœvmmcYVY^ceehorru{~Œ“›Ÿ Ą§­Ž¯˛´ĩĩ¸ģģŧžŋŋĀĀÅÄÅÆČÉÉĘĘËËÎÖ×Ø Ú͏bJFIIFJaˇŅ؎Ö×ÔÕÕÔ׆Ö8ÕÖĪČĘĀzqrj`_ahoqps~„“–Ÿĸ¤¨´¸¸ēĀÅĮČĘĖÍÍĪŅŅĐŌŅŅŌŌĶĶÔĶՀÔÕÕÔՏ֨ҎaJFIIFKa¸ŅØ×ŽÖ×‡Ö+ÕÖĪČÉĀ wwohfhowxy|„‡‰Œ”—™›¨ĢŦ°ŧĀĀÂÆĖÎĪŅŌĶĶՃÖÕÕØØ‡×ŽÖרҏaKFIIGKbˇĐ×֜Õ+ÔÕĪĘËʎ††€zwz€…‡‡‰‘“•—ž ĸŖ­¯ą´žÁÁÂČÍÍÎĪĐŅŅŌ„ĶÔÔÖ֗ÕÖ×СbKGIGEJ_´ÍԝŌŅŅĐĪĪÎÆžŊŧŧģēģŧŊžŊžĀÁÂÂÄÃÄÅ€É ËËÎÍÍĪĐĪŅĐĐŅŅ¤Ō ÔÍ´_JEGHEJ`ŗĖ͟ŅĐĐŅĐЀΠĪÍÎÍÍĪÎÎĪÎ€ĪĐŅŅĐЀŅŌŅĐŌŌ‚ĶŌŸŅ ĶĖŗ`JEHHEJ`˛ËŌŸĐ‚ŅƒŌŅŅŌ€ŅĐ€ŅĐ€ĪÎĪ€Î‰ÍĪĐĐŅœĐ Ō˲`JEHHFI_ŗËŅ›ĪÎÎ€ĪÎ€ĪÎÍĖĖÍĖɀČĀÃÁÁĀŋžŊžžŊŧŧģģēšēģēģŧÄÎÍÎÍĐšĪ ŅËŗ_IFHHFI_°ÉĪ—Í€ĖËÉĮČÆĮĮÅńĮ/ÆÃžŊŧšąŽ­ĒĄžžœ–”’ˆ†…„‚€~zvuv{€‡ŖžÁÄÆËÍÍĖĖĘĘĖĖ’Í Īɰ_IFHHFI_¯ČÎĖ„ÍĖÍĖĖËȀĮƀÄŀÆ2ĮÅÆÅĀŧģģļŦ¨ĻŖ˜–”’ˆ‡…‚{xwvtppoidcdjqoxšģŊÂÅÉĖĖËËĘĘËË’Ė Îȝ_IFHHFI^¯Į͍ËĘËÉȂÉ>ĘĮĮÆÆÃÂÁÂĀŊžžŋĀĀÁŋžŋžē´ŗ˛¯¤ĄŸœ‘ŽŠƒ€~{spopkhhfc^\^dihq–šģĀÁĘĖËˁɁʏËÍĮ¯^IFHFDH^­ÆĖˋĘËÉÉĀŋ€žŊŊŧēš¸ˇ´ŗ˛ŗ¯ŦŦĢŦŦĢĢŠ€§&ĸœœ›˜ŒŠ‡€~|ztrrofcdca_^]ZVUW[``g¸ģĀÁȀʁȀÉČˍĘËĖÆ­^HDFHFJ^ĢÂȍÆ$ÁŊŖœ™—”’‘‹‹Š‡€}}|wrppkfed_YXXSPOPNHG€FEDD?>>=;;::98997667::9866563443€21/..//ƒ. /495@w̝ˇšÁāÅÄÁĀÃčŠĮÁŠ^HEGGEH^ŠÁĮŒÅ1Æŋēš‘Žˆ†…ƒ~|zxpnlle_^]VOOMHB@@;877632213122/0//,-ƒ,++*,140;sĒ­ļ¸ÂłÆÅÁĎÅĮÁŠ^HEGGEH^ŠÁĮƊÅ%ÆĮŋ𓇄„€~|trrpjhfg`ZZXSNLJFA??;87764€3200//..ƒ-.8?;78754€300//00//.ƒ-,.4::?Qdgn‘ĩˇŊŊžŋĀŊ´˛¯Ģ™””œēžÄŒÃ Åŋ¨]IEGGEI]ĨŧŒÁ$Ã˛¤T=7:7877323210010/00/.//0//..0.//,-,,0:EGMl‹‘•¨ŊžĀĀ€ŧ ĩ§Ąž•xnp¯ˇÂŒÁ ÂŧĨ]IEGGEI]ĻŊËÁÂİĸM40110//+,++€*‚+**€+‚,€-…,+#,,++*)(+8FGPr”œŸ¯ĀĀÂÁŋŋŧ¸¤ “sgjy¯ˇÃŒÁ ÃŊĻ]IEGGEI^Ĩŧ‹ĀÁðĸN6234312./..…-‚,…-„,+€.-0 1213BPQXx—žĄ­šēŧēĩ´ŗ­š•“Šmcdu­ļÂÁ‹Ā ÂŧĨ^IEGFDF[¤ģĀ‹ž ŋÁ¯ J1/13322-.ƒ-,†-‡,)-,1125?BBCN[\_lz|’¤ĒŠŠ¨¨§Ą‰†€oigbNGJ_Ĩ˛ĀŒž Āģ¤[FDFFDG[Ŗēŋ‹ŊžĀ­žF-,.€23,-,,-,†-†,++,-457=NTTZn‚‡‰—¤§¨¯ĩˇ˛Ĩ——’‰h`\WC=<;1-/IŸ­Āž‹Ŋ ŋēŖ[GDFFDG\ĸšž‹ŧŊŋŦE,+-€23,-,,-,†-€,+-**)*+246;RWX\u’–ĸ°ĩĩ¸ŧŊˇĨ•“Ž„`WTO;532+')CœŦŋŊ‹ŧ žšĸ\GDFFDG[ĸ¸Ŋ‹ģŧžĢE.,.2,-,,-,†-,,ƒ-€0)1;<>CW]^cxŒ‘“žŠŦŦŽŽ¯Ģ›‹‰…{_UQM<754-*+CĢžŧ‹ģ Ŋ¸ĸ[GDFFDG[Ÿĩģ‹šēŧǜJ2/34544--,,-,-€.6//0103:==?KMOS^bdhy~~€‹•˜—–••“Š€€}o``]XHBA>5211,*,C›Šŧē‹š ģĩŸ[GDFFDG[ž´ē‹¸ šģМM6356655--‡,-..-.2566:FJLRdjms„ŠŒ›Ÿ Ÿ€ž›Ž‚€|hVROB5544/../.+),Dš¨ģš‹¸ ē´ž[GDFFDGZŸŗš‹ˇ¸ēМM74€655--ƒ,+,,++,,+,/€4$9GKOTjptz•—›ĨŠĒ¨Ĩĸĸž~|waLGF:--+,*+*€+ ,,+),Bš¨ē¸‹ˇšŗŸZGDFFDGZŸ´š¸Šˇ¸ēМL6357765--++--,,-..//€0*13248;=>AIQTV_ilmwƒ„‡’•——”“’ƒ€}wd]\XL@=<72130,.€-.--…,-*.C—ŖĩŒŗ ´¯›YGDFFDHYœ¯ĩ‹ŗ´ļ¤—D/,.0ƒ/*023449==@IRTVakmpz„‡‡‹–š›˜—•“„‚yc]]YM@==6€0/.-.‚-…,-*.C—¤ļ´‹ŗ ĩ¯œYHDFFDHY›Ž´‹˛ ŗĩĸ•E/,.10€110025787=BBENWZ\epsuˆ‹‹˜œœ™•“’Ž|zs]VVTE9752.,,-+Œ,-*.C–Ŗĩŗ‹˛´Ž›YHDFFDHZ›¯´ŗŠ˛ ŗĩ¤–I2.36878:€;)AACCIOPQYbcfmuxy…††‡Ž‹„ƒ‚~qmkfTPOLB8662-,-*.D–ŖĩŗŠ˛ŗ´¯›ZHDFFDFX—̰€¯‰°9˛ĸ—TA=BKMOQXZ[^ilmmu}€…‰‹‰‰Š‰ˆ{zyvhec^QLKJ@?><74451./..-„,-,-+)-B“ ˛‰°€¯°Ģ—XFDFEDFY˜Ŧą°¯¯ˆ°9ą˛Ŗ˜VB?EOSUWadehvxz{ƒ‹Ž’–—•“ƒzwvq^YWRC>=<3200..-.--..-…,-,-+)-C”Ąŗąˆ°¯¯°ąŦ˜YFDEFDGZ–ĒŽ­‹¯,ङYFCHUWY]fjloy|~~†Ž’”–•ŒŠvtslZTQN?;:90€.,,++-†,-,-+),A”Ą˛°Š¯­ŽĒ–[HEFJIL\“Ŗ¨ŠŦ¯°‡¯°ąĻœgVSWbefhprsu|€€„ˆ‰‰ˆ‚||yrjgfbROMI=99720//--,,-†,-,-,),A”Ą˛°‡¯°¯ŦЍ¤“[KHISRTaˆ•˜œĄĒ‰Ŧ­¨Ĩ‰‰‹‘“”“•”“‘ˆ†„ƒ|vtqh]ZXQIHHA€;:4€3/€.--,,…-†,-,-+),AŽ‰ŦĒĄœ˜”‰`TQRXWZc…“™ŸĒ­ˆŦ(­Ē¨ž™šœ ĸĄĄŸŸ™‰‡†{pnj]PMKB:773..--,,+,)‚*‡+))‚*))+)+)'*@Ž­‡Ŧ­ĒŸ™“Ž…cXVWYYZd„‘•œ¨ŦĢŦ­…Ŧ%­ĢŠĄžžŸ¤ĨĻĨĄ Ÿ›Œ‰ˆ|pnk^PMLD:8631.//++‡,….†,.,.,*-E‘žŽ­„Ŧ­ŦĢŦ¨œ•…dZWXZZ[d}ƒ‡Œ“ĸĻĻ§Š€ĒƒĢ#ЍĄŸŸ ¤ĨĻĨŖĸĄž“ƒ{xvk`]\TNLKIEDDCA‡@B@…B„@B@B@@B@BB@B?CW•Ÿ­‚Ģ€ĒЧĻĻĸ•ˆ…€d[YZfc`_a_`k{’—™ ĻDžЍЧ€Ļ¨€§Ļĸ€Ą Ÿœœ›˜•””“‘Ž§Œ’Ĩ§Ē„ŠĒĻ ™—’€rlkjf`cftti[UQUaqŠ’’œ§€Š¨‚ЍŠĒŠŠĒŠƒĒ‚Ѝ§§¨§ĻϧĨ…ύĨ¤ĻŠŠĒŠ¨€Š§œ’‘Œxmdaednww‹‹p_SPRboˆ™Ą¤¤’Ĩ‡Ļ´§ĻĻ…Ĩ¤¤Ą™Ž‰ujbacjt‹‹ŒŒxeXTVco……Œã’Œ……rha_bl‚—q]ha_^beeb\XWWŨVWWX\bee^WRRUJO__ĸĸ‘‹pnldaa`]WQáOQW]`^YWTTRU.?ŸŸĒœ“wf`]\XPGDEŨDEDGPX\[USOQUG*ļļŋœĸvfc`][QIGHŨF HGIQ[]]YSQUUE€ ?lj™j`^\ZPFÛDF PZ\\XPJONUUƒĒĒ?3KHJJ1€)Ũ1€)1JJFE/'?8˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ũ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ų€ ‹b[Z<8==;ã19AA;?POUfbuĻϑ𐑆vj^\YUPáN PVZ\]bgnuw˜ĄĒĒ€­ ¤—“ˆ}qc_]XQáOQX]`bgkqv€ŸŽŗŗ¨¨Ŗž”’Šyk^[YQLāKJMSZ]^biou}œŠ¯¯”•ˆ‡‚xtmjic__ā^`dh€jllpw•ĄĻϘ˜šŒzxwvxtrokkjlÛk!ljkloqssmkggrž ž‘‘Œmek~’˛¸ēÅŌÖÕֆךؖ×!ÖÕÖŌÅ珰xidj†Ž‘‘‡{h`d}—ÂÍĪāņöõöƒøųųúēûƒú†ų†ø öõöņāĪĖŋ’ydah€ŠŽŽ††{gbg}œÉÔÖčú˙ū†˙úøų¯úųû€úûûú‚ũū˙ū˙+ū˙účÖÔȘ{gcj~‡‰‰yxzwyv{ŠŅÚÛęøüûüūūũũū˙úõŲŅΝĐŌĶĶÔÖרØÜââãäëėîî€õ÷ųûúûũūū€ũūūüûüøęÛÚÎĨŒzwy{{}~dcfvĒļŋČÖíõķ÷€û‚üũ˙ę×rPIKMKLLKMO€NP€NOK„LK€MNRWXZagim‘•›˛ˇģŋŌ×Ûßéîīōųû„ü€û÷ķõîÔÅēŗĻvhef_^btĩÆÎ×áöüúûü„ûüūäĪQ*$(+Œ*+€)*€,-+-€,…)(')()0557@IJOcwx|† Š­˛ÉÎŅØæíîīųų†ûüûúü÷ãÖÎÆ˛vb^_]\`s¸ĖÔÛæøũü†ûü˙ãÎI%"')Œ('(**))+))**'((''))()*0677AIINbvw{ƒŸ§ĒąÄĖĪĶáåįęųųü‡ûüũøæÛÔˏr`[][Y\qģŌÚŪéøü‡ûü˙äĪL)'+-Œ,+,€.-/.+(.-./24438=<DZadmŠ’–œŗēŧŋĘÍÎËĮÁĀŊŽ š‹}{wfTSOM@><94001+(*MČŨøõ‹ô÷îÎiMHJKHMiÎî÷õŠôõøŪÉN,(,./‚- .-..-.-02006€>1E[bfnŠ’—œ˛ˇēžÄČĘČÃŧģ¸Ēš–Š|yweUTQNB?>;6322-*,NÉŪøõŠôõ÷îÎiMHKKHMhÍėõ‹ōķöÛČN-*-./--../0116::=IUWYiwzz~“˜šž¨Ŧ­&ŦŠĄžž›„‚€vljh_XVULBCA?75542100-*,MČÛöķ‹ō õėÍhMHKKHMhËéō‹đņôŲÅP/+/-.)--.-/335=DDJaw}€—°ĩĩēČÍĪĖÉÆÅžĒ¤ ™{trn^NJJC€; 71221//./-.€-€.,),MÅŲôņ‹đ ōéËhMHKKHMiËęķ‹đņôŲÅP/+/‚-,4+,+.002:ABHd„‹¤žÆÅËŲßßÜĶĐÎÆĢ¤Ÿ•vlieSC?>9200-*)**++,,+-,),MÅŲôņ‹đ ķęËiMHKKHLgËęō‹īđķÚÆO.+/-/./€0-106::;DOPVm†Œ‘¨ŊÄÃÆĪĶŌÎÃĀžļž—“‹ofebSDA?:5430-,ƒ-,-,)+LÆÚķđ‹īōęËgLHKIGKfĘéņīŠî>īōŲÄL+),--.-2237AEFGXilo’•Ŗą´ļŊÂÅÃŋąŽĢ¤‰†pjhdPLKJC:98400/..„-…,-)+LÅŲōīŠîīņéĘfKGIJGKgČįî‹ėíđÖÂK*'+€-%.558?RY^_{—ĄšŅÖÖÚŨßÜĶËÉÅģ•Œ†|]RPL?;;:€12/./..-,‡-…,-)+LÂÖđí‹ė îįČgKGJJGKeČæî‹ë5ėīÕÂI)'*+*+,336=TZaaƒĸ¨¯ĮāčįęėíęÜÎÍĘģ’„~tRHEB4100++*++€,+,…-†,(+KÂÕīė‹ë îæČeKGJJGKfĮåíŒë1îÔÁL,)-0/02<2132.--.--,-+€,-‚,€-€.€/.0/€34426SŊÎåâŠáâäÜĀcKFIIFKcĀÛã‹á$âäÍŊX;7Cbjq|¤°ļŊĶÜŪŨāãäáÚŌŅĮ xpjQ5-//ƒ*‡+,€+**€+,++,,--./0101315RŧÎäâ‹á ãÛĀcKFIIFKdŋÚâ‹ā!áãÎŋcGCNluzƒŠ˛ˇžŅØÚŲŨáâßŅÄÃģ–rkfO9€3.-,-‚,€-€. /.0//.011013€245667899=;@]ŊÍãá‹ā âÚŋdKFIIFJbŋÛá‹ßāáÕʋxw€™ ¤ŠĀÆČË×€Û ÚŲÛĶ´•ŠoSML?3€0..--//011€3 46898;>=?BEGHK€ORX[\\aabdhil€ČĶáā‹ß áÛŋbJFIIFJcŧØßŒŨŪØĶŗŠŠ°ČÎĐŅ×ŲŲÚÛŨŨÜ×ŌÔÆ–cXWF3/1/€-0.++-,112356677889>AABGMMOU\^_fmmor{~€‚‰‹ŒŽ•–˜ĨĐÖߌŨ ߨŧcJFIIFJcģ×ŪŒÜ ŨØÕžļˇžÕÛÜŨŨŪ€ŨÜŨÜÖĐĶÎXKK;+')*+ **++101245567€8=BBDJNPQYacdlttvy„†ˆ‹’•—˜ ĄŖ¯ĐÖŨŒÜŪ×ģcJFIIFJcŧØßŨ‹Ü ŨØÔžĩĩŊŌŲÚÛÜŨŨÜÜŨÛÛÖŅŌď[PQ@0-.//. --/24348898€:!;@DEFLQST\cefmvvx{„‡‰Œ’•—˜ŸĄŖŽĐÖŨŨŠÜŨߨŧcJFIIFJbģÕÜŒÚ ÛÖÔĀģģĀŌ×ØØƒÚŲŲÔĪĐÑaWWH:669;:;:;::>B€FK#QRQQVZZ\afhjqwyy‡‡ˆŠ“”–˜Ÿ ĸŠĢ­ĩĐÔÛŒÚ ÜÕģbJFIIFJb¸ĶڍØÖÖŌ€ĐÖÖרׂØA××ŅĖĖœvmmcYVY^ceehorru{~Œ“›Ÿ Ą§­Ž¯˛´ĩĩ¸ģģŧžŋŋĀĀÅÄÅÆČÉÉĘĘËËÎÖ×Ø Ú͏bJFIIFJaˇŅ؎Ö×ÔÕÕÔ׆Ö8ÕÖĪČĘĀzqrj`_ahoqps~„“–Ÿĸ¤¨´¸¸ēĀÅĮČĘĖÍÍĪŅŅĐŌŅŅŌŌĶĶÔĶՀÔÕÕÔՏ֨ҎaJFIIFKa¸ŅØ×ŽÖ×‡Ö+ÕÖĪČÉĀ wwohfhowxy|„‡‰Œ”—™›¨ĢŦ°ŧĀĀÂÆĖÎĪŅŌĶĶՃÖÕÕØØ‡×ŽÖרҏaKFIIGKbˇĐ×֜Õ+ÔÕĪĘËʎ††€zwz€…‡‡‰‘“•—ž ĸŖ­¯ą´žÁÁÂČÍÍÎĪĐŅŅŌ„ĶÔÔÖ֗ÕÖ×СbKGIGEJ_´ÍԝŌŅŅĐĪĪÎÆžŊŧŧģēģŧŊžŊžĀÁÂÂÄÃÄÅ€É ËËÎÍÍĪĐĪŅĐĐŅŅ¤Ō ÔÍ´_JEGHEJ`ŗĖ͟ŅĐĐŅĐЀΠĪÍÎÍÍĪÎÎĪÎ€ĪĐŅŅĐЀŅŌŅĐŌŌ‚ĶŌŸŅ ĶĖŗ`JEHHEJ`˛ËŌŸĐ‚ŅƒŌŅŅŌ€ŅĐ€ŅĐ€ĪÎĪ€Î‰ÍĪĐĐŅœĐ Ō˲`JEHHFI_ŗËŅ›ĪÎÎ€ĪÎ€ĪÎÍĖĖÍĖɀČĀÃÁÁĀŋžŊžžŊŧŧģģēšēģēģŧÄÎÍÎÍĐšĪ ŅËŗ_IFHHFI_°ÉĪ—Í€ĖËÉĮČÆĮĮÅńĮ/ÆÃžŊŧšąŽ­ĒĄžžœ–”’ˆ†…„‚€~zvuv{€‡ŖžÁÄÆËÍÍĖĖĘĘĖĖ’Í Īɰ_IFHHFI_¯ČÎĖ„ÍĖÍĖĖËȀĮƀÄŀÆ2ĮÅÆÅĀŧģģļŦ¨ĻŖ˜–”’ˆ‡…‚{xwvtppoidcdjqoxšģŊÂÅÉĖĖËËĘĘËË’Ė Îȝ_IFHHFI^¯Į͎ËFĖÉÉĘÉĘÉÉĘĮĮÆÆÃÂÁÂĀŊžžŋĀĀÁŋžŋžē´ŗ˛¯¤ĄŸœ‘ŽŠƒ€~{spopkhhfc^\^dihq–šģĀÁĘĖËˁɓËÍĮ¯^IFHFDH^­ÆĖˋĘËÉÉÁĀŋŋžŊŊŧēš¸ˇ´ŗ˛ŗ¯ŦŦĢŦŦĢĢŠ€§&ĸœœ›˜ŒŠ‡€~|ztrrofcdca_^]ZVUW[``g¸ģĀÁȀʁȀĘÉˍĘËĖÆ­^HDFHFJ_ŦÄʍČ$žĨš˜•“’‘ŒŒ‹‰€~~}xrppkfed_YXXSPOPNHG€FEDD?>>=;;::98997667::9866563443€21/..//ƒ. /495@wŦ¯¸ēÃÆ‚ĮÆĀÆŽĮ ÉÃĢ^HEGGEH^ĢÃɌĮ1ČÂŊ›’Šˆ†„}{yqommf_^]VOOMHB@@;877632213122/0//,-ƒ,++*,140;tĢŽˇšÄĮČÉȁÂĮȍĮÉÃĢ^HEGGEH^ĢÃÉȊĮ%ČÉÁŧ“ˆ……€|vssqkighaZZXSNLJFA??;87764€3200//..ƒ-.8?;78754€300//00//.ƒ-,.4::?Qdgn’ļ¸žŊĀĀÁžĩŗ°Ŧš••žēŋÅŒÄ ÆĀ¨^IEGGEI]ĨŧŒÁ$Ã˛¤U>8;7877323210010/00/.//0//..0.//,-,,0:EGMl‹‘•¨ŊžĀĀ€ŧ ĩ§Ąž–xoq°ˇÂŒÁ ÂŧĨ]IEGGEI]ĻŊËÁÂİĸM40110//+,++€*‚+**€+‚,€-…,+#,,++*)(+8FGPr”œŸ¯ĀĀÂÁŋŋŧ¸¤ “sgjy¯ˇÃŒÁ ÃŊĻ]IEGGEI^Ĩŧ‹ĀÁðĸN6234312./..…-‚,…-„,+€.-0 1213BPQXx—žĄ­šēŧēĩ´ŗ­š•“Šmcdu­ļÂÁ‹Ā ÂŧĨ^IEGFDF[¤ģĀ‹ž ŋÁ¯ J1/13322-.ƒ-,†-‡,)-,1125?BBCN[\_lz|’¤ĒŠŠ¨¨§Ą‰†€oigbNGJ_Ĩ˛ĀŒž Āģ¤[FDFFDG[Ŗēŋ‹ŊžĀ­žF-,.€23,-,,-,†-†,++,-457=NTTZn‚‡‰—¤§¨¯ĩˇ˛Ĩ——’‰h`\WC=<;1-/IŸ­Āž‹Ŋ ŋēŖ[GDFFDG\ĸšž‹ŧŊŋŦE,+-€23,-,,-,†-€,+-**)*+246;RWX\u’–ĸ°ĩĩ¸ŧŊˇĨ•“Ž„`WTO;532+')CœŦŋŊ‹ŧ žšĸ\GDFFDG[ĸ¸Ŋ‹ģŧžĢE.,.2,-,,-,†-,,ƒ-€0)1;<>CW]^cxŒ‘“žŠŦŦŽŽ¯Ģ›‹‰…{_UQM<754-*+CĢžŧ‹ģ Ŋ¸ĸ[GDFFDG[Ÿĩģ‹šēŧǜJ2/34544--,,-,-€.6//0103:==?KMOS^bdhy~~€‹•˜—–••“Š€€}o``]XHBA>5211,*,C›Šŧē‹š ģĩŸ[GDFFDG[ž´ē‹¸ šģМM6356655--‡,-..-.2566:FJLRdjms„ŠŒ›Ÿ Ÿ€ž›Ž‚€|hVROB5544/../.+),Dš¨ģš‹¸ ē´ž[GDFFDGZŸŗš‹ˇ¸ēМM74€655--ƒ,+,,++,,+,/€4$9GKOTjptz•—›ĨŠĒ¨Ĩĸĸž~|waLGF:--+,*+*€+ ,,+),Bš¨ē¸‹ˇšŗŸZGDFFDGZŸ´š¸Šˇ¸ēМL6357765--++--,,-..//€0*13248;=>AIQTV_ilmwƒ„‡’•——”“’ƒ€}wd]\XL@=<72130,.€-.--…,-*.C—ŖĩŒŗ ´¯›YGDFFDHYœ¯ĩ‹ŗ´ļ¤—D/,.0ƒ/*023449==@IRTVakmpz„‡‡‹–š›˜—•“„‚yc]]YM@==6€0/.-.‚-…,-*.C—¤ļ´‹ŗ ĩ¯œYHDFFDHY›Ž´‹˛ ŗĩĸ•E/,.10€110025787=BBENWZ\epsuˆ‹‹˜œœ™•“’Ž|zs]VVTE9752.,,-+Œ,-*.C–Ŗĩŗ‹˛´Ž›YHDFFDHZ›¯´ŗŠ˛ ŗĩ¤–I2.36878:€;)AACCIOPQYbcfmuxy…††‡Ž‹„ƒ‚~qmkfTPOLB8662-,-*.D–ŖĩŗŠ˛ŗ´¯›ZHDFFDFX—̰€¯‰°9˛ĸ—TA=BKMOQXZ[^ilmmu}€…‰‹‰‰Š‰ˆ{zyvhec^QLKJ@?><74451./..-„,-,-+)-B“ ˛‰°€¯°Ģ—XFDFEDFY˜Ŧą°¯¯ˆ°9ą˛Ŗ˜VB?EOSUWadehvxz{ƒ‹Ž’–—•“ƒzwvq^YWRC>=<3200..-.--..-…,-,-+)-C”Ąŗąˆ°¯¯°ąŦ˜YFDEFDGZ–ĒŽ­‹¯,ङYFCHUWY]fjloy|~~†Ž’”–•ŒŠvtslZTQN?;:90€.,,++-†,-,-+),A”Ą˛°Š¯­ŽĒ–[HEFJIL\“Ŗ¨ŠŦ¯°‡¯°ąĻœgVSWbefhprsu|€€„ˆ‰‰ˆ‚||yrjgfbROMI=99720//--,,-†,-,-,),A”Ą˛°‡¯°¯ŦЍ¤“[KHISRTaˆ•˜œĄĒ‰Ŧ­¨Ĩ‰‰‹‘“”“•”“‘ˆ†„ƒ|vtqh]ZXQIHHA€;:4€3/€.--,,…-†,-,-+),AŽ‰ŦĒĄœ˜”‰`TQRXWZc…“™ŸĒ­ˆŦ(­Ē¨ž™šœ ĸĄĄŸŸ™‰‡†{pnj]PMKB:773..--,,+,)‚*‡+))‚*))+)+)'*@Ž­‡Ŧ­ĒŸ™“Ž…cXVWYYZd„‘•œ¨ŦĢŦ­…Ŧ%­ĢŠĄžžŸ¤ĨĻĨĄ Ÿ›Œ‰ˆ|pnk^PMLD:8631.//++‡,….†,.,.,*-E‘žŽ­„Ŧ­ŦĢŦ¨–‘Ž…dZWXZZ[d}ƒ‡Œ“ĸĻĻ§Š€ĒƒĢ#ЍĄŸŸ ¤ĨĻĨŖĸĄž“ƒ{xvk`]\TNLKIEDDCA‡@B@…B„@B@B@@B@BB@B?CW•Ÿ­‚Ģ€ĒЧĻĻĸ•މ†d[YZfc`_a_`k{’—™ ĻĒŠĒƒĢĒĢŠ¨¨ŠŠ€Ē€Š§Ĩ€Ŗ Ąžžš—––•“’’‘€ĻŽ”ĻŠŦ‚Ģ"ĒŠĒĻ ™—’€rlkjf`cftti[UQUaqŠ’’œ§ŠŠĒǃĢŦĢ…ŦĒĒĢ€ĒŠĒЍ¨Š§…¨¨§ύĢĢŦĢ"ĒĒŠŠ§œ’‘Œxmdaednww‹‹p_SPRboˆ™Ą¤¤Ļ’§†¨´Š¨¨„§Ϥ¤Ą™Ž‰ujbacjt‹‹ŒŒxeXTVco……Œ’’€“Ų”€“’’Œ……rha_bl‚—q]ha_^beeb\XWWŨVWWX\bee^YTTWJO__ĸĸ‘‹pnldaa`]WQáOQW]`^YXVVUU.?ŸŸĒœ“wf`]\XPGDEŨDEDGPX\[USOQUG*ļļŋœĸvfc`][QIGHŨF HGIQ[]]YSQUUE€ ?lj™j`^\ZPFÛDF PZ\\XPJONUUƒĒĒ?3KHJJ1€)Ũ1€)1JJFE/'?8˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ũ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ų€ ‹b[Z<8==;ã19AA;?POUfbuĻϑ𐑆vj^\YUPáN PVZ\]bgnuw˜ĄĒĒ€­ Ÿ—…}oc_]XQáOQX]`bgkqv€ŸŽŗŗ¨¨Ŗž‘ˆwk^[YQLāKJMSZ]^biou}œŠ¯¯”•……€wrmjic__ā^`dh€jllpw•ĄĻϘ˜šŒxvuvxtrokkjllŲk"lljkloqssmkggrž žŽŽŠ}mek~’˛¸ēÅŌÖÕֆךؖ×!ÖÕÖŌÅ珰xidj…ŒŒŒ…{g`d}—ÂÍĪāņöõöƒøųųúēûƒú†ų†ø öõöņāĪĖŋ’ydahˆ„„ygbg}œÉÔÖčú˙ū†˙úøų¯úųû€úûûú‚ũū˙ū˙+ū˙účÖÔȘ{gci~…ˆˆxvxwxv{ŠŅÚÛęøüûüūūũũū˙úõŲŅΝĐŌĶĶÔÖרØÜââãäëėîî€õ÷ųûúûũūū€ũūūüûüøęÛÚÎĨŒzwyzz|}dcfvĒļŋČÖíõķ÷€û‚üũ˙ę×rPIKMKLLKMO€NP€NOK„LK€MNRWXZagim‘•›˛ˇģŋŌ×Ûßéîīōųû„ü€û÷ķõîÔÅēŗĻvhef_^btĩÆÎ×áöüúûü„ûüūäĪQ*$(+Œ*+€)*€,-+-€,…)(')()0557@IJOcwx|† Š­˛ÉÎŅØæíîīųų†ûüûúü÷ãÖÎÆ˛vb^_]\`s¸ĖÔÛæøũü†ûü˙ãÎI%"')Œ('(**))+))**'€('))()*/456@IINbvw{ƒŸ§ĒąÄĖĪĶáåįęųųü‡ûüũøæÛÔˏr`[][Y\qģŌÚŪč÷û‡úûūãÎL)'+-Œ,+,€.-/.+(.-./24438=<DZadmŠ’–œŗēŧŋĘÍÎËĮÁĀŊŽ š‹}{wfTSOM@><94001+(*MČŨøõ‹ô÷îÎiMHJKHMiÎî÷õŠôõøŪÉN,(,./‚- .-..-.-02006€>1E[bfnŠ’—œ˛ˇēžÄČĘČÃŧģ¸Ēš–Š|yweUTQNB?>;6322-*,NÉŪøõŠôõ÷îÎiMHKKHMhÍėõ‹ōķöÛČN-*-./--../0116::=IUWYiwzz~“˜šž¨Ŧ­&ŦŠĄžž›„‚€vljh_XVULBCA?75542100-*,MČÛöķ‹ō õėÍhMHKKHMhËéō‹đņôŲÅP/+/-.)--.-/335=DDJaw}€—°ĩĩēČÍĪĖÉÆÅžĒ¤ ™{trn^NJJC€; 71221//./-.€-€.,),MÅŲôņ‹đ ōéËhMHKKHMiËęķ‹đņôŲÅP/+/‚-,4+,+.002:ABHd„‹¤žÆÅËŲßßÜĶĐÎÆĢ¤Ÿ•vlieSC?>9200-*)**++,,+-,),MÅŲôņ‹đ ķęËiMHKKHLgËęō‹īđķÚÆO.+/-/./€0-106::;DOPVm†Œ‘¨ŊÄÃÆĪĶŌÎÃĀžļž—“‹ofebSDA?:5430-,ƒ-,-,)+LÆÚķđ‹īōęËgLHKIGKfĘéņīŠî>īōŲÄL+),--.-2237AEFGXilo’•Ŗą´ļŊÂÅÃŋąŽĢ¤‰†pjhdPLKJC:98400/..„-…,-)+LÅŲōīŠîīņéĘfKGIJGKgČįî‹ėíđÖÂK*'+€-%.558?RY^_{—ĄšŅÖÖÚŨßÜĶËÉÅģ•Œ†|]RPL?;;:€12/./..-,‡-…,-)+LÂÖđí‹ė îįČgKGJJGKeČæî‹ë5ėīÕÂI)'*+*+,336=TZaaƒĸ¨¯ĮāčįęėíęÜÎÍĘģ’„~tRHEB4100++*++€,+,…-†,(+KÂÕīė‹ë îæČeKGJJGKfĮåíŒë1îÔÁL,)-0/02<2132.--.--,-+€,-‚,€-€.€/.0/€34426SŊÎåâŠáâäÜĀcKFIIFKcĀÛã‹á$âäÍŊX;7Cbjq|¤°ļŊĶÜŪŨāãäáÚŌŅĮ xpjQ5-//ƒ*‡+,€+**€+,++,,--./0101315RŧÎäâ‹á ãÛĀcKFIIFKdŋÚâ‹ā!áãÎŋcGCNluzƒŠ˛ˇžŅØÚŲŨáâßŅÄÃģ–rkfO9€3.-,-‚,€-€. /.0//.011013€245667899=;@]ŊÍãá‹ā âÚŋdKFIIFJbŋÛá‹ßāáÕʋxw€™ ¤ŠĀÆČË×€Û ÚŲÛĶ´•ŠoSML?3€0..--//011€3 46898;>=?BEGHK€ORX[\\aabdhil€ČĶáā‹ß áÛŋbJFIIFJcŧØßŒŨŪØĶŗŠŠ°ČÎĐŅ×ŲŲÚÛŨŨÜ×ŌÔÆ–cXWF3/1/€-0.++-,112356677889>AABGMMOU\^_fmmor{~€‚‰‹ŒŽ•–˜ĨĐÖߌŨ ߨŧcJFIIFJcģ×ŪŒÜ ŨØÕžļˇžÕÛÜŨŨŪ€ŨÜŨÜÖĐĶÎXKK;+')*+ **++101245567€8=BBDJNPQYacdlttvy„†ˆ‹’•—˜ ĄŖ¯ĐÖŨŒÜŪ×ģcJFIIFJcŧØßŨ‹Ü ŨØÔžĩĩŊŌŲÚÛÜŨŨÜÜŨÛÛÖŅŌď[PQ@0-.//. --/24348898€:!;@DEFLQST\cefmvvx{„‡‰Œ’•—˜ŸĄŖŽĐÖŨŨŠÜŨߨŧcJFIIFJbģÕÜŒÚ ÛÖÔĀģģĀŌ×ØØƒÚŲŲÔĪĐÑaWWH:669;:;:;::>B€FK#QRQQVZZ\afhjqwyy‡‡ˆŠ“”–˜Ÿ ĸŠĢ­ĩĐÔÛŒÚ ÜÕģbJFIIFJb¸ĶڍØÖÖŌ€ĐÖÖרׂØA××ŅĖĖœvmmcYVY^ceehorru{~Œ“›Ÿ Ą§­Ž¯˛´ĩĩ¸ģģŧžŋŋĀĀÅÄÅÆČÉÉĘĘËËÎÖ×Ø Ú͏bJFIIFJaˇŅ؎Ö×ÔÕÕÔ׆Ö8ÕÖĪČĘĀzqrj`_ahoqps~„“–Ÿĸ¤¨´¸¸ēĀÅĮČĘĖÍÍĪŅŅĐŌŅŅŌŌĶĶÔĶՀÔÕÕÔՏ֨ҎaJFIIFKa¸ŅØ×ŽÖ×‡Ö+ÕÖĪČÉĀ wwohfhowxy|„‡‰Œ”—™›¨ĢŦ°ŧĀĀÂÆĖÎĪŅŌĶĶՃÖÕÕØØ‡×ŽÖרҏaKFIIGKbˇĐ×֜Õ+ÔÕĪĘËʎ††€zwz€…‡‡‰‘“•—ž ĸŖ­¯ą´žÁÁÂČÍÍÎĪĐŅŅŌ„ĶÔÔÖ֗ÕÖ×СbKGIGEJ_´ÍԝŌŅŅĐĪĪÎÆžŊŧŧģēģŧŊžŊžĀÁÂÂÄÃÄÅ€É ËËÎÍÍĪĐĪŅĐĐŅŅ¤Ō ÔÍ´_JEGHEJ`ŗĖ͟ŅĐĐŅĐЀΠĪÍÎÍÍĪÎÎĪÎ€ĪĐŅŅĐЀŅŌŅĐŌŌ‚ĶŌŸŅ ĶĖŗ`JEHHEJ`˛ËŌŸĐ‚ŅƒŌŅŅŌ€ŅĐ€ŅĐ€ĪÎĪ€Î‰ÍĪĐĐŅœĐ Ō˲`JEHHFI_ŗËŅ›ĪÎÎ€ĪÎ€ĪÎÍĖĖÍĖɀČĀÃÁÁĀŋžŊžžŊŧŧģģēšēģēģŧÄÎÍÎÍĐšĪ ŅËŗ_IFHHFI_°ÉĪ—Í€ĖËÉĮČÆĮĮÅńĮ/ÆÃžŊŧšąŽ­ĒĄžžœ–”’ˆ†…„‚€~zvuv{€‡ŖžÁÄÆËÍÍĖĖĘĘĖĖ’Í Īɰ_IFHHFI_¯ČÎĖ„ÍĖÍĖĖËȀĮƀÄŀÆ2ĮÅÆÅĀŧģģļŦ¨ĻŖ˜–”’ˆ‡…‚{xwvtppoidcdjqoxšģŊÂÅÉĖĖËËĘĘËË’Ė Îȝ_IFHHFI^¯Į͍ËĘËÉȂÉ>ĘĮĮÆÆÃÂÁÂĀŊžžŋĀĀÁŋžŋžē´ŗ˛¯¤ĄŸœ‘ŽŠƒ€~{spopkhhfc^\^dihq–šģĀÁĘĖËˁɁʏËÍĮ¯^IFHFDH^­ÆĖˋĘËÉÉĀŋ€žŊŊŧēš¸ˇ´ŗ˛ŗ¯ŦŦĢŦŦĢĢŠ€§&ĸœœ›˜ŒŠ‡€~|ztrrofcdca_^]ZVUW[``g¸ģĀÁȀʁȀÉČˍĘËĖÆ­^HDFHFJ^ĢÂȍÆ$ÁŊ¤š˜”’‘‹‹Š‡€}}|wrppkfed_YXXSPOPNHG€FEDD?>>=;;::98997667::9866563443€21/..//ƒ. /495@w̝ˇšÁāÅÄÁĀÃčŠĮÁŠ^HEGGEH^ŠÁĮŒÅ1Æŋē›’ˆ†…ƒ~|zxpnlle_^]VOOMHB@@;877632213122/0//,-ƒ,++*,140;sĒ­ļ¸ÂłÆÅÁĎÅĮÁŠ^HEGGEH^ŠÁĮƊÅ%ÆĮŋē“ˆ…„~|trrpjhfg`ZZXSNLJFA??;87764€3200//..ƒ-.8?;78754€300//00//.ƒ-,.4::?Qdgn‘ĩˇŊŊžŋĀŊ´˛¯Ģ™””œēžÄŒÃ Åŋ¨]IEGGEI]ĨŧŒÁ$Ã˛¤T=7:7877323210010/00/.//0//..0.//,-,,0:EGMl‹‘•¨ŊžĀĀ€ŧ ĩ§Ąž•xnp¯ˇÂŒÁ ÂŧĨ]IEGGEI]ĻŊËÁÂİĸM40110//+,++€*‚+**€+‚,€-…,+#,,++*)(+8FGPr”œŸ¯ĀĀÂÁŋŋŧ¸¤ “sgjy¯ˇÃŒÁ ÃŊĻ]IEGGEI^Ĩŧ‹ĀÁðĸN6234312./..…-‚,…-„,+€.-0 1213BPQXx—žĄ­šēŧēĩ´ŗ­š•“Šmcdu­ļÂÁ‹Ā ÂŧĨ^IEGFDF[¤ģĀ‹ž ŋÁ¯ J1/13322-.ƒ-,†-‡,)-,1125?BBCN[\_lz|’¤ĒŠŠ¨¨§Ą‰†€oigbNGJ_Ĩ˛ĀŒž Āģ¤[FDFFDG[Ŗēŋ‹ŊžĀ­žF-,.€23,-,,-,†-†,++,-457=NTTZn‚‡‰—¤§¨¯ĩˇ˛Ĩ——’‰h`\WC=<;1-/IŸ­Āž‹Ŋ ŋēŖ[GDFFDG\ĸšž‹ŧŊŋŦE,+-€23,-,,-,†-€,+-**)*+246;RWX\u’–ĸ°ĩĩ¸ŧŊˇĨ•“Ž„`WTO;532+')CœŦŋŊ‹ŧ žšĸ\GDFFDG[ĸ¸Ŋ‹ģŧžĢE.,.2,-,,-,†-,,ƒ-€0)1;<>CW]^cxŒ‘“žŠŦŦŽŽ¯Ģ›‹‰…{_UQM<754-*+CĢžŧ‹ģ Ŋ¸ĸ[GDFFDG[Ÿĩģ‹šēŧǜJ2/34544--,,-,-€.6//0103:==?KMOS^bdhy~~€‹•˜—–••“Š€€}o``]XHBA>5211,*,C›Šŧē‹š ģĩŸ[GDFFDG[ž´ē‹¸ šģМM6356655--‡,-..-.2566:FJLRdjms„ŠŒ›Ÿ Ÿ€ž›Ž‚€|hVROB5544/../.+),Dš¨ģš‹¸ ē´ž[GDFFDGZŸŗš‹ˇ¸ēМM74€655--ƒ,+,,++,,+,/€4$9GKOTjptz•—›ĨŠĒ¨Ĩĸĸž~|waLGF:--+,*+*€+ ,,+),Bš¨ē¸‹ˇšŗŸZGDFFDGZŸ´š¸Šˇ¸ēМL6357765--++--,,-..//€0*13248;=>AIQTV_ilmwƒ„‡’•——”“’ƒ€}wd]\XL@=<72130,.€-.--…,-*.C—ŖĩŒŗ ´¯›YGDFFDHYœ¯ĩ‹ŗ´ļ¤—D/,.0ƒ/*023449==@IRTVakmpz„‡‡‹–š›˜—•“„‚yc]]YM@==6€0/.-.‚-…,-*.C—¤ļ´‹ŗ ĩ¯œYHDFFDHY›Ž´‹˛ ŗĩĸ•E/,.10€110025787=BBENWZ\epsuˆ‹‹˜œœ™•“’Ž|zs]VVTE9752.,,-+Œ,-*.C–Ŗĩŗ‹˛´Ž›YHDFFDHZ›¯´ŗŠ˛ ŗĩ¤–I2.36878:€;)AACCIOPQYbcfmuxy…††‡Ž‹„ƒ‚~qmkfTPOLB8662-,-*.D–ŖĩŗŠ˛ŗ´¯›ZHDFFDFX—̰€¯‰°9˛ĸ—TA=BKMOQXZ[^ilmmu}€…‰‹‰‰Š‰ˆ{zyvhec^QLKJ@?><74451./..-„,-,-+)-B“ ˛‰°€¯°Ģ—XFDFEDFY˜Ŧą°¯¯ˆ°9ą˛Ŗ˜VB?EOSUWadehvxz{ƒ‹Ž’–—•“ƒzwvq^YWRC>=<3200..-.--..-…,-,-+)-C”Ąŗąˆ°¯¯°ąŦ˜YFDEFDGZ–ĒŽ­‹¯,ङYFCHUWY]fjloy|~~†Ž’”–•ŒŠvtslZTQN?;:90€.,,++-†,-,-+),A”Ą˛°Š¯­ŽĒ–[HEFJIL\“Ŗ¨ŠŦ¯°‡¯°ąĻœgVSWbefhprsu|€€„ˆ‰‰ˆ‚||yrjgfbROMI=99720//--,,-†,-,-,),A”Ą˛°‡¯°¯ŦЍ¤“[KHISRTaˆ•˜œĄĒ‰Ŧ­¨Ĩ‰‰‹‘“”“•”“‘ˆ†„ƒ|vtqh]ZXQIHHA€;:4€3/€.--,,…-†,-,-+),AŽ‰ŦĒĄœ˜”‰`TQRXWZc…“™ŸĒ­ˆŦ(­Ē¨ž™šœ ĸĄĄŸŸ™‰‡†{pnj]PMKB:773..--,,+,)‚*‡+))‚*))+)+)'*@Ž­‡Ŧ­ĒŸ™“Ž…cXVWYYZd„‘•œ¨ŦĢŦ­…Ŧ%­ĢŠĄžžŸ¤ĨĻĨĄ Ÿ›Œ‰ˆ|pnk^PMLD:8631.//++‡,….†,.,.,*-E‘žŽ­„Ŧ­ŦĢŦ¨–‘Ž…dZWXZZ[d}ƒ‡Œ“ĸĻĻ§Š€ĒƒĢ#ЍĄŸŸ ¤ĨĻĨŖĸĄž“ƒ{xvk`]\TNLKIEDDCA‡@B@…B„@B@B@@B@BB@B?CW•Ÿ­‚Ģ€ĒЧĻĻĸ•މ†d[YZfc`_a_`k{’—™ ĻĒŠ„ĒŠĒ¨§§¨¨ŠŠ¨Š¨¨§Ŗ€ĸ Ÿœ™–••“’‘‘§ŽŽ“Ĩ¨ĢƒĒŠĒĻ ™—’€rlkjf`cftti[UQUaqŠ’’œ§ŠƒĒĢĒ„Ģ ĒĒŠĒĒŠ¨¨Š¨§§¨†§¨ĻĨ§ĒḖǁЧœ’‘Œxmdaednww‹‹p_SPRboˆ™Ą¤¤Ĩ’φ§´¨§§„Ļ"Ĩ¤¤Ą™Ž‰ujbacjt‹‹ŒŒxeXTVco……Œ’’““’Ų“!’““’’Œ……rha_bl‚—q]ha_^beeb\XWWŨVWWX\bee^YTTWJO__ĸĸ‘‹pnldaa`]WQáOQW]`^YXVVUU.?ŸŸĒœ“wf`]\XPGDEŨDEDGPX\[USOQUG*ļļŋœĸvfc`][QIGHŨF HGIQ[]]YSQUUE€ ?lj™j`^\ZPFÛDF PZ\\XPJONUUƒĒĒ?3KHJJ1€)Ũ1€)1JJFE/'?8˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ũt8mk@  !.39EVowx{~x`OC?<4100//2;QZez—ÃŌÔŲŪāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāŌ¨Œwni[VTT558B]gr‹­ßīņ÷ũ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đŸ‡~xhb``??CMis–´áņōøū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņĮĢ–†tmkkHHLWvŒ ŧåķôųū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķΎĨ•ywwmmr€§ĩžĘÛķûûũ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üđįáÜŌļŦ¨¨{{€šÉŅÚæøūū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üųøôčĘžē燇Œ›ÃŌŲáëú˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üđŌÆÃߟŖ¯ĪÛáįīû˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üķÛŌĪĪāāáåđôõ÷úū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūûķđīīøøøųüũũũū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūüûûû˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūūūū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūûúúú˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūûōīîî˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūúīëęęōōōõúũũũū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũ÷åßŨŨČČËĶęōõ÷úū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ûíÉ쎎ZZb{ŊÖāæīû˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙õÕ_UU00:Y­ĖØāëú˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōËc #import #import "sendmsg.h" #define RABBIT "" //"/opt/rabbit/bin/rabbitvcs_osx " void sendCommand(NSArray* selectedFiles, int commandid) { bool acceptsFiles = YES; NSMutableArray* arguments = [[NSMutableArray alloc] initWithCapacity:32]; switch (commandid) { case ADD: [arguments addObject:@"add"]; break; case ANNOTATE: [arguments addObject:@"annotate"]; break; case CHECK_FOR_MODS: [arguments addObject:@"checkmods"]; break; case CHECKOUT: [arguments addObject:@"checkout"]; break; case CLEANUP: [arguments addObject:@"cleanup"]; break; case COMMIT: [arguments addObject:@"commit"]; break; case DELETE: [arguments addObject:@"delete"]; break; case EXPORT: [arguments addObject:@"export"]; break; case DIFF_RAW: [arguments addObject:@"diff"]; break; case DIFF_GUI: [arguments addObject:@"diff"]; [arguments addObject:@"-s"]; break; case IGNORE: [arguments addObject:@"ignore"]; break; case LOG: [arguments addObject:@"log"]; break; case MARK_RESOLVED: [arguments addObject:@"markresolved"]; break; case PROPERTIES: [arguments addObject:@"properties"]; break; case REVERT: [arguments addObject:@"revert"]; break; case RENAME: [arguments addObject:@"rename"]; break; case UPDATE: [arguments addObject:@"update"]; break; case UPDATE_TO: [arguments addObject:@"updateto"]; break; case BRANCH: [arguments addObject:@"branch"]; break; case MERGE: [arguments addObject:@"merge"]; break; case RELOCATE: [arguments addObject:@"relocate"]; break; case REPO_BROWSER: [arguments addObject:@"browser"]; break; case SWITCH: [arguments addObject:@"switch"]; break; case LOCK: [arguments addObject:@"lock"]; break; case UNLOCK: [arguments addObject:@"unlock"]; break; case CREATE_PATCH: [arguments addObject:@"createpatch"]; break; case APPLY_PATCH: [arguments addObject:@"applypatch"]; break; case SETTINGS: [arguments addObject:@"settings"]; acceptsFiles = NO; break; case ABOUT: [arguments addObject:@"about"]; acceptsFiles = NO; break; default: fprintf(stderr, "Unknown command %i\n", commandid); return; } NSTask* task = [[NSTask alloc] init]; [task setLaunchPath: @"/opt/rabbit/bin/rabbitvcs_osx"]; if (acceptsFiles) { NSLog(@"%i selected files\n", [selectedFiles count] ); for (NSString* curr in selectedFiles) { NSLog(@" - %@\n", curr); } [arguments addObjectsFromArray: selectedFiles]; } [task setArguments:arguments]; [task launch]; } rabbitvcs-0.19/clients/pcmanfm-qt/000077500000000000000000000000001445560650400171375ustar00rootroot00000000000000rabbitvcs-0.19/clients/pcmanfm-qt/README000066400000000000000000000013751445560650400200250ustar00rootroot00000000000000RabbitVCS PCManFM-Qt Extension (EXPERIMENTAL!) This extension is meant to be used with the PCManFM-Qt File Manager Please note this extension only consists in menu entries and is not a PCManFM-Qt plugin. As a consequence, RabbitVCS functions are available through PCManFM-Qt contextual menus, but there is no integration with the PCManFM-Qt main window interface. Requirements: * PCManFM-Qt * (all other RabbitVCS requirements) To install it on PCManFM-Qt: Copy all supplied .desktop files to: ~/.local/share/file-manager/actions/ Install the RabbitCVS CLI client into some PATH directory (i.e.: /usr/bin). Troubleshooting: See the known-issues section of our website: http://wiki.rabbitvcs.org/wiki/support/known-issues rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-about.desktop000066400000000000000000000003431445560650400236210ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=About Name=About Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-about.svg Profiles=rabbitvcs_about; [X-Action-Profile rabbitvcs_about] Exec=rabbitvcs about rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-add.desktop000066400000000000000000000003401445560650400232340ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Add... Name=Add... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-add.svg Profiles=rabbitvcs_add; [X-Action-Profile rabbitvcs_add] Exec=rabbitvcs add %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-apply-patch.desktop000066400000000000000000000004161445560650400247320ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Apply patch... Name=Apply patch... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-applypatch.svg Profiles=rabbitvcs_apply_patch; [X-Action-Profile rabbitvcs_apply_patch] Exec=rabbitvcs applypatch %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-branches.desktop000066400000000000000000000003661445560650400243010ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Branches Name=Branches Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-branch.svg Profiles=rabbitvcs_branches; [X-Action-Profile rabbitvcs_branches] Exec=rabbitvcs branches %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-checkout.desktop000066400000000000000000000003761445560650400243220ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Checkout... Name=Checkout... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-checkout.svg Profiles=rabbitvcs_checkout; [X-Action-Profile rabbitvcs_checkout] Exec=rabbitvcs checkout %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-commit.desktop000066400000000000000000000003621445560650400240000ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Commit... Name=Commit... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-commit.svg Profiles=rabbitvcs_commit; [X-Action-Profile rabbitvcs_commit] Exec=rabbitvcs commit %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-create-patch.desktop000066400000000000000000000004241445560650400250470ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Create patch... Name=Create patch... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-createpatch.svg Profiles=rabbitvcs_create_patch; [X-Action-Profile rabbitvcs_create_patch] Exec=rabbitvcs createpatch %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-delete.desktop000066400000000000000000000003541445560650400237530ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Delete Name=Delete Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-delete.svg Profiles=rabbitvcs_delete; [X-Action-Profile rabbitvcs_delete] Exec=rabbitvcs delete %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-directory-clone.desktop000066400000000000000000000003751445560650400256160ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Clone Name=Clone Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-checkout.svg Profiles=rabbitvcs_directory_clone; [X-Action-Profile rabbitvcs_directory_clone] Exec=rabbitvcs clone %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-directory-git-create-repo.desktop000066400000000000000000000004711445560650400275020ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Create repository here Name=Create repository here Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-run.svg Profiles=rabbitvcs_directory_git_create_repo; [X-Action-Profile rabbitvcs_directory_git_create_repo] Exec=rabbitvcs create --vcs git %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-directory-git-menu.desktop000066400000000000000000000010631445560650400262360ustar00rootroot00000000000000[Desktop Entry] Type=Menu Icon=/usr/share/icons/hicolor/scalable/apps/rabbitvcs.svg Name=RabbitVCS Git ... Tooltip=RabbitVCS Git ... MimeTypes=inode/directory; ItemsList=rabbitvcs-apply-patch;rabbitvcs-branches;rabbitvcs-checkout;rabbitvcs-git-clean;rabbitvcs-directory-clone;rabbitvcs-commit;rabbitvcs-create-patch;rabbitvcs-directory-git-create-repo;rabbitvcs-delete;rabbitvcs-export;rabbitvcs-merge;rabbitvcs-directory-push;rabbitvcs-remotes;rabbitvcs-reset;rabbitvcs-revert;rabbitvcs-show-changes;rabbitvcs-show-log;rabbitvcs-tags;rabbitvcs-directory-update; rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-directory-push.desktop000066400000000000000000000003611445560650400254700ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Push Name=Push Icon=/usr/share/icons/hicolor/16x16/actions/rabbitvcs-push.png Profiles=rabbitvcs_directory_push; [X-Action-Profile rabbitvcs_directory_push] Exec=rabbitvcs push %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-directory-svn-cleanup.desktop000066400000000000000000000004261445560650400267460ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Clean up... Name=Clean up... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-cleanup.svg Profiles=rabbitvcs_directory_svn_cleanup; [X-Action-Profile rabbitvcs_directory_svn_cleanup] Exec=rabbitvcs cleanup %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-directory-svn-create-repo.desktop000066400000000000000000000004711445560650400275250ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Create repository here Name=Create repository here Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-run.svg Profiles=rabbitvcs_directory_svn_create_repo; [X-Action-Profile rabbitvcs_directory_svn_create_repo] Exec=rabbitvcs create --vcs svn %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-directory-svn-import.desktop000066400000000000000000000004161445560650400266300ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Import... Name=Import... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-import.svg Profiles=rabbitvcs_directory_svn_import; [X-Action-Profile rabbitvcs_directory_svn_import] Exec=rabbitvcs import %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-directory-svn-menu.desktop000066400000000000000000000013611445560650400262620ustar00rootroot00000000000000[Desktop Entry] Type=Menu Icon=/usr/share/icons/hicolor/scalable/apps/rabbitvcs.svg Name=RabbitVCS SVN ... Tooltip=RabbitVCS SVN ... MimeTypes=inode/directory; ItemsList=rabbitvcs-add;rabbitvcs-apply-patch;rabbitvcs-svn-branch-tag;rabbitvcs-svn-browser;rabbitvcs-svn-check-mods;rabbitvcs-checkout;rabbitvcs-directory-svn-cleanup;rabbitvcs-commit;rabbitvcs-create-patch;rabbitvcs-directory-svn-create-repo;rabbitvcs-delete;rabbitvcs-export;rabbitvcs-svn-get-lock;rabbitvcs-ignore;rabbitvcs-directory-svn-import;rabbitvcs-merge;rabbitvcs-svn-properties;rabbitvcs-svn-release-lock;rabbitvcs-directory-svn-relocate;rabbitvcs-rename;rabbitvcs-svn-resolve;rabbitvcs-revert;rabbitvcs-show-log;rabbitvcs-svn-switch;rabbitvcs-update;rabbitvcs-svn-update-to-rev; rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-directory-svn-relocate.desktop000066400000000000000000000004321445560650400271120ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Relocate... Name=Relocate... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-relocate.svg Profiles=rabbitvcs_directory_svn_relocate; [X-Action-Profile rabbitvcs_directory_svn_relocate] Exec=rabbitvcs relocate %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-export.desktop000066400000000000000000000003621445560650400240310ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Export... Name=Export... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-export.svg Profiles=rabbitvcs_export; [X-Action-Profile rabbitvcs_export] Exec=rabbitvcs export %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-file-annotate.desktop000066400000000000000000000004101445560650400252300ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Annotate... Name=Annotate... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-annotate.svg Profiles=rabbitvcs_file_annotate; [X-Action-Profile rabbitvcs_file_annotate] Exec=rabbitvcs annotate %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-file-edit-conflicts.desktop000066400000000000000000000004441445560650400263350ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Edit conflicts Name=Edit conflicts Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-editconflicts.svg Profiles=rabbitvcs_file_edit_conflicts; [X-Action-Profile rabbitvcs_file_edit_conflicts] Exec=rabbitvcs editconflicts %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-file-git-menu.desktop000066400000000000000000000010441445560650400251500ustar00rootroot00000000000000[Desktop Entry] Type=Menu Icon=/usr/share/icons/hicolor/scalable/apps/rabbitvcs.svg Name=RabbitVCS Git ... Tooltip=RabbitVCS Git ... MimeTypes=all/allfiles; ItemsList=rabbitvcs-add;rabbitvcs-file-annotate;rabbitvcs-apply-patch;rabbitvcs-branches;rabbitvcs-checkout;rabbitvcs-git-clean;rabbitvcs-commit;rabbitvcs-create-patch;rabbitvcs-delete;rabbitvcs-file-edit-conflicts;rabbitvcs-export;rabbitvcs-ignore;rabbitvcs-merge;rabbitvcs-remotes;rabbitvcs-rename;rabbitvcs-reset;rabbitvcs-revert;rabbitvcs-show-changes;rabbitvcs-show-log;rabbitvcs-tags; rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-file-svn-menu.desktop000066400000000000000000000011751445560650400252000ustar00rootroot00000000000000[Desktop Entry] Type=Menu Icon=/usr/share/icons/hicolor/scalable/apps/rabbitvcs.svg Name=RabbitVCS SVN ... Tooltip=RabbitVCS SVN ... MimeTypes=all/allfiles; ItemsList=rabbitvcs-add;rabbitvcs-file-annotate;rabbitvcs-svn-branch-tag;rabbitvcs-svn-browser;rabbitvcs-svn-check-mods;rabbitvcs-commit;rabbitvcs-create-patch;rabbitvcs-delete;rabbitvcs-file-edit-conflicts;rabbitvcs-svn-get-lock;rabbitvcs-ignore;rabbitvcs-merge;rabbitvcs-svn-properties;rabbitvcs-svn-release-lock;rabbitvcs-rename;rabbitvcs-svn-resolve;rabbitvcs-revert;rabbitvcs-show-changes;rabbitvcs-show-log;rabbitvcs-svn-switch;rabbitvcs-update;rabbitvcs-svn-update-to-rev; rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-git-clean.desktop000066400000000000000000000003601445560650400243510ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Clean Name=Clean Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-cleanup.svg Profiles=rabbitvcs_git_clean; [X-Action-Profile rabbitvcs_git_clean] Exec=rabbitvcs clean %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-ignore.desktop000066400000000000000000000002501445560650400237670ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Ignore Name=Ignore Profiles=rabbitvcs_ignore; [X-Action-Profile rabbitvcs_ignore] Exec=rabbitvcs ignore %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-main-menu.desktop000066400000000000000000000004751445560650400244030ustar00rootroot00000000000000[Desktop Entry] Type=Menu Icon=/usr/share/icons/hicolor/scalable/apps/rabbitvcs.svg Name=RabbitVCS ... Tooltip=RabbitVCS ... ItemsList=rabbitvcs-directory-git-menu;rabbitvcs-file-git-menu;rabbitvcs-directory-svn-menu;rabbitvcs-file-svn-menu;rabbitvcs-settings;rabbitvcs-about; MimeTypes=inode/directory;all/allfiles; rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-merge.desktop000066400000000000000000000003541445560650400236100ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Merge... Name=Merge... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-merge.svg Profiles=rabbitvcs_merge; [X-Action-Profile rabbitvcs_merge] Exec=rabbitvcs merge %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-remotes.desktop000066400000000000000000000003641445560650400241700ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Remotes Name=Remotes Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-checkmods.svg Profiles=rabbitvcs_remotes; [X-Action-Profile rabbitvcs_remotes] Exec=rabbitvcs remotes %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-rename.desktop000066400000000000000000000003621445560650400237570ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Rename... Name=Rename... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-rename.svg Profiles=rabbitvcs_rename; [X-Action-Profile rabbitvcs_rename] Exec=rabbitvcs rename %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-reset.desktop000066400000000000000000000003461445560650400236340ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Reset Name=Reset Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-reset.svg Profiles=rabbitvcs_reset; [X-Action-Profile rabbitvcs_reset] Exec=rabbitvcs reset %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-revert.desktop000066400000000000000000000003621445560650400240170ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Revert... Name=Revert... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-revert.svg Profiles=rabbitvcs_revert; [X-Action-Profile rabbitvcs_revert] Exec=rabbitvcs revert %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-settings.desktop000066400000000000000000000003651445560650400243530ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Settings Name=Settings Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-settings.svg Profiles=rabbitvcs_settings; [X-Action-Profile rabbitvcs_settings] Exec=rabbitvcs settings rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-show-changes.desktop000066400000000000000000000004141445560650400250740ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Show Changes... Name=Show Changes... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-changes.svg Profiles=rabbitvcs_show_changes; [X-Action-Profile rabbitvcs_show_changes] Exec=rabbitvcs changes %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-show-log.desktop000066400000000000000000000003631445560650400242500ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Show log Name=Show log Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-show_log.svg Profiles=rabbitvcs_show_log; [X-Action-Profile rabbitvcs_show_log] Exec=rabbitvcs log %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-svn-branch-tag.desktop000066400000000000000000000004121445560650400253160ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Branch/Tag... Name=Branch/Tag... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-branch.svg Profiles=rabbitvcs_svn_branch_tag; [X-Action-Profile rabbitvcs_svn_branch_tag] Exec=rabbitvcs branch %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-svn-browser.desktop000066400000000000000000000004021445560650400247720ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Repo Browser Name=Repo Browser Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-drive.svg Profiles=rabbitvcs_svn_browser; [X-Action-Profile rabbitvcs_svn_browser] Exec=rabbitvcs browser %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-svn-check-mods.desktop000066400000000000000000000004441445560650400253320ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Check for modifications Name=Check for modifications Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-checkmods.svg Profiles=rabbitvcs_svn_check_mods; [X-Action-Profile rabbitvcs_svn_check_mods] Exec=rabbitvcs checkmods %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-svn-get-lock.desktop000066400000000000000000000003761445560650400250260ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Get lock... Name=Get lock... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-lock.svg Profiles=rabbitvcs_svn_get_lock; [X-Action-Profile rabbitvcs_svn_get_lock] Exec=rabbitvcs lock %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-svn-properties.desktop000066400000000000000000000004141445560650400255060ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Properties Name=Properties Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-properties.svg Profiles=rabbitvcs_svn_properties; [X-Action-Profile rabbitvcs_svn_properties] Exec=rabbitvcs properties %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-svn-release-lock.desktop000066400000000000000000000004221445560650400256570ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Release lock... Name=Release lock... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-unlock.svg Profiles=rabbitvcs_svn_release_lock; [X-Action-Profile rabbitvcs_svn_release_lock] Exec=rabbitvcs unlock %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-svn-resolve.desktop000066400000000000000000000004001445560650400247640ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Resolve... Name=Resolve... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-resolve.svg Profiles=rabbitvcs_svn_resolve; [X-Action-Profile rabbitvcs_svn_resolve] Exec=rabbitvcs resolve %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-svn-switch.desktop000066400000000000000000000003721445560650400246160ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Switch... Name=Switch... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-switch.svg Profiles=rabbitvcs_svn_switch; [X-Action-Profile rabbitvcs_svn_switch] Exec=rabbitvcs switch %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-svn-update-to-rev.desktop000066400000000000000000000004421445560650400260070ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Update to revision... Name=Update to revision... Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-update.svg Profiles=rabbitvcs_svn_update_to_rev; [X-Action-Profile rabbitvcs_svn_update_to_rev] Exec=rabbitvcs updateto %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-tags.desktop000066400000000000000000000003421445560650400234440ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Tags Name=Tags Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-branch.svg Profiles=rabbitvcs_tags; [X-Action-Profile rabbitvcs_tags] Exec=rabbitvcs tags %F rabbitvcs-0.19/clients/pcmanfm-qt/rabbitvcs-update.desktop000066400000000000000000000003541445560650400237730ustar00rootroot00000000000000[Desktop Entry] Type=Action TargetToolbar=true ToolbarLabel=Update Name=Update Icon=/usr/share/icons/hicolor/scalable/actions/rabbitvcs-update.svg Profiles=rabbitvcs_update; [X-Action-Profile rabbitvcs_update] Exec=rabbitvcs update %F rabbitvcs-0.19/clients/pluma/000077500000000000000000000000001445560650400162125ustar00rootroot00000000000000rabbitvcs-0.19/clients/pluma/README000066400000000000000000000015011445560650400170670ustar00rootroot00000000000000RabbitVCS Pluma Plugin This plugin is meant to be used with the Pluma Text Editor. It provides the familiar RabbitVCS Context menu in the Tools menu as well as in various context menus. Requirements: * pluma * (all other RabbitVCS requirements) Installation: To install for all users, copy rabbitvcs-plugin.py and rabbitvcs-pluma.plugin to: /usr/lib{64}/pluma/plugins To install for a single user, copy rabbitvcs-plugin.py and rabbitvcs-pluma.plugin to: ~/.local/share/pluma/plugins Troubleshooting: If Pluma supports Python 3 but not Python 2, edit installed file rabbitvcs-pluma.plugin and change line Loader=python to Loader=python3 See the known-issues section of our website: http://wiki.rabbitvcs.org/wiki/support/known-issues rabbitvcs-0.19/clients/pluma/rabbitvcs-plugin.py000066400000000000000000001042601445560650400220420ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs.util.contextmenuitems import * from rabbitvcs.util.contextmenu import ( GtkFilesContextMenuConditions, GtkFilesContextMenuCallbacks, MainContextMenu, MainContextMenuCallbacks, MenuBuilder, GtkContextMenuCaller, ) from rabbitvcs.vcs import create_vcs_instance from gi.repository import Pluma, GObject, Peas from gi.repository import Gtk # # This is a Pluma plugin to allow for RabbitVCS integration in the Pluma # text editor. # # Copyright (C) 2008-2011 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from gettext import gettext as _ import os import gi from rabbitvcs.util import helper gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() # Menu item, insert a new item on the menu bar. ui_str = """ """ class RabbitVCSWindowHelper(GtkContextMenuCaller): _menu_paths = [ # "/MenuBar/RabbitVCSMenu", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Commit", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Update", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Checkout", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Diff", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Diff_Previous_Revision", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Diff_Multiple", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Compare_Tool", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Compare_Tool_Previous_Revision", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Compare_Tool_Multiple", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Diff_Menu/RabbitVCS::Show_Changes", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Show_Log", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Repo_Browser", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Check_For_Modifications", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Add", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Add_To_Ignore_List", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Add_To_Ignore_List/RabbitVCS::Ignore_By_Filename", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Add_To_Ignore_List/RabbitVCS::Ignore_By_File_Extension", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Update_To_Revision", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Rename", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Delete", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Revert", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Edit_Conflicts", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Mark_Resolved", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Get_Lock", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Unlock", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Cleanup", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Annotate", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Export", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Create_Repository", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Import", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Branch_Tag", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Switch", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Merge", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Apply_Patch", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Create_Patch", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Svn/RabbitVCS::Properties", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Update", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Commit", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Push", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Clone", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Initialize_Repository", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Diff", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Diff_Previous_Revision", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Diff_Multiple", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Compare_Tool", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Compare_Tool_Previous_Revision", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Compare_Tool_Multiple", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Diff_Menu/RabbitVCS::Show_Changes", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Show_Log", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Stage", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Unstage", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Add_To_Ignore_List", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Add_To_Ignore_List/RabbitVCS::Ignore_By_Filename", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Add_To_Ignore_List/RabbitVCS::Ignore_By_File_Extension", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Rename", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Delete", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Revert", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Edit_Conflicts", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Clean", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Reset", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Checkout", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Branches", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Tags", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Remotes", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Export", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Merge", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Annotate", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Apply_Patch", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::RabbitVCS_Git/RabbitVCS::Create_Patch", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::Settings", "/MenuBar/ExtraMenu_1/RabbitVCSMenu/RabbitVCS::About", ] _default_base_dir = os.path.expanduser("~") def __init__(self, plugin, window): self._window = window self._plugin = plugin self.base_dir = self._default_base_dir self._menubar_menu = None self._menu_action = None self.vcs_client = create_vcs_instance() # Insert menu items self._insert_menu() def deactivate(self): # Remove any installed menu items self._remove_menu() self._window = None self.base_dir = None self._plugin = None self._menubar_menu = None self._action_group = None def _insert_menu(self): # Get the GtkUIManager manager = self._window.get_ui_manager() self._menubar_menu = PlumaMenu( self, self.vcs_client, self.base_dir, [self._get_document_path()] ) self._menu_action = Gtk.Action( name="RabbitVCSMenu", label="RabbitVCS", tooltip=_("Excellent Version Control"), stock_id=None, ) self._action_group = Gtk.ActionGroup("RabbitVCSActions") self._action_group = self._menubar_menu.get_action_group(self._action_group) self._action_group.add_action(self._menu_action) # Insert the action group manager.insert_action_group(self._action_group, 0) # Merge the UI self._ui_id = manager.add_ui_from_string(ui_str) def _remove_menu(self): # Get the GtkUIManager manager = self._window.get_ui_manager() # Remove the ui manager.remove_ui(self._ui_id) # Remove the action group manager.remove_action_group(self._action_group) # Make sure the manager updates manager.ensure_update() def update_ui(self): self.update_base_dir() document = self._window.get_active_document() self._action_group.set_sensitive(document != None) if document != None: manager = self._window.get_ui_manager() manager.get_widget("/MenuBar/ExtraMenu_1/RabbitVCSMenu").set_sensitive(True) self._menubar_menu.set_paths([self._get_document_path()]) self._determine_menu_sensitivity([self._get_document_path()]) def connect_view(self, view, id_name): handler_id = view.connect("populate-popup", self.on_view_populate_popup) setattr(view, id_name, [handler_id]) def disconnect_view(self, view, id_name): view.disconnect(getattr(view, id_name)[0]) def on_view_populate_popup(self, view, menu): separator = Gtk.SeparatorMenuItem() menu.append(separator) separator.show() context_menu = PlumaMainContextMenu( self, self.vcs_client, self.base_dir, [self._get_document_path()] ).get_menu() for context_menu_item in context_menu: menu.append(context_menu_item) def _get_document_path(self): document = self._window.get_active_document() path = self.base_dir if document: tmp_path = document.get_uri_for_display() if os.path.exists(tmp_path): path = tmp_path return path def update_base_dir(self): document = self._window.get_active_document() if document: path = document.get_uri_for_display() if os.path.exists(path): self.base_dir = os.path.dirname(path) else: self.base_dir = self._default_base_dir self._menubar_menu.set_base_dir(self.base_dir) def _determine_menu_sensitivity(self, paths): self._menubar_menu.update_conditions(paths) manager = self._window.get_ui_manager() for menu_path in self._menu_paths: # Gtk3 changes how we access a widget's action. Get it from the # UI Manager instead of the widget directly if hasattr(manager, "get_action"): action = manager.get_action(menu_path) else: widget = manager.get_widget(menu_path) action = widget.get_action() self._menubar_menu.update_action(action) # Menu activate handlers def reload_settings(self, proc): self.update_ui() def on_context_menu_command_finished(self): self.update_ui() class RabbitVCSPlumaPlugin(GObject.Object, Peas.Activatable): __gtype_name__ = "RabbitVCSPlumaPlugin" object = GObject.property(type=GObject.Object) def __init__(self): GObject.Object.__init__(self) self._instances = {} self.id_name = "RabbitVCSContextMenuID" def do_activate(self): self._instances[self.object] = RabbitVCSWindowHelper(self, self.object) handler_ids = [] for signal in ("tab-added", "tab-removed"): method = getattr(self, "on_window_" + signal.replace("-", "_")) handler_ids.append(self.object.connect(signal, method)) setattr(self.object, self.id_name, handler_ids) if self.object in self._instances: for view in self.object.get_views(): self._instances[self.object].connect_view(view, self.id_name) def do_deactivate(self): widgets = [self.object] + self.object.get_views() for widget in widgets: handler_ids = getattr(widget, self.id_name) if handler_ids is not None: for handler_id in handler_ids: widget.disconnect(handler_id) setattr(widget, self.id_name, None) if self.object in self._instances: self._instances[self.object].deactivate() del self._instances[self.object] def do_update_state(self): self.update_ui() def update_ui(self): if self.object in self._instances: self._instances[self.object].update_ui() def on_window_tab_added(self, window, tab): if window in self._instances: self._instances[window].connect_view(tab.get_view(), self.id_name) def on_window_tab_removed(self, window, tab): if window in self._instances: self._instances[window].disconnect_view(tab.get_view(), self.id_name) class MenuIgnoreByFilename(MenuItem): identifier = "RabbitVCS::Ignore_By_Filename" label = _("Ignore by File Name") tooltip = _("Ignore item by filename") class MenuIgnoreByFileExtension(MenuItem): identifier = "RabbitVCS::Ignore_By_File_Extension" label = _("Ignore by File Extension") tooltip = _("Ignore item by extension") class PlumaMenuBuilder(object): """ Generalised menu builder class. Subclasses must provide: make_menu_item(self, item, id_magic) - create the menu item for whatever toolkit (usually this should be just call a convenience method on the MenuItem instance). attach_submenu(self, menu_node, submenu_list) - given a list of whatever make_menu_item(...) returns, create a submenu and attach it to the given node. top_level_menu(self, items) - in some circumstances we need to treat the top level menu differently (eg. Nautilus, because Xenu said so). This processes a list of menu items returned by make_menu_item(...) to create the overall menu. """ def __init__(self, structure, conditions, callbacks, action_group): """ @param structure: Menu structure @type structure: list Note on "structure". The menu structure is defined in a list of tuples of two elements each. The first element is a class - the MenuItem subclass that defines the menu interface (see below). The second element is either None (if there is no submenu) or a list of tuples if there is a submenu. The submenus are generated recursively. FYI, this is a list of tuples so that we retain the desired menu item order (dicts do not retain order) Example: [ (MenuClassOne, [ (MenuClassOneSubA, (MenuClassOneSubB ]), (MenuClassTwo, (MenuClassThree ] """ self.action_group = action_group for item_class in structure: item = item_class(conditions, callbacks) default_name = MenuItem.make_default_name(item.identifier) action = Gtk.Action(item.identifier, item.label, item.tooltip, item.icon) if item.icon and hasattr(action, "set_icon_name"): action.set_icon_name(item.icon) if item.callback: if item.callback_args: action.connect("activate", item.callback, item.callback_args) else: action.connect("activate", item.callback) action.set_property("visible", item.show()) setattr(action, "item", item) self.action_group.add_action(action) def _get_function(self, object, name): function = None if hasattr(object, name): attr = getattr(object, name) if callable(attr): function = attr return function class PlumaMenu(object): def __init__(self, caller, vcs_client, base_dir, paths): """ @param caller: The calling object @type caller: RabbitVCS extension @param vcs_client: The vcs client @type vcs_client: rabbitvcs.vcs @param base_dir: The curent working directory @type base_dir: string @param paths: The selected paths @type paths: list @param conditions: The conditions class that determines menu item visibility @kind conditions: ContextMenuConditions @param callbacks: The callbacks class that determines what actions are taken @kind callbacks: ContextMenuCallbacks """ self.caller = caller self.paths = paths self.base_dir = base_dir self.vcs_client = vcs_client self.conditions = GtkFilesContextMenuConditions(self.vcs_client, self.paths) self.callbacks = GtkFilesContextMenuCallbacks( self.caller, self.base_dir, self.vcs_client, self.paths ) self.structure = [ MenuRabbitVCSSvn, MenuRabbitVCSGit, MenuCheckout, MenuUpdate, MenuCommit, MenuPush, MenuInitializeRepository, MenuClone, MenuRabbitVCS, MenuDiffMenu, MenuDiff, MenuDiffPrevRev, MenuDiffMultiple, MenuCompareTool, MenuCompareToolPrevRev, MenuCompareToolMultiple, MenuShowChanges, MenuShowLog, MenuRepoBrowser, MenuCheckForModifications, MenuAdd, MenuStage, MenuUnstage, MenuAddToIgnoreList, MenuUpdateToRevision, MenuRename, MenuDelete, MenuRevert, MenuEditConflicts, MenuMarkResolved, MenuRelocate, MenuGetLock, MenuUnlock, MenuClean, MenuReset, MenuCleanup, MenuExport, MenuCreateRepository, MenuImport, MenuBranches, MenuTags, MenuRemotes, MenuBranchTag, MenuSwitch, MenuMerge, MenuAnnotate, MenuCreatePatch, MenuApplyPatch, MenuProperties, MenuHelp, MenuSettings, MenuAbout, MenuIgnoreByFilename, MenuIgnoreByFileExtension, ] def set_paths(self, paths): self.paths = paths self.conditions.paths = paths self.callbacks.paths = paths def set_base_dir(self, base_dir): self.base_dir = base_dir self.callbacks.base_dir = base_dir self.conditions.base_dir = base_dir def get_action_group(self, action_group): return PlumaMenuBuilder( self.structure, self.conditions, self.callbacks, action_group ).action_group def update_conditions(self, paths): self.conditions.generate_statuses(paths) self.conditions.generate_path_dict(paths) def update_action(self, action): action.set_property("visible", action.item.show()) class PlumaContextMenu(MenuBuilder): """ Provides a standard Gtk context menu (ie. a list of Gtk.MenuItem"s). """ signal = "activate" def make_menu_item(self, item, id_magic): return item.make_gtk3_menu_item(id_magic) def attach_submenu(self, menu_node, submenu_list): submenu = Gtk.Menu() menu_node.set_submenu(submenu) [submenu.append(item) for item in submenu_list] def top_level_menu(self, items): return items class PlumaMainContextMenu(MainContextMenu): def __init__( self, caller, vcs_client, base_dir, paths=[], conditions=None, callbacks=None ): """ @param caller: The calling object @type caller: RabbitVCS extension @param vcs_client: The vcs client @type vcs_client: rabbitvcs.vcs @param base_dir: The curent working directory @type base_dir: string @param paths: The selected paths @type paths: list @param conditions: The conditions class that determines menu item visibility @kind conditions: ContextMenuConditions @param callbacks: The callbacks class that determines what actions are taken @kind callbacks: ContextMenuCallbacks """ self.caller = caller self.paths = paths self.base_dir = base_dir self.vcs_client = vcs_client self.conditions = conditions if self.conditions is None: self.conditions = GtkFilesContextMenuConditions(self.vcs_client, paths) self.callbacks = callbacks if self.callbacks is None: self.callbacks = MainContextMenuCallbacks( self.caller, self.base_dir, self.vcs_client, paths ) ignore_items = get_ignore_list_items(paths) # The first element of each tuple is a key that matches a # ContextMenuItems item. The second element is either None when there # is no submenu, or a recursive list of tuples for desired submenus. self.structure = [ (MenuUpdate, None), (MenuCommit, None), (MenuPush, None), ( MenuRabbitVCSSvn, [ (MenuCheckout, None), ( MenuDiffMenu, [ (MenuDiff, None), (MenuDiffPrevRev, None), (MenuDiffMultiple, None), (MenuCompareTool, None), (MenuCompareToolPrevRev, None), (MenuCompareToolMultiple, None), (MenuShowChanges, None), ], ), (MenuShowLog, None), (MenuRepoBrowser, None), (MenuCheckForModifications, None), (MenuSeparator, None), (MenuAdd, None), (MenuAddToIgnoreList, ignore_items), (MenuSeparator, None), (MenuUpdateToRevision, None), (MenuRename, None), (MenuDelete, None), (MenuRevert, None), (MenuEditConflicts, None), (MenuMarkResolved, None), (MenuRelocate, None), (MenuGetLock, None), (MenuUnlock, None), (MenuCleanup, None), (MenuSeparator, None), (MenuExport, None), (MenuCreateRepository, None), (MenuImport, None), (MenuSeparator, None), (MenuBranchTag, None), (MenuSwitch, None), (MenuMerge, None), (MenuSeparator, None), (MenuAnnotate, None), (MenuSeparator, None), (MenuCreatePatch, None), (MenuApplyPatch, None), (MenuProperties, None), (MenuSeparator, None), (MenuSettings, None), (MenuAbout, None), ], ), ( MenuRabbitVCSGit, [ (MenuClone, None), (MenuInitializeRepository, None), (MenuSeparator, None), ( MenuDiffMenu, [ (MenuDiff, None), (MenuDiffPrevRev, None), (MenuDiffMultiple, None), (MenuCompareTool, None), (MenuCompareToolPrevRev, None), (MenuCompareToolMultiple, None), (MenuShowChanges, None), ], ), (MenuShowLog, None), (MenuStage, None), (MenuUnstage, None), (MenuAddToIgnoreList, ignore_items), (MenuSeparator, None), (MenuRename, None), (MenuDelete, None), (MenuRevert, None), (MenuEditConflicts, None), (MenuClean, None), (MenuReset, None), (MenuCheckout, None), (MenuSeparator, None), (MenuBranches, None), (MenuTags, None), (MenuRemotes, None), (MenuSeparator, None), (MenuExport, None), (MenuMerge, None), (MenuSeparator, None), (MenuAnnotate, None), (MenuSeparator, None), (MenuCreatePatch, None), (MenuApplyPatch, None), (MenuSeparator, None), (MenuSettings, None), (MenuAbout, None), ], ), ] def get_menu(self): return PlumaContextMenu(self.structure, self.conditions, self.callbacks).menu rabbitvcs-0.19/clients/pluma/rabbitvcs-pluma.plugin000066400000000000000000000003351445560650400225260ustar00rootroot00000000000000[Plugin] Loader=python Module=rabbitvcs-plugin IAge=2 Name=RabbitVCS Description=RabbitVCS plugin for Pluma Authors=Adam Plumb Copyright=Copyright Š 2011 Adam Plumb Website=http://www.rabbitvcs.org rabbitvcs-0.19/clients/thunar/000077500000000000000000000000001445560650400163755ustar00rootroot00000000000000rabbitvcs-0.19/clients/thunar/README000066400000000000000000000021771445560650400172640ustar00rootroot00000000000000RabbitVCS Thunar Gtk+3 Extension This extension is meant to be used with the Thunar File Manager v1.7 or higher. As of the v1.7 release, Thunar requires Gtk+3 and allows for Python3, so this client makes sure it can work with both. Bear in mind that Thunar's extension framework still does not allow the setting of emblems so file statuses will not be overlayed like they do on Nautilus. Requirements: * thunar (>= v1.7) * thunarx-python (>= v0.5.0) * dbus-python (>= 0.80) * gir1.2-thunarx-3.0 * (all other RabbitVCS requirements) To install: Copy RabbitVCS.py to one of: 1. $XDG_DATA_HOME/thunarx-python/extensions (i.e. ~/.local) 2. thunar_prefix/share/thunarx-python/extensions (i.e. ~/Development/Thunar) 3. $XDG_DATA_DIRS/thunarx-python/extensions (i.e. /usr/share) 4. THUNARX_EXTENSION_DIR/python (i.e. /usr/lib64/thunarx-3/python) In both cases, you may need to create the python folder. Some systems like Fedora use /usr/lib64 on 64-bit systems. Troubleshooting: See the known-issues section of our website: http://wiki.rabbitvcs.org/wiki/support/known-issues rabbitvcs-0.19/clients/thunar/RabbitVCS.py000066400000000000000000000265621445560650400205410ustar00rootroot00000000000000# # This is an extension to the Thunar file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2008-2008 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Our module for everything related to the Thunar extension. """ from __future__ import with_statement from __future__ import absolute_import from rabbitvcs.util.contextmenuitems import * from rabbitvcs.services.checkerservice import StatusCheckerStub as StatusChecker import rabbitvcs.services.service from rabbitvcs.util.settings import SettingsManager from rabbitvcs import gettext from rabbitvcs.util.log import Log, reload_log_settings from rabbitvcs.util.contextmenu import MenuBuilder, MainContextMenu from rabbitvcs.util.decorators import timeit from rabbitvcs.util.strings import S from rabbitvcs.util.helper import pretty_timedelta from rabbitvcs.util.helper import get_file_extension, get_common_directory from rabbitvcs.util.helper import launch_ui_window, launch_diff_tool import rabbitvcs.ui.property_page import rabbitvcs.ui from rabbitvcs.vcs.svn import SVN from gi.repository import GObject, Thunarx import copy import os.path from os.path import realpath import threading from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.util.extensions.thunarx.RabbitVCS") _ = gettext.gettext settings = SettingsManager() class RabbitVCS(GObject.GObject, Thunarx.MenuProvider, Thunarx.PropertyPageProvider): """ This is the main class that implements all of our awesome features. """ #: Maps statuses to emblems. #: TODO: should probably be possible to create this dynamically EMBLEMS = rabbitvcs.ui.STATUS_EMBLEMS #: A list of statuses which count as modified (for a directory) in #: TortoiseSVN emblem speak. MODIFIED_STATUSES = [ SVN.STATUS["added"], SVN.STATUS["deleted"], SVN.STATUS["replaced"], SVN.STATUS["modified"], SVN.STATUS["missing"], ] MODIFIED_TEXT_STATUSES = ["added", "deleted", "replaced", "modified", "missing"] #: This is our lookup table for C{NautilusVFSFile}s which we need for attaching #: emblems. This is mostly a workaround for not being able to turn a path/uri #: into a C{VFSFile}. It looks like::: #: #: VFSFile_table = { #: "/foo/bar/baz": #: #: } #: #: Keeping track of C{NautilusVFSFile}s is a little bit complicated because #: when an item is moved (renamed) C{update_file_info} doesn't get called. So #: we also add C{NautilusVFSFile}s to this table from C{get_file_items} etc. VFSFile_table = {} #: Without an actual status monitor it's not possible to just keep #: track of stuff that happens (e.g. a commit happens, files are added, #: such things). So at the moment we just add all interesting items #: to this list. monitored_files = [] #: This is in case we want to permanently enable invalidation of the status #: checker info. We put a path here before we invalidate the item, so that #: we don't enter an endless loop when updating the status. #: The callback should acquire this lock when pushing the path to this. always_invalidate = True #: When we get the statuses from the callback, but them here for further #: use. There is a possible memory problem here if we put a lot of data in #: this - even when it's removed, Python may not release the memory. I do #: not know this for sure. #: This is of the form: [("path/to", {...status dict...}), ...] paths_from_callback = [] paths_last_lookup = {} paths_lookup_timeout = 30 #: It appears that the "update_file_info" call that is triggered by the #: "invalidate_extension_info" in the callback function happens #: synchronously (ie. in the same thread). However, given the nature of the #: python/nautilus extensions module, I'm not sure how reliable this is. #: It's certainly supported by debugging statements, but maybe it will #: change in the future? Who knows. This should work for both the current #: situation, and the possibility that they are asynchronous. callback_paths_lock = threading.RLock() #: A list of statuses that we want to keep track of for when a process #: might have done something. STATUSES_TO_MONITOR = copy.copy(MODIFIED_TEXT_STATUSES) STATUSES_TO_MONITOR.extend( [ "unversioned", # When doing a checkout Nautilus will notice a directory being # added and call update_file_info, but at that stage the # checkout likely hasn't completed yet and the status will be: "incomplete", ] ) def __init__(self): threading.currentThread().setName("RabbitVCS extension thread") self.status_checker = StatusChecker() def get_local_path(self, item): if item.get_uri_scheme() != "file": return None return item.get_location().get_path() # ~ @disable # @timeit def get_file_menu_items(self, window, items): """ Menu activated with items selected. Nautilus also calls this function when rendering submenus, even though this is not needed since the entire menu has already been returned. Note that calling C{nautilusVFSFile.invalidate_extension_info()} will also cause get_file_items to be called. @type window: NautilusNavigationWindow @param window: @type items: list of NautilusVFSFile @param items: @rtype: list of MenuItems @return: The context menu entries to add to the menu. """ paths = [] for item in items: if self.valid_uri(item.get_uri()): path = realpath(S(self.get_local_path(item))) paths.append(path) self.VFSFile_table[path] = item if len(paths) == 0: return [] return ThunarxMainContextMenu(self, window.base_dir, paths).get_menu() # ~ @disable @timeit def get_folder_menu_items(self, window, item): """ Menu activated on entering a directory. Builds context menu for File menu and for window background. @type window: NautilusNavigationWindow @param window: @type item: NautilusVFSFile @param item: @rtype: list of MenuItems @return: The context menu entries to add to the menu. """ if not self.valid_uri(item.get_uri()): return path = realpath(S(self.get_local_path(item))) self.VFSFile_table[path] = item # log.debug("get_background_items() called") window.base_dir = path return ThunarxMainContextMenu(self, path, [path]).get_menu() # # Helper functions # def valid_uri(self, uri): """ Check whether or not it's a good idea to have RabbitVCS do its magic for this URI. Some examples of URI schemes: x-nautilus-desktop:/// # e.g. mounted devices on the desktop """ if not uri.startswith("file://"): return False return True # # Some methods to help with keeping emblems up-to-date # def rescan_after_process_exit(self, proc, paths): """ Rescans all of the items on our C{monitored_files} list after the process specified by C{proc} completes. Also checks the paths that were passed. TODO: the monitored_files list could grow quite large if somebody browses a lot of working copies. It probably won't affect anything (most importantly performance) all that negatively. """ def do_check(): # We'll check the paths first (these were the paths that # were originally passed along to the context menu). # # This is needed among other things for: # # - When a directory is normal and you add files inside it # for path in paths: # We're not interested in the result now, just the callback self.status_checker.check_status( path, recurse=True, invalidate=True, summary=True ) self.execute_after_process_exit(proc, do_check) def execute_after_process_exit(self, proc, func=None): def is_process_still_alive(): log.debug("is_process_still_alive() for pid: %i" % proc.pid) # First we need to see if the commit process is still running retval = proc.poll() log.debug("%s" % retval) still_going = retval is None if not still_going and callable(func): func() return still_going # Add our callback function on a 1 second timeout GObject.timeout_add_seconds(1, is_process_still_alive) # # Some other methods # def reload_settings(self, proc): """ Used to re-load settings after the settings dialog has been closed. FIXME: This probably doesn't belong here, ideally the settings manager does this itself and make sure everything is reloaded properly after the settings dialogs saves. """ def do_reload_settings(): globals()["settings"] = SettingsManager() globals()["log"] = reload_log_settings()("rabbitvcs.util.extensions.thunar") log.debug("Re-scanning settings") self.execute_after_process_exit(proc, do_reload_settings) def get_property_pages(self, items): paths = [] for item in items: if self.valid_uri(item.get_uri()): path = realpath(S(self.get_local_path(item))) paths.append(path) self.VFSFile_table[path] = item if len(paths) == 0: return [] label = rabbitvcs.ui.property_page.PropertyPageLabel().get_widget() page = rabbitvcs.ui.property_page.PropertyPage(paths).get_widget() ppage = Thunarx.PropertyPage.new("") ppage.set_label_widget(label) ppage.add(page) return [ppage] class ThunarxContextMenu(MenuBuilder): """ Provides a standard Thunar context menu (ie. a list of "Thunarx.MenuItem"s). """ signal = "activate" def make_menu_item(self, item, id_magic): return item.make_thunarx_menu_item(id_magic) def attach_submenu(self, menu_node, submenu_list): submenu = Thunarx.Menu() menu_node.set_menu(submenu) [submenu.append_item(item) for item in submenu_list] def top_level_menu(self, items): return items class ThunarxMainContextMenu(MainContextMenu): def get_menu(self): return ThunarxContextMenu(self.structure, self.conditions, self.callbacks).menu rabbitvcs-0.19/data/000077500000000000000000000000001445560650400143445ustar00rootroot00000000000000rabbitvcs-0.19/data/icons/000077500000000000000000000000001445560650400154575ustar00rootroot00000000000000rabbitvcs-0.19/data/icons/hicolor/000077500000000000000000000000001445560650400171165ustar00rootroot00000000000000rabbitvcs-0.19/data/icons/hicolor/16x16/000077500000000000000000000000001445560650400177035ustar00rootroot00000000000000rabbitvcs-0.19/data/icons/hicolor/16x16/actions/000077500000000000000000000000001445560650400213435ustar00rootroot00000000000000rabbitvcs-0.19/data/icons/hicolor/16x16/actions/rabbitvcs-push.png000066400000000000000000000011051445560650400250020ustar00rootroot00000000000000‰PNG  IHDRķ˙asBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<ÂIDAT8cü˙˙?%€‰"Ũ ,0FØęÕĖō?ԅ|ũĨÅúũ÷ÉžBËī$ĀũDŧTI‹ë˙‰Ëoõ^Ŋũø€ámîę§?~ū’úĪČd{ffäŧ^xūâ}´ 7kĀ÷¯ßíŪŧũĸĮĀĀĀđãį/Љ…Ž Œ˙˙6I_nƒ×€ˇīŋčđqą›™éČJ333ךe/````øņ‡ar‘NCČČđ™É@E”ŅŲLI‘ķ ';ćw^}Ãi#,-ŗVÜˏ°P|˙ũ/'+ƒ” 'ÃŊ—_n<ųÄ ¯(Ā *ÎÍÛˇ‹9Lā.ø˙˙˙Ęũgî˙PãføđõÞË/vœÎpũÉ'†˙ |`x÷íCSšã˙‡õãsŖÄŸŸë.Ūfđūõ៊ĩ§ƒļ(  B\, š}ûū32Ų^\ũÅ :aĢŲx„ūT021&ũųûW–“…Š!͑áŲûī *b\·9'6I]ōīĨ—˙_õß$uÉã´e6čj&eė6ŖĮ6`šļô?NÍ PœIæ ØR-IENDŽB`‚rabbitvcs-0.19/data/icons/hicolor/index.theme000066400000000000000000000533531445560650400212620ustar00rootroot00000000000000[Icon Theme] Name=Hicolor Comment=Fallback icon theme Hidden=true Directories=16x16/actions,16x16/animations,16x16/apps,16x16/categories,16x16/devices,16x16/emblems,16x16/emotes,16x16/filesystems,16x16/intl,16x16/mimetypes,16x16/places,16x16/status,16x16/stock/chart,16x16/stock/code,16x16/stock/data,16x16/stock/form,16x16/stock/image,16x16/stock/io,16x16/stock/media,16x16/stock/navigation,16x16/stock/net,16x16/stock/object,16x16/stock/table,16x16/stock/text,22x22/actions,22x22/animations,22x22/apps,22x22/categories,22x22/devices,22x22/emblems,22x22/emotes,22x22/filesystems,22x22/intl,22x22/mimetypes,22x22/places,22x22/status,22x22/stock/chart,22x22/stock/code,22x22/stock/data,22x22/stock/form,22x22/stock/image,22x22/stock/io,22x22/stock/media,22x22/stock/navigation,22x22/stock/net,22x22/stock/object,22x22/stock/table,22x22/stock/text,24x24/actions,24x24/animations,24x24/apps,24x24/categories,24x24/devices,24x24/emblems,24x24/emotes,24x24/filesystems,24x24/intl,24x24/mimetypes,24x24/places,24x24/status,24x24/stock/chart,24x24/stock/code,24x24/stock/data,24x24/stock/form,24x24/stock/image,24x24/stock/io,24x24/stock/media,24x24/stock/navigation,24x24/stock/net,24x24/stock/object,24x24/stock/table,24x24/stock/text,32x32/actions,32x32/animations,32x32/apps,32x32/categories,32x32/devices,32x32/emblems,32x32/emotes,32x32/filesystems,32x32/intl,32x32/mimetypes,32x32/places,32x32/status,32x32/stock/chart,32x32/stock/code,32x32/stock/data,32x32/stock/form,32x32/stock/image,32x32/stock/io,32x32/stock/media,32x32/stock/navigation,32x32/stock/net,32x32/stock/object,32x32/stock/table,32x32/stock/text,36x36/actions,36x36/animations,36x36/apps,36x36/categories,36x36/devices,36x36/emblems,36x36/emotes,36x36/filesystems,36x36/intl,36x36/mimetypes,36x36/places,36x36/status,36x36/stock/chart,36x36/stock/code,36x36/stock/data,36x36/stock/form,36x36/stock/image,36x36/stock/io,36x36/stock/media,36x36/stock/navigation,36x36/stock/net,36x36/stock/object,36x36/stock/table,36x36/stock/text,48x48/actions,48x48/animations,48x48/apps,48x48/categories,48x48/devices,48x48/emblems,48x48/emotes,48x48/filesystems,48x48/intl,48x48/mimetypes,48x48/places,48x48/status,48x48/stock/chart,48x48/stock/code,48x48/stock/data,48x48/stock/form,48x48/stock/image,48x48/stock/io,48x48/stock/media,48x48/stock/navigation,48x48/stock/net,48x48/stock/object,48x48/stock/table,48x48/stock/text,64x64/actions,64x64/animations,64x64/apps,64x64/categories,64x64/devices,64x64/emblems,64x64/emotes,64x64/filesystems,64x64/intl,64x64/mimetypes,64x64/places,64x64/status,64x64/stock/chart,64x64/stock/code,64x64/stock/data,64x64/stock/form,64x64/stock/image,64x64/stock/io,64x64/stock/media,64x64/stock/navigation,64x64/stock/net,64x64/stock/object,64x64/stock/table,64x64/stock/text,72x72/actions,72x72/animations,72x72/apps,72x72/categories,72x72/devices,72x72/emblems,72x72/emotes,72x72/filesystems,72x72/intl,72x72/mimetypes,72x72/places,72x72/status,72x72/stock/chart,72x72/stock/code,72x72/stock/data,72x72/stock/form,72x72/stock/image,72x72/stock/io,72x72/stock/media,72x72/stock/navigation,72x72/stock/net,72x72/stock/object,72x72/stock/table,72x72/stock/text,96x96/actions,96x96/animations,96x96/apps,96x96/categories,96x96/devices,96x96/emblems,96x96/emotes,96x96/filesystems,96x96/intl,96x96/mimetypes,96x96/places,96x96/status,96x96/stock/chart,96x96/stock/code,96x96/stock/data,96x96/stock/form,96x96/stock/image,96x96/stock/io,96x96/stock/media,96x96/stock/navigation,96x96/stock/net,96x96/stock/object,96x96/stock/table,96x96/stock/text,128x128/actions,128x128/animations,128x128/apps,128x128/categories,128x128/devices,128x128/emblems,128x128/emotes,128x128/filesystems,128x128/intl,128x128/mimetypes,128x128/places,128x128/status,128x128/stock/chart,128x128/stock/code,128x128/stock/data,128x128/stock/form,128x128/stock/image,128x128/stock/io,128x128/stock/media,128x128/stock/navigation,128x128/stock/net,128x128/stock/object,128x128/stock/table,128x128/stock/text,192x192/actions,192x192/animations,192x192/apps,192x192/categories,192x192/devices,192x192/emblems,192x192/emotes,192x192/filesystems,192x192/intl,192x192/mimetypes,192x192/places,192x192/status,192x192/stock/chart,192x192/stock/code,192x192/stock/data,192x192/stock/form,192x192/stock/image,192x192/stock/io,192x192/stock/media,192x192/stock/navigation,192x192/stock/net,192x192/stock/object,192x192/stock/table,192x192/stock/text,scalable/actions,scalable/animations,scalable/apps,scalable/categories,scalable/devices,scalable/emblems,scalable/emotes,scalable/filesystems,scalable/intl,scalable/mimetypes,scalable/places,scalable/status,scalable/stock/chart,scalable/stock/code,scalable/stock/data,scalable/stock/form,scalable/stock/image,scalable/stock/io,scalable/stock/media,scalable/stock/navigation,scalable/stock/net,scalable/stock/object,scalable/stock/table,scalable/stock/text [16x16/actions] Size=16 Context=Actions Type=Threshold [16x16/animations] Size=16 Context=Animations Type=Threshold [16x16/apps] Size=16 Context=Applications Type=Threshold [16x16/categories] Size=16 Context=Categories Type=Threshold [16x16/devices] Size=16 Context=Devices Type=Threshold [16x16/emblems] Size=16 Context=Emblems Type=Threshold [16x16/emotes] Size=16 Context=Emotes Type=Threshold [16x16/filesystems] Size=16 Context=FileSystems Type=Threshold [16x16/intl] Size=16 Context=International Type=Threshold [16x16/mimetypes] Size=16 Context=MimeTypes Type=Threshold [16x16/places] Size=16 Context=Places Type=Threshold [16x16/status] Size=16 Context=Status Type=Threshold [16x16/stock/chart] Size=16 Context=Stock Type=Threshold [16x16/stock/code] Size=16 Context=Stock Type=Threshold [16x16/stock/data] Size=16 Context=Stock Type=Threshold [16x16/stock/form] Size=16 Context=Stock Type=Threshold [16x16/stock/image] Size=16 Context=Stock Type=Threshold [16x16/stock/io] Size=16 Context=Stock Type=Threshold [16x16/stock/media] Size=16 Context=Stock Type=Threshold [16x16/stock/navigation] Size=16 Context=Stock Type=Threshold [16x16/stock/net] Size=16 Context=Stock Type=Threshold [16x16/stock/object] Size=16 Context=Stock Type=Threshold [16x16/stock/table] Size=16 Context=Stock Type=Threshold [16x16/stock/text] Size=16 Context=Stock Type=Threshold [22x22/actions] Size=22 Context=Actions Type=Threshold [22x22/animations] Size=22 Context=Animations Type=Threshold [22x22/apps] Size=22 Context=Applications Type=Fixed [22x22/categories] Size=22 Context=Categories Type=Threshold [22x22/devices] Size=22 Context=Devices Type=Threshold [22x22/emblems] Size=22 Context=Emblems Type=Threshold [22x22/emotes] Size=22 Context=Emotes Type=Threshold [22x22/filesystems] Size=22 Context=FileSystems Type=Threshold [22x22/intl] Size=22 Context=International Type=Threshold [22x22/mimetypes] Size=22 Context=MimeTypes Type=Threshold [22x22/places] Size=22 Context=Places Type=Threshold [22x22/status] Size=22 Context=Status Type=Threshold [22x22/stock/chart] Size=22 Context=Stock Type=Threshold [22x22/stock/code] Size=22 Context=Stock Type=Threshold [22x22/stock/data] Size=22 Context=Stock Type=Threshold [22x22/stock/form] Size=22 Context=Stock Type=Threshold [22x22/stock/image] Size=22 Context=Stock Type=Threshold [22x22/stock/io] Size=22 Context=Stock Type=Threshold [22x22/stock/media] Size=22 Context=Stock Type=Threshold [22x22/stock/navigation] Size=22 Context=Stock Type=Threshold [22x22/stock/net] Size=22 Context=Stock Type=Threshold [22x22/stock/object] Size=22 Context=Stock Type=Threshold [22x22/stock/table] Size=22 Context=Stock Type=Threshold [22x22/stock/text] Size=22 Context=Stock Type=Threshold [24x24/actions] Size=24 Context=Actions Type=Threshold [24x24/animations] Size=24 Context=Animations Type=Threshold [24x24/apps] Size=24 Context=Applications Type=Threshold [24x24/categories] Size=24 Context=Categories Type=Threshold [24x24/devices] Size=24 Context=Devices Type=Threshold [24x24/emblems] Size=24 Context=Emblems Type=Threshold [24x24/emotes] Size=24 Context=Emotes Type=Threshold [24x24/filesystems] Size=24 Context=FileSystems Type=Threshold [24x24/intl] Size=24 Context=International Type=Threshold [24x24/mimetypes] Size=24 Context=MimeTypes Type=Threshold [24x24/places] Size=24 Context=Places Type=Threshold [24x24/status] Size=24 Context=Status Type=Threshold [24x24/stock/chart] Size=24 Context=Stock Type=Threshold [24x24/stock/code] Size=24 Context=Stock Type=Threshold [24x24/stock/data] Size=24 Context=Stock Type=Threshold [24x24/stock/form] Size=24 Context=Stock Type=Threshold [24x24/stock/image] Size=24 Context=Stock Type=Threshold [24x24/stock/io] Size=24 Context=Stock Type=Threshold [24x24/stock/media] Size=24 Context=Stock Type=Threshold [24x24/stock/navigation] Size=24 Context=Stock Type=Threshold [24x24/stock/net] Size=24 Context=Stock Type=Threshold [24x24/stock/object] Size=24 Context=Stock Type=Threshold [24x24/stock/table] Size=24 Context=Stock Type=Threshold [24x24/stock/text] Size=24 Context=Stock Type=Threshold [32x32/actions] Size=32 Context=Actions Type=Threshold [32x32/animations] Size=32 Context=Animations Type=Threshold [32x32/apps] Size=32 Context=Applications Type=Threshold [32x32/categories] Size=32 Context=Categories Type=Threshold [32x32/devices] Size=32 Context=Devices Type=Threshold [32x32/emblems] Size=32 Context=Emblems Type=Threshold [32x32/emotes] Size=32 Context=Emotes Type=Threshold [32x32/filesystems] Size=32 Context=FileSystems Type=Threshold [32x32/intl] Size=32 Context=International Type=Threshold [32x32/mimetypes] Size=32 Context=MimeTypes Type=Threshold [32x32/places] Size=32 Context=Places Type=Threshold [32x32/status] Size=32 Context=Status Type=Threshold [32x32/stock/chart] Size=32 Context=Stock Type=Threshold [32x32/stock/code] Size=32 Context=Stock Type=Threshold [32x32/stock/data] Size=32 Context=Stock Type=Threshold [32x32/stock/form] Size=32 Context=Stock Type=Threshold [32x32/stock/image] Size=32 Context=Stock Type=Threshold [32x32/stock/io] Size=32 Context=Stock Type=Threshold [32x32/stock/media] Size=32 Context=Stock Type=Threshold [32x32/stock/navigation] Size=32 Context=Stock Type=Threshold [32x32/stock/net] Size=32 Context=Stock Type=Threshold [32x32/stock/object] Size=32 Context=Stock Type=Threshold [32x32/stock/table] Size=32 Context=Stock Type=Threshold [32x32/stock/text] Size=32 Context=Stock Type=Threshold [36x36/actions] Size=36 Context=Actions Type=Threshold [36x36/animations] Size=36 Context=Animations Type=Threshold [36x36/apps] Size=36 Context=Applications Type=Threshold [36x36/categories] Size=36 Context=Categories Type=Threshold [36x36/devices] Size=36 Context=Devices Type=Threshold [36x36/emblems] Size=36 Context=Emblems Type=Threshold [36x36/emotes] Size=36 Context=Emotes Type=Threshold [36x36/filesystems] Size=36 Context=FileSystems Type=Threshold [36x36/intl] Size=36 Context=International Type=Threshold [36x36/mimetypes] Size=36 Context=MimeTypes Type=Threshold [36x36/places] Size=36 Context=Places Type=Threshold [36x36/status] Size=36 Context=Status Type=Threshold [36x36/stock/chart] Size=36 Context=Stock Type=Threshold [36x36/stock/code] Size=36 Context=Stock Type=Threshold [36x36/stock/data] Size=36 Context=Stock Type=Threshold [36x36/stock/form] Size=36 Context=Stock Type=Threshold [36x36/stock/image] Size=36 Context=Stock Type=Threshold [36x36/stock/io] Size=36 Context=Stock Type=Threshold [36x36/stock/media] Size=36 Context=Stock Type=Threshold [36x36/stock/navigation] Size=36 Context=Stock Type=Threshold [36x36/stock/net] Size=36 Context=Stock Type=Threshold [36x36/stock/object] Size=36 Context=Stock Type=Threshold [36x36/stock/table] Size=36 Context=Stock Type=Threshold [36x36/stock/text] Size=36 Context=Stock Type=Threshold [48x48/actions] Size=48 Context=Actions Type=Threshold [48x48/animations] Size=48 Context=Animations Type=Threshold [48x48/apps] Size=48 Context=Applications Type=Threshold [48x48/categories] Size=48 Context=Categories Type=Threshold [48x48/devices] Size=48 Context=Devices Type=Threshold [48x48/emblems] Size=48 Context=Emblems Type=Threshold [48x48/emotes] Size=48 Context=Emotes Type=Threshold [48x48/filesystems] Size=48 Context=FileSystems Type=Threshold [48x48/intl] Size=48 Context=International Type=Threshold [48x48/mimetypes] Size=48 Context=MimeTypes Type=Threshold [48x48/places] Size=48 Context=Places Type=Threshold [48x48/status] Size=48 Context=Status Type=Threshold [48x48/stock/chart] Size=48 Context=Stock Type=Threshold [48x48/stock/code] Size=48 Context=Stock Type=Threshold [48x48/stock/data] Size=48 Context=Stock Type=Threshold [48x48/stock/form] Size=48 Context=Stock Type=Threshold [48x48/stock/image] Size=48 Context=Stock Type=Threshold [48x48/stock/io] Size=48 Context=Stock Type=Threshold [48x48/stock/media] Size=48 Context=Stock Type=Threshold [48x48/stock/navigation] Size=48 Context=Stock Type=Threshold [48x48/stock/net] Size=48 Context=Stock Type=Threshold [48x48/stock/object] Size=48 Context=Stock Type=Threshold [48x48/stock/table] Size=48 Context=Stock Type=Threshold [48x48/stock/text] Size=48 Context=Stock Type=Threshold [64x64/actions] Size=64 Context=Actions Type=Threshold [64x64/animations] Size=64 Context=Animations Type=Threshold [64x64/apps] Size=64 Context=Applications Type=Threshold [64x64/categories] Size=64 Context=Categories Type=Threshold [64x64/devices] Size=64 Context=Devices Type=Threshold [64x64/emblems] Size=64 Context=Emblems Type=Threshold [64x64/emotes] Size=64 Context=Emotes Type=Threshold [64x64/filesystems] Size=64 Context=FileSystems Type=Threshold [64x64/intl] Size=64 Context=International Type=Threshold [64x64/mimetypes] Size=64 Context=MimeTypes Type=Threshold [64x64/places] Size=64 Context=Places Type=Threshold [64x64/status] Size=64 Context=Status Type=Threshold [64x64/stock/chart] Size=64 Context=Stock Type=Threshold [64x64/stock/code] Size=64 Context=Stock Type=Threshold [64x64/stock/data] Size=64 Context=Stock Type=Threshold [64x64/stock/form] Size=64 Context=Stock Type=Threshold [64x64/stock/image] Size=64 Context=Stock Type=Threshold [64x64/stock/io] Size=64 Context=Stock Type=Threshold [64x64/stock/media] Size=64 Context=Stock Type=Threshold [64x64/stock/navigation] Size=64 Context=Stock Type=Threshold [64x64/stock/net] Size=64 Context=Stock Type=Threshold [64x64/stock/object] Size=64 Context=Stock Type=Threshold [64x64/stock/table] Size=64 Context=Stock Type=Threshold [64x64/stock/text] Size=64 Context=Stock Type=Threshold [72x72/actions] Size=72 Context=Actions Type=Threshold [72x72/animations] Size=72 Context=Animations Type=Threshold [72x72/apps] Size=72 Context=Applications Type=Threshold [72x72/categories] Size=72 Context=Categories Type=Threshold [72x72/devices] Size=72 Context=Devices Type=Threshold [72x72/emblems] Size=72 Context=Emblems Type=Threshold [72x72/emotes] Size=72 Context=Emotes Type=Threshold [72x72/filesystems] Size=72 Context=FileSystems Type=Threshold [72x72/intl] Size=72 Context=International Type=Threshold [72x72/mimetypes] Size=72 Context=MimeTypes Type=Threshold [72x72/places] Size=72 Context=Places Type=Threshold [72x72/status] Size=72 Context=Status Type=Threshold [72x72/stock/chart] Size=72 Context=Stock Type=Threshold [72x72/stock/code] Size=72 Context=Stock Type=Threshold [72x72/stock/data] Size=72 Context=Stock Type=Threshold [72x72/stock/form] Size=72 Context=Stock Type=Threshold [72x72/stock/image] Size=72 Context=Stock Type=Threshold [72x72/stock/io] Size=72 Context=Stock Type=Threshold [72x72/stock/media] Size=72 Context=Stock Type=Threshold [72x72/stock/navigation] Size=72 Context=Stock Type=Threshold [72x72/stock/net] Size=72 Context=Stock Type=Threshold [72x72/stock/object] Size=72 Context=Stock Type=Threshold [72x72/stock/table] Size=72 Context=Stock Type=Threshold [72x72/stock/text] Size=72 Context=Stock Type=Threshold [96x96/actions] Size=96 Context=Actions Type=Threshold [96x96/animations] Size=96 Context=Animations Type=Threshold [96x96/apps] Size=96 Context=Applications Type=Threshold [96x96/categories] Size=96 Context=Categories Type=Threshold [96x96/devices] Size=96 Context=Devices Type=Threshold [96x96/emblems] Size=96 Context=Emblems Type=Threshold [96x96/emotes] Size=96 Context=Emotes Type=Threshold [96x96/filesystems] Size=96 Context=FileSystems Type=Threshold [96x96/intl] Size=96 Context=International Type=Threshold [96x96/mimetypes] Size=96 Context=MimeTypes Type=Threshold [96x96/places] Size=96 Context=Places Type=Threshold [96x96/status] Size=96 Context=Status Type=Threshold [96x96/stock/chart] Size=96 Context=Stock Type=Threshold [96x96/stock/code] Size=96 Context=Stock Type=Threshold [96x96/stock/data] Size=96 Context=Stock Type=Threshold [96x96/stock/form] Size=96 Context=Stock Type=Threshold [96x96/stock/image] Size=96 Context=Stock Type=Threshold [96x96/stock/io] Size=96 Context=Stock Type=Threshold [96x96/stock/media] Size=96 Context=Stock Type=Threshold [96x96/stock/navigation] Size=96 Context=Stock Type=Threshold [96x96/stock/net] Size=96 Context=Stock Type=Threshold [96x96/stock/object] Size=96 Context=Stock Type=Threshold [96x96/stock/table] Size=96 Context=Stock Type=Threshold [96x96/stock/text] Size=96 Context=Stock Type=Threshold [128x128/actions] Size=128 Context=Actions Type=Threshold [128x128/animations] Size=128 Context=Animations Type=Threshold [128x128/apps] Size=128 Context=Applications Type=Threshold [128x128/categories] Size=128 Context=Categories Type=Threshold [128x128/devices] Size=128 Context=Devices Type=Threshold [128x128/emblems] Size=128 Context=Emblems Type=Threshold [128x128/emotes] Size=128 Context=Emotes Type=Threshold [128x128/filesystems] Size=128 Context=FileSystems Type=Threshold [128x128/intl] Size=128 Context=International Type=Threshold [128x128/mimetypes] Size=128 Context=MimeTypes Type=Threshold [128x128/places] Size=128 Context=Places Type=Threshold [128x128/status] Size=128 Context=Status Type=Threshold [128x128/stock/chart] Size=128 Context=Stock Type=Threshold [128x128/stock/code] Size=128 Context=Stock Type=Threshold [128x128/stock/data] Size=128 Context=Stock Type=Threshold [128x128/stock/form] Size=128 Context=Stock Type=Threshold [128x128/stock/image] Size=128 Context=Stock Type=Threshold [128x128/stock/io] Size=128 Context=Stock Type=Threshold [128x128/stock/media] Size=128 Context=Stock Type=Threshold [128x128/stock/navigation] Size=128 Context=Stock Type=Threshold [128x128/stock/net] Size=128 Context=Stock Type=Threshold [128x128/stock/object] Size=128 Context=Stock Type=Threshold [128x128/stock/table] Size=128 Context=Stock Type=Threshold [128x128/stock/text] Size=128 Context=Stock Type=Threshold [192x192/actions] Size=192 Context=Actions Type=Threshold [192x192/animations] Size=192 Context=Animations Type=Threshold [192x192/apps] Size=192 Context=Applications Type=Threshold [192x192/categories] Size=192 Context=Categories Type=Threshold [192x192/devices] Size=192 Context=Devices Type=Threshold [192x192/emblems] Size=192 Context=Emblems Type=Threshold [192x192/emotes] Size=192 Context=Emotes Type=Threshold [192x192/filesystems] Size=192 Context=FileSystems Type=Threshold [192x192/intl] Size=192 Context=International Type=Threshold [192x192/mimetypes] Size=192 Context=MimeTypes Type=Threshold [192x192/places] Size=192 Context=Places Type=Threshold [192x192/status] Size=192 Context=Status Type=Threshold [192x192/stock/chart] Size=192 Context=Stock Type=Threshold [192x192/stock/code] Size=192 Context=Stock Type=Threshold [192x192/stock/data] Size=192 Context=Stock Type=Threshold [192x192/stock/form] Size=192 Context=Stock Type=Threshold [192x192/stock/image] Size=192 Context=Stock Type=Threshold [192x192/stock/io] Size=192 Context=Stock Type=Threshold [192x192/stock/media] Size=192 Context=Stock Type=Threshold [192x192/stock/navigation] Size=192 Context=Stock Type=Threshold [192x192/stock/net] Size=192 Context=Stock Type=Threshold [192x192/stock/object] Size=192 Context=Stock Type=Threshold [192x192/stock/table] Size=192 Context=Stock Type=Threshold [192x192/stock/text] Size=192 Context=Stock Type=Threshold [scalable/actions] MinSize=1 Size=128 MaxSize=256 Context=Actions Type=Scalable [scalable/animations] MinSize=1 Size=128 MaxSize=256 Context=Animations Type=Scalable [scalable/apps] MinSize=1 Size=128 MaxSize=256 Context=Applications Type=Scalable [scalable/categories] MinSize=1 Size=128 MaxSize=256 Context=Categories Type=Scalable [scalable/devices] MinSize=1 Size=128 MaxSize=256 Context=Devices Type=Scalable [scalable/emblems] MinSize=1 Size=128 MaxSize=256 Context=Emblems Type=Scalable [scalable/emotes] MinSize=1 Size=128 MaxSize=256 Context=Emotes Type=Scalable [scalable/filesystems] MinSize=1 Size=128 MaxSize=256 Context=FileSystems Type=Scalable [scalable/intl] MinSize=1 Size=128 MaxSize=256 Context=International Type=Scalable [scalable/mimetypes] MinSize=1 Size=128 MaxSize=256 Context=MimeTypes Type=Scalable [scalable/places] MinSize=1 Size=128 MaxSize=256 Context=Places Type=Scalable [scalable/status] MinSize=1 Size=128 MaxSize=256 Context=Status Type=Scalable [scalable/stock/chart] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/code] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/data] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/form] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/image] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/io] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/media] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/navigation] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/net] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/object] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/table] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/text] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable rabbitvcs-0.19/data/icons/hicolor/scalable/000077500000000000000000000000001445560650400206645ustar00rootroot00000000000000rabbitvcs-0.19/data/icons/hicolor/scalable/actions/000077500000000000000000000000001445560650400223245ustar00rootroot00000000000000rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-about.svg000066400000000000000000000323261445560650400261420ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-add.svg000066400000000000000000000346361445560650400255660ustar00rootroot00000000000000 image/svg+xml Add 2006-01-04 Andreas Nilsson http://tango-project.org add plus rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-annotate.svg000066400000000000000000000371111445560650400266360ustar00rootroot00000000000000 image/svg+xml System-log-out 2007-08-27 Lapo Calamandrei Kalle Persson logout exit man sign running rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-applypatch.svg000066400000000000000000000255171445560650400272010ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-asynchronous.svg000066400000000000000000000777021445560650400275720ustar00rootroot00000000000000 image/svg+xml Send and Receive Mail Jakub Steiner Andreas Nilsson, Garrett LeSage mail e-mail send receive rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-branch.svg000066400000000000000000000264321445560650400262660ustar00rootroot00000000000000 image/svg+xml View Fullscreen http://jimmac.musichall.cz Jakub Steiner window maximize fullscreen view rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-bug.svg000066400000000000000000000370061445560650400256050ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-cancel.svg000066400000000000000000000243011445560650400262470ustar00rootroot00000000000000 image/svg+xml Cancel 2005-10-16 Andreas Nilsson Cancel Jakub Steiner rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-changes.svg000066400000000000000000000245261445560650400264430ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-checkmods.svg000066400000000000000000001105471445560650400267720ustar00rootroot00000000000000 image/svg+xml Lapo Calamandrei Call Start receiver phone call start answer rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-checkout.svg000066400000000000000000001024311445560650400266300ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz Edit Undo edit undo revert Andreas Nilsson Lapo Calamandrei rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-cleanup.svg000066400000000000000000000400571445560650400264570ustar00rootroot00000000000000 image/svg+xml Ulisse Perusin uli.peru@gmail.com edit-clear rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-clear.svg000066400000000000000000000400571445560650400261160ustar00rootroot00000000000000 image/svg+xml Ulisse Perusin uli.peru@gmail.com edit-clear rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-commit.svg000066400000000000000000000212251445560650400263140ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz Edit Undo edit undo revert Andreas Nilsson Lapo Calamandrei rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-compare.svg000066400000000000000000000432661445560650400264630ustar00rootroot00000000000000 image/svg+xml Restore View http://jimmac.musichall.cz Jakub Steiner window fullscreen view. restore rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-createpatch.svg000066400000000000000000000162001445560650400273040ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-dbus.svg000066400000000000000000000267161445560650400257730ustar00rootroot00000000000000 image/svg+xml Konversation application icon March 2006 Andreas Nilsson http://tango-project.org konversation chat irc rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-delete.svg000066400000000000000000001326551445560650400263000ustar00rootroot00000000000000 image/svg+xml Lapo Calamandrei Trashbin 2006-04-19 delete remove trashbin trashcan rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-diff.svg000066400000000000000000001050241445560650400257340ustar00rootroot00000000000000 image/svg+xml Edit Find edit find locate search Steven Garrity Jakub Steiner rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-drive.svg000066400000000000000000000564751445560650400261540ustar00rootroot00000000000000 image/svg+xml Drive - Hard Disk Jakub Steiner hdd hard drive fixed media solid http://jimmac.musichall.cz rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-editconflicts.svg000066400000000000000000000401341445560650400276560ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz Paste edit paste rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-editprops.svg000066400000000000000000000565331445560650400270470ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz Edit Properties edit properties rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-emblems.svg000066400000000000000000003557161445560650400264670ustar00rootroot00000000000000 image/svg+xml Photos 2006-06-11 Lapo Calamandrei rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-export.svg000066400000000000000000000563541445560650400263600ustar00rootroot00000000000000 image/svg+xml Folder Drag Accept Jakub Steiner http://jimmac.musichall.cz/ folder directory storage drag accept rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-help.svg000066400000000000000000000317131445560650400257570ustar00rootroot00000000000000 image/svg+xml Help Browser 2005-11-06 Tuomas Kuosmanen help browser documentation docs man info Jakub Steiner, Andreas Nilsson http://tigert.com rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-import.svg000066400000000000000000001330331445560650400263370ustar00rootroot00000000000000 image/svg+xml Jakub Steiner, Lapo Calamandrei Drive Harddisk hdd drive hard fixed media rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-lock.svg000066400000000000000000000507461445560650400257660ustar00rootroot00000000000000 image/svg+xml Lock Screen Jakub Steiner video display lock screen password session screensaver http://jimmac.musichall.cz/ rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-merge.svg000066400000000000000000000432661445560650400261340ustar00rootroot00000000000000 image/svg+xml Restore View http://jimmac.musichall.cz Jakub Steiner window fullscreen view. restore rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-monkey.svg000066400000000000000000000577461445560650400263470ustar00rootroot00000000000000 image/svg+xml face-monkey Ulisse Perusin based on the work of someone who didn't fill the metadata... emotes monkey rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-no.svg000066400000000000000000000157661445560650400254550ustar00rootroot00000000000000 image/svg+xml No 2005-10-16 Andreas Nilsson No Jakub Steiner rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-ok.svg000066400000000000000000000232501445560650400254350ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz OK ok Ricardo 'Rick' GonzÃĄlez rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-properties.svg000066400000000000000000000614211445560650400272220ustar00rootroot00000000000000 image/svg+xml Document Properties document settings preferences properties tweak Jakub Steiner http://jimmac.musichall.cz rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-refresh.svg000066400000000000000000000423101445560650400264600ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz View Refresh reload refresh view Ricardo 'Rick' GonzÃĄlez rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-relocate.svg000066400000000000000000000220211445560650400266150ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-rename.svg000066400000000000000000000315051445560650400262750ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz Text Editor rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-reset.svg000066400000000000000000000752441445560650400261600ustar00rootroot00000000000000 image/svg+xml Document Revert document revert Lapo Calamandrei 2007-02-15 rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-resolve.svg000066400000000000000000000400571445560650400265070ustar00rootroot00000000000000 image/svg+xml Ulisse Perusin uli.peru@gmail.com edit-clear rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-revert.svg000066400000000000000000000214311445560650400263320ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz Edit Undo edit undo revert Andreas Nilsson Lapo Calamandrei rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-run.svg000066400000000000000000001073761445560650400256440ustar00rootroot00000000000000 image/svg+xml Lapo Calamandrei System Run run launch exec rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-settings.svg000066400000000000000000000650041445560650400266670ustar00rootroot00000000000000 image/svg+xml System Preferences Andreas Nilsson category system preferences settings control center Jakub Steiner Ulisse Perusin image/svg+xml Preferences Andreas Nilsson Lapo Calamandrei, Ulisse Perusin, Jakub Steiner category system preferences settings control center rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-show_log.svg000066400000000000000000000762411445560650400266550ustar00rootroot00000000000000 image/svg+xml Lapo Calamandrei Log Viewer log viewer inspect system utility 3 set 2006 rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-stop.svg000066400000000000000000000274071445560650400260210ustar00rootroot00000000000000 image/svg+xml Stop 2005-10-16 Andreas Nilsson stop halt error Jakub Steiner rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-switch.svg000066400000000000000000000176331445560650400263350ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz Go Jump go jump seek arrow pointer rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-unlock.svg000066400000000000000000000746051445560650400263310ustar00rootroot00000000000000 image/svg+xml Lapo Calamandrei Ulisse Perusin Keys keys key password authentication rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-unstage.svg000066400000000000000000000203311445560650400264670ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-update.svg000066400000000000000000000217401445560650400263100ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz Edit Undo edit undo revert Andreas Nilsson Lapo Calamandrei rabbitvcs-0.19/data/icons/hicolor/scalable/actions/rabbitvcs-yes.svg000066400000000000000000000172651445560650400256350ustar00rootroot00000000000000 image/svg+xml Yes 2005-10-16 Andreas Nilsson Yes Jakub Steiner rabbitvcs-0.19/data/icons/hicolor/scalable/apps/000077500000000000000000000000001445560650400216275ustar00rootroot00000000000000rabbitvcs-0.19/data/icons/hicolor/scalable/apps/rabbitvcs-small.svg000066400000000000000000000215201445560650400254350ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/apps/rabbitvcs.svg000066400000000000000000000307631445560650400243400ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/000077500000000000000000000000001445560650400223105ustar00rootroot00000000000000rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/README000066400000000000000000000004601445560650400231700ustar00rootroot00000000000000TortoiseSVN - SVG emblems/overlays Licensed under: GPL v2 or later Except: emblem-rabbitvcs-calculating.svg: (C) 2009 Bruce van der Kooij emblem-rabbitvcs-error.svg: (C) 2009 Jason Heeris Licensed under: GPL v2 or later rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-added.svg000066400000000000000000000061151445560650400273110ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-calculating.svg000066400000000000000000000374731445560650400305510ustar00rootroot00000000000000 image/svg+xml Lapo Calamandrei Clock clock time date rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-complicated.svg000066400000000000000000000101741445560650400305340ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-conflicted.svg000066400000000000000000000101741445560650400303620ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-deleted.svg000066400000000000000000000066321445560650400276620ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-error.svg000066400000000000000000000212531445560650400274010ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-ignored.svg000066400000000000000000000072151445560650400277010ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-locked.svg000066400000000000000000000325511445560650400275140ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-modified.svg000066400000000000000000000076141445560650400300350ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-normal.svg000066400000000000000000000070361445560650400275430ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-obstructed.svg000066400000000000000000000101741445560650400304260ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-read_only.svg000066400000000000000000000070251445560650400302250ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/data/icons/hicolor/scalable/emblems/emblem-rabbitvcs-unversioned.svg000066400000000000000000000165661445560650400306240ustar00rootroot00000000000000 image/svg+xml rabbitvcs-0.19/extension/000077500000000000000000000000001445560650400154475ustar00rootroot00000000000000rabbitvcs-0.19/extension/RabbitVCS.py000077700000000000000000000000001445560650400254442../clients/nautilus/RabbitVCS.pyustar00rootroot00000000000000rabbitvcs-0.19/locale/000077500000000000000000000000001445560650400146725ustar00rootroot00000000000000rabbitvcs-0.19/locale/ca/000077500000000000000000000000001445560650400152555ustar00rootroot00000000000000rabbitvcs-0.19/locale/ca/LC_MESSAGES/000077500000000000000000000000001445560650400170425ustar00rootroot00000000000000rabbitvcs-0.19/locale/ca/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000030051445560650400211540ustar00rootroot00000000000000Ū•´LĀÁ Č ĶŨō!&-6Tnž ą#ŊÆá¨ Ž šÅßķ $2';c~–¯Č$ā    AuthorBranch/tagCompletedCompleted Branch/tagCompleted RenameCompleted UpdateDateEnglishLineRenameRevisionRunning Branch/tag Command...Running Rename Command...Select a programThe new name field is requiredUpdate To RevisionUpdating...You must supply a destination path.Project-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-01-27 10:44-0500 PO-Revision-Date: 2010-02-09 10:19+0000 Last-Translator: FULL NAME Language-Team: Catalan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2010-11-26 14:08+0000 X-Generator: Launchpad (build Unknown) AutorBranca/tagS'ha acabatS'ha acabat la branca/tagS'ha canviat el nomS'ha acabat l'actualitzaciÃŗDataAnglèsLíniaCanvia el nomRevisiÃŗS'està executant la comanda branca/tagS'està canviant el nom...Seleccioneu un programaEl nou nom Ês necessariActualitza a la revisiÃŗS'està actualitzant...Heu d'especificar un camí de destírabbitvcs-0.19/locale/cs/000077500000000000000000000000001445560650400152775ustar00rootroot00000000000000rabbitvcs-0.19/locale/cs/LC_MESSAGES/000077500000000000000000000000001445560650400170645ustar00rootroot00000000000000rabbitvcs-0.19/locale/cs/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000221221445560650400211770ustar00rootroot00000000000000Ū•­„éė  ‘ ŸĢžĐå õ*AScH~-Įõ   &4 GU e q?{6ģ5ō"(K"Z}„  ˜ Ļ °ē ŋÉåí˙'/&6 ] guŠœ¯Ā ŅŪãč îû #1 9F MY b n |‰’ŖŠąĘĪÔÚ á íø   !(,5=DMT \f{ƒŒ •ŸĻ Ģ ļĀÅ× ņü   )08G P \h oy‚›ģÃĖę  4? Ucs„–Ÿ§Ŋ ÄÎâ įķ-û$)*Ny˜œ ĸŦąšÂÉÜō #) 0 :DH]û 4F b o }ŠĨŧ ÎÜ>õ-4bu†‹“ĸą ÉÖ æ ņ3ü0*P{ — ¤ÅË Ô ß ę õ +5Ke nx šĨģŅč˙ 3>DJ Q^e w ‚Ÿ ¨ĩŧÍ Öä ÷ "&.?DINU e p{‚‰ ‘Ÿ¨Ŧ ĩĀČŅŲ á#ë   * . 5 C L V f m s ‡ š Ĩ ĩ ŋ Ę Ô Ú â ņ ũ  ! ! '! 4!?!&]!„!Œ!“!ą! Ņ!ō!"" +"9"J" Z" e" r" "Œ"ĸ" Š"ŗ"Į"Ė" Ķ"Ū"ū"(#"G#j#n# r#}# ‚# Œ#–##ŗ#Ę#Ū# í#ų#$ $ $!$5$9$fa^2Žxto<œFR§W ‚EJ1DĻH3Ģ%Z/`†g˜‘jh-’@ {7P'|—~™›nŦ+K=;9C*I6m,Y.)"i>:ŖSceŠAz_( ‰wO 0”Q¤dBVyUk… ‹8v“M?#[&•€ĄTb „Œ‡­}G$p¨4ĸƒĒLruĨŸŠlˆN \!–q5žšXs]%s - Finished(no author)Add MessageCommit to:Files to lockFrom URLLinksOptionsPrevious MessagesProperties for:RepositoryRevisionVersion InformationAre you sure you want to delete %item%?RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd an emblemAdd to ignore listAnnotate - %sAnnotate a fileAnnotate...AnnotatedAre you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBranch/tag...Browse toBrowse...BugsCancelledCannot annotate a directoryChangedCheck CertificateCheck out a working copyCleaning Up...CleanupCommitCommit modifications to the repositoryCompletedCompleted AddCompleted Branch/tagCompleted CleanupCompleted RelocateCompleted RenameCompleted UpdateConfirmationDBusDateDebugDebug RevertDeleteDelete ConfirmationDenyEdit...Empty MessageEnglishExit ServiceExportExport - %sExternalFailed LockFailed UnlockFingerprint:FinishedFound %d item(s)From:GeneralGenerating Annotation...HEADHelpHost:ImportImport - %sInvalidateIssuer:Language:Limit:LineLoading...LockedLogLog - %sLoggingLogin:Merge...MergedMessageMime TypeMinimum level to logMissingModifiedN/ANameNew Name:New...OpenOpen ShellPassword:PathPrevious MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty:RabbitVCSRealm:RefreshRefresh StatusRelocateRelocate...Remove LockRenameRename...ReplacedRepository paths clearedRepository successfully createdRestoreRevisionRunning Branch/tag Command...Running Relocate Command...Running Rename Command...Save AuthenticationSaved DataSelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow LogShow logSkippedStart/Restart ServiceSwitchSwitch...Test AsynchronicityTextText StatusThanks:The from and to url fields are both required.The from revision field is required.The from revision field must be an integerThe new name field is requiredTo:Type:URL/Path:URL:UnknownUnlockedUpdateUpdate To RevisionUpdate a working copyUpdate to revision...UpdatedUpdating...Valid:ValueValue:View DiffView helpYesthe selected item(s)Project-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2009-03-04 14:35-0500 PO-Revision-Date: 2009-03-27 10:34+0000 Last-Translator: Ladislav Prskavec Language-Team: Czech MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2009-09-24 13:44+0000 X-Generator: Launchpad (build Unknown) %s - Dokončeno(autor neznÃĄmÃŊ)Přidat zprÃĄvuCommit do:Soubory k uzamknutíZ URLOdkazyVolbyPředchozí zprÃĄvyVlastnosti pro:RepozitoryRevizeInformace o verziOpravdu chcete smazat %item%?RabbitVCSPřijmout natrvaloPřijmout jednouAkcePřidatPřidat emblemPřidat emblemPřídat na ignore listAnotace - %sAnotace souboruAnotace...AnotovÃĄnoOpravdu chcete vymazat vaÅĄe autentikační Ãēdaje?Opravdu chcete vymazat zprÃĄvy?Opravdu chcete vymazat cesty k repozitory?Opravdu chcete pokračovat?AuthentikaceAutentikační Ãēdaje vymazÃĄny.AutorAutoři:Branch/tagBranch/tagProchÃĄzetProchÃĄzet...BugyZruÅĄenoNemohu anotovat adresÃĄÅ™ZměněnoKontrola certifikÃĄtuCheck out pracovní kopieČistímVyčistitCommitCommit změn do repozitoryDokončenoPřidÃĄní dokončenoBranch/tag dokončen.ČiÅĄtění dokončenoPřesunutí dokončenoPřejmenovÃĄní dokončeno.Aktualizace dokončena.PotvrzeníDBus:DatumDebug:Debug RevertSmazatSmazat potvrzeníZakÃĄzanÊUpravit...PrÃĄzdnÃĄ zprÃĄvaAnglickyExit ServiceExportExportovat - %sExterníZÃĄmek selhalOdemčení selhaloFingerprint:DokončenoNaÅĄel %d poloÅžekOd:ObecnÊGeneruji anotaciHEADHelpHostImportImportovat - %sNevalidníVydavatel:Jazyk:Limit:Å˜ÃĄdekNahrÃĄvÃĄm...ZamčenoLogLog - %sLogovÃĄníJmÊno:Merge...SpojenoZprÃĄvaMime TypeMinimÃĄlní Ãēroveň pro logovÃĄníChybějícíModifikovÃĄnoN/AJmÊnoNovÊ jmÊno:NovÃŊ...OtevřítOtevřít shellHeslo:CestaPředchozí zprÃĄvyZprÃĄvy vymazÃĄny.VlastnostiVlastnosti - %sVlastnostVlastnost:RabbitVCSRealmObnovitObnovit statusPřesunutíRelocate...Odstranit zÃĄmekPřejmenovatPřejmenovatPřepsÃĄnoCesty k repozitory vymazÃĄny.Repozitory bylo ÃēspÄ›ÅĄně vytvořenoObnovitRevizeSpuÅĄtím příkaz branch/tagSpouÅĄtím příkaz PřesunutíSpouÅĄtím příkaz PřejmenovatUloÅžit autentikaciUloÅženÃĄ dataVybrat / zruÅĄit vÅĄeZvolit souborZvolit adresÃĄÅ™Vyberte programNastaveníZobrazit logZobrazit logPřeskočenoStart/Restart ServiceSwitchSwitch...Test AsynchronicityTestStatusDěkujeme:Políčka z a url jsou povinnÃĄPolíčko z revize je povinnÊ.Políčko revize musí obsahovat čísloPolíčko novÊ jmÊno je povinnÊDo:TypURL/cesta:URL:NeznÃĄmÊOdemčenoUpdateAktualizace na reviziUpdate pracovní kopieUpdate na revizi...AktualizovÃĄnoAktualizujiPlatnÊ:HodnotaHodnota:Zobrazit DiffZobrazit nÃĄpověduAnozvolenÊ(ÃĄ) poloÅžky(a)rabbitvcs-0.19/locale/de/000077500000000000000000000000001445560650400152625ustar00rootroot00000000000000rabbitvcs-0.19/locale/de/LC_MESSAGES/000077500000000000000000000000001445560650400170475ustar00rootroot00000000000000rabbitvcs-0.19/locale/de/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000521751445560650400211750ustar00rootroot00000000000000Ū•> ¯ü¸ š ĮĶ×ę13/e•§ŋÜņ(? Ubvœ-Ģ6Ų*)$TyĄŗÉŲđ&@Sl€›H¯-ø&FL\ kw~ ‚ ›Ž´ ŊË Û į?ņ61 5h "ž Á "Đ ķ ú ! ! ! &!0! 5!?!0[!Œ!”!Ļ!ŋ! Č!pÖ!VG"ž"´"Ã"2Ë"%ū"$#&+# R# \#j##’#¤#ĩ#Æ#×#æ#ö# $$/$A$R$c$t$ …$ ’$$¤$ŗ$2Æ$ų$%%2%I%i%n%s% y%†%%Ą%Š% Ž%ģ% Ã%Ņ%ā%÷%& &+& 2&B>& &‹&”& Ļ& ˛& Ā& Î&Û&)ä&''%'-'F' O'['`'e'$k''Ÿ'¯' ļ' Â' ã'đ'( #(.( 6(@(G( L(W( j(u(|(€(‰(‘("˜(ģ(Á(Ņ(ė())) )()=)E)N)R) W)a)h)~)™) ¸)Ã)Ō)č) í) ø)*** 3*>*N*W* g* q*{* ‚*Œ*”*Ŗ*ŗ*Ë*Ô* ī* û*+ ++!+:+Z+b+k+s+|+š+&Ą+Č+Ņ+ė+õ+ ,*,F,`,z,”,Ŧ,Â,Õ,ņ, -&-@-Z-t- ˆ-.“-2Â-0õ-&. <.J.Z.k.t.}.›."¤.Į.Ū.ņ.ų./ /,/ 3/=/ Q/\/ a/m/-u/$Ŗ/*Č/$ķ/*0C0Ab0%¤0,Ę0s÷0Qk1Ŋ1Á1 Į1Ņ1 Ö1ā1č1ī1ø1˙1$272M2c2 k2úw2r3y33 †3 3!š3%ŧ3â34#4)4>4“A4Õ5 č5õ5ų5636L61f6B˜6Û6ô6%757Q7e72v7Š7 Â7Ī7ã7û7 8>8=\8š83ˇ8"ë89)9:9O9g9w9‰9Ÿ93ŗ9į9/û9+:G:d:Ex:-ž:!ė:;;$;:;M; T;`;s;-Š; ¸; Å;Đ;;ß; < &<B0<7s<4Ģ<ā< =) =4=:= C= M= Z=d=s= x= „=;Ĩ= á=ë=ū= >&>—6>kÎ>:? R? `?>k?"Ē? Í?,Ų? @@".@Q@d@}@—@Ŧ@Á@×@ õ@A!A:A RAsAˆAĄA ŋA ĖAØAāAņA9B@BOBbByB+–BÂBĮBÍB ĶBāBéB C CC !C/C@CTC*oCšC ŖC °CŧCOÍC D)D0DBD"YD|D–D ĨD6ŗDęDE EE'E /E:E?EEE.ME|E’E¨E ¯E+ģEįE÷EF6F GFSF\FcFiFqF‡F—F F¤F­F ĩF6ÃFúF G&!G(HGqG„G •G GŠGŧG ÄGÎGŌG ×GãG ęGöG"H 4H?H"WHzH ‚H H—HœH˛H ŌHāH ķH˙H I I*I3I NQNgN{N’N —N ĸN5°N)æN/O*@O;kO#§O@ËO, P19PnkPvÚPQQVQ [QeQ jQ wQ Q ŒQ –Q¤Q4žQķQR (R5R/ERuS~SƒS‰S ŸS1­S0ßS'T8T#;T_TyTū=ēĘøtF;"ŽÚ(d¨x&8öąō.-V—˙6 DŦ<!€,u|Ŗˇi-07=ÃmĀB/÷á×EĨĩč‰*:4āüŋs L`Š“%1\,™W悎l­TåÄŪ2UÉKę8Ph˛R)7éÛëôŅ?ŒĪbĮy5 âÜní Z4zÅ" äĖģúįũ¤’ãîwĐG>Ō9$‡v¯.!›ĸ „§0ž3j+ž2Ē”{/ÁÖŗoØpf~SOœ˸(YŊÍ#°;Ÿ*Îų%]1'ļķaŧŲņ  Č #qõšĻ…š+X•IĶHŠ_k‹}Ô6)N^5đ'īeJ[g r‘$:c´>& < Ũ@ĢQ †3ßû˜ĄÕ9ˆMƒÆC–ėA%s - Finished(no author)100Add MessageAffected File(s)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to see diff)Commit to:Create copy fromEdit Property DetailsFiles to lockFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageOptionsPlease add your authentication detailsPlease describe why you are locking these filesPrevious MessagesProgram used to browse repositoriesProgram used to compare filesProperties for:RabbitVCSRepositoryRevision RangeRevisionRevisions TableSwitch DetailsTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromUpdate DepthVersion InformationWorking CopyAre you sure you want to delete %item%?RabbitVCSA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd an emblemAdd to ignore listAddedAnnotateAnnotate - %sAnnotate a fileAnnotate...AnnotatedAre you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBranch/tag...Browse toBrowse...BugsCancelledCannot annotate a directoryChange the repository location of a working copyChangedCheck CertificateCheck out a working copyCheckoutCheckout - %sChoose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationCommitCommit modifications to the repositoryCompletedCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationConflictedCopiedCopy From PathCopy From RevisionCopy an item to another location in the repositoryCopy from HEADCopy from revisionCopy from working copyCreate Repository hereCreate a repository in a folderDBusDateDebugDebug RevertDeleteDelete ConfirmationDeletedDenyDestination:Edit...Empty MessageEnable emblemsEnable file attributesEnable recursive status checksEnglishExit ServiceExportExport - %sExport a working copy or repository with no versioning informationExtensionExternalExternal ProgramsFailed LockFailed RevertFailed UnlockFingerprint:FinishedForce an invalidate_extension_info() callFound %d item(s)From:GeneralGenerating Annotation...Get LockGet Lock...HEADHelpHost:Ignore all files with this extensionIgnore an itemIgnore ancestryImportImport - %sImport an item into a repositoryInapplicableInclude ignored filesInvalid revision informationInvalidateIssuer:Language:Limit:LineLoading...Locally lock itemsLock FilesLockedLogLog - %sLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MergedMessageMime TypeMinimum level to logMissingModifiedN/ANameNew Name:New...Notification MessagesNumber of URLs to rememberNumber of messages to rememberObstructedOmit ExternalsOnly record the mergeOpenOpen ShellPassword:PathPrevious MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty StatusProperty:RabbitVCSRealm:RecursiveRefreshRefresh StatusRelease Lock...Release lock on an itemRelocateRelocate your working copyRelocate...Remove LockRenameRename...ReplacedRepository paths clearedRepository successfully createdResolveResolvedRestoreRestoredRetrieving Log Information...RevertRevert an item to its unmodified stateRevertedReverts everything it seesRevisionRunning Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...Save AuthenticationSaved DataSchedule an item to be added to the repositorySchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow LogShow a file's log informationShow logShow new version on the right sideShow unversioned filesShowing Revisions:SkippedStart/Restart ServiceSteal the locksStop on copySwitchSwitch...Test AsynchronicityTest MergeTextText StatusThanks:The from and to url fields are both required.The from revision field is required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There have been modifications to your working copy. If you copy from the HEAD revision you will lose your changes.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:UnchangedUnknownUnlockUnlockedUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...UpdatedUpdating...Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.Valid:ValueValue:View DiffView helpView or change RabbitVCS settingsView the modifications made to a fileView the properties of an itemYesYou must supply a destination path.the selected item(s)toProject-Id-Version: neu Report-Msgid-Bugs-To: POT-Creation-Date: 2009-03-04 14:35-0500 PO-Revision-Date: 2009-03-19 09:59+0000 Last-Translator: Steve Markgraf Language-Team: German <> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2009-09-24 13:44+0000 X-Generator: Launchpad (build Unknown) X-Poedit-Basepath: ../ %s - abgeschlossen(kein Autor)100Logmeldung hinzufÃŧgenBetroffene Datei(en)AuthentifizierungZertifikatsdetailsDas Projektarchiv der Arbeitskopie ändernGeänderte Dateien (Doppelklick um Unterschiede anzuzeigen)Übernehmen nach:Kopie erstellen vonEigenschaftsdetails bearbeitenZu sperrende DateienVon RevisionQuell-URLVon: (URL und zusammenzufÃŧhrende Revision)Import-LogmeldungLinksLogmeldungenLogging-OptionenLogmeldungOptionenBitte geben Sie Ihre Authentifizierungsinformationen anBitte beschreiben Sie, warum Sie diese Dateien sperrenFrÃŧhere LogmeldungenProgramm zum Durchsuchen von ProjektarchivenProgramm zum DateivergleichEigenschaften fÃŧr:RabbitVCSProjektarchivRevisionsbereichRevisionRevisionenUmstelldetailsBis RevisionNach: (URL und zusammenzufÃŧhrende Revision)URL-HistorieURL von der zusammengefÃŧhrt werden sollAktualisierungstiefeVersionsinformationenArbeitskopieWollen Sie wirklich %item% lÃļschen?RabbitVCSEin Assistent zum ZusammenfÃŧhrenÜberÜber RabbitVCSDauerhaft akzeptierenEinmal akzeptierenAktionHinzufÃŧgenEmblem hinzufÃŧgenEin Emblem hinzufÃŧgenZur Liste der ignorierten Dateien hinzufÃŧgenHinzugefÃŧgtAnnotierenAnnotiere - %sAutoren- und Revisionsinformationen zu einer Datei anzeigenAnnotierenAnnotiertWollen Sie wirklich Ihre Authentifizierungsinformationen lÃļschen?Wollen Sie wirklich die frÃŧheren Nachrichten lÃļschen?Wollen Sie wirklich die Projektarchivpfade lÃļschen?Wollen Sie wirklich fortfahren?AnmeldungAuthentifizierungsinformationen gelÃļschtAutorAutoren:Zweig/TagZweig/Tag...DursuchenDurchsuchen...BugsAbgebrochenKann kein Verzeichnis annotierenDen Ort des Projektarchivs fÃŧr eine Arbeitskopie umstellenGeändertZertifikat prÃŧfenEine Arbeitskopie auscheckenAuscheckenAuschecken - %sWählen Sie diese Methode, wenn Sie Änderungen an einem Zweig vorgenommen haben und Ihre Änderungen mit einem anderen Zweig zusammenfÃŧhren mÃļchten.Wählen Sie diese Methode, wenn Sie zwei verschiedene Zweige in Ihre Arbeitskopie zusammenfÃŧhren mÃļchten.Arbeitskopie aufräumenRäume auf...AufräumenAufräumen angefragt... Aufräumen der Arbeitskopie beginnen?Ihre Anmeldeinformationen lÃļschenÜbernehmenÄnderungen in das Projektarchiv ÃŧbertragenAbgeschlossenHinzufÃŧgen abgeschlossenZweig/Tag-Erstellung abgeschlossenAuschecken beendetAufräumen abgeschlossenÜbernehmen abgeschlossenExport abgeschlossenImport abgescholssenSperren abgeschlossenZusammenfÃŧhren abgeschlossenZusammenfÃŧUmstellen der URL abgeschlossenUmbenennen abgeschlossenAuflÃļsen abgeschlossenRÃŧckgängigmachen abgeschlossenZweig/Tag gewechseltEntsperren abgeschlossenAktualisierung abgeschlossen.BestätigungIm KonfliktKopiertKopiert von PfadKopiert von RevisionEin Objekt zu einem anderen Ort im Projektarchiv kopierenKopie von HEADKopie von RevisionKopie von ArbeitskopieProjektarchiv hier erstellenEin Projektarchiv in einem Ordner erstellenDBusDatumDebugDebug RevertLÃļschenBestätigung zum LÃļschenGelÃļschtVerweigernZielort:Bearbeiten...Leere LogmeldungEmbleme einschaltenDateiattribute einschaltenRekursive StatusÃŧberprÃŧfungen aktivierenenglischExit ServiceExportierenExportieren - %sEine Arbeitskopie oder ein Projektarchiv ohne Versionsinformationen exportierenErweiterungExternExterne ProgrammeSperren fehlgeschlagenRÃŧckgängig machen fehlgeschlagenEntsperren fehlgeschlagenFingerabdruck:AbgeschlossenEinen Aufruf von invalidate_extension_info() forcieren%d Objekt(e) gefundenVon:AllgemeinErzeuge Annotationen...SperrenSperren...HEADHilfeServer:Alle Dateien mit dieser Erweiterung ignorierenEin Objekt ignorierenAbstammung ignorierenImportImport - %sEin Objekt in ein Projektarchiv importierenNicht anwendbarIgnorierte Dateien einbeziehenUngÃŧltige RevisionsinformationUngÃŧltig machenAussteller:Sprache:Limit:ZeileLade...Objekte lokal sperrenDateien sperrenGesperrtLogLog - %sLoggingBenutzername:Ein in Konflikt stehendes Objekt als gelÃļst markierenZusammenfÃŧhrenZusammenfÃŧhrassistentEinen Revisionsbereich zusammenfÃŧhrenZwei verschiedene Bäume zusammenfÃŧhrenZusammenfÃŧhren...ZusammengefÃŧhrtLogmeldungMIME-TypMinimaler LoglevelFehlendGeändertn/vNameNeuer Name:Neu...NachrichtenZahl der zu merkenden URLsZahl der zu merkenden LogmeldungenVerhindertIgnoriere Externe LinksNur als zusammengefÃŧhrt markierenÖffnenOpen ShellPasswort:PfadFrÃŧhere LogmeldungenFrÃŧhere Logmeldungen gelÃļschtEigenschaftenEigenschaften - %sEigenschaftEigenschaftenstatusEigenschaft:RabbitVCSBereich:RekursivAktualisierenRefresh StatusSperre aufheben...Sperre fÃŧr Objekte aufhebenZweig/Tag wechselnURL des Projektarchivs umstellenURL umstellenSperre aufhebenUmbenennenUmbenennen...ErsetztProjektarchivpfade gelÃļschtProjektarchiv erfolgreich erstelltAuflÃļsenAufgelÃļstWiederherstellenWiederhergestelltErmittle Logmeldungen...RÃŧckgängig machenEin Objekt in seinen unveränderten Zustand rÃŧckversetzenRÃŧckgängig gemachtReverts everything it seesRevisionFÃŧge hinzu...Erstelle Zweig/Tag...Checke aus...Übernehme ins Projektarchiv...ExportiereImportiere...Sperre...FÃŧhre zusammen...ZusammenfÃŧhren testenStelle URL um...Benenne um...LÃļse Konflikte auf...Mache rÃŧckgängig...Wechsele Zweig/Tag...Entsperre...Anmeldeinformationen speichernGespeicherte DatenEin Objekt zum HinzufÃŧgen zum Projektarchiv vormerkenEin Objekt zum LÃļschen aus dem Projektarchiv vomerkenEin Objekt zum Umbenennen im Projektarchiv vormerkenAlle aus-/abwählenDatei wählenOrdner wählenEin Programm auswählenEinstellungenLog anzeigenLogmeldungen einer Datei zeigenLog anzeigenNeue Version auf der rechten Seite zeigenNicht versionierte Dateien anzeigenZeige Revisionen:ÜbersprungenStart/Restart ServiceExistierende Sperren brechenBei Kopie anhaltenZweig/Tag wechselnZweig/Tag wechseln...Test AsynchronicityZusammenfÃŧhren testenTextTextstatusDanksagungen:Die Ursprungs- und Ziel-URL mÃŧssen angegeben werden.Sie mÃŧssen die Ausgangsrevision angeben.Die Ausgangsrevision muss eine ganze Zahl sein.Der angegebene Pfad ist keine ArbeitskopieDas Objekt/Die Objekte werden in den MÃŧlleimer verschoben.Der neue Name muss angegeben werdenDie Projektarchiv-URL und der Zielpfad mÃŧssen angegeben werden.Die Projektarchiv-URL muss angegeben werden.Der Ort des Projektarchivs muss angegeben werden.Ihre Arbeitskopie wurde verändert. Wenn Sie von der HEAD-Revision kopieren, gehen diese Änderungen verloren.Beim Erstellen des Projektarchivs ist ein Fehler aufgetreten. Stellen Sie sicher, dass der angegebene Ordner leer ist.Auf:Typ:URL/Pfad:URL:UnverändertUnbekanntEntsperrenEntsperrtAktualisierenAktualisiere auf RevisionEine Datei auf eine bestimmte Revision aktualisierenEine Arbeitskopie aktualisierenAktualisieren auf...AktualisiertAktualisiere...Benutzen Sie den Log-Dialog, um die Revisionen zum ZusammenfÃŧhren auszuwählen. Oder geben Sie die Revisionen per Hand an, durch Komma getrennt. Sie kÃļnnen einen Revisionsbereich mit dem Bindestrich angeben. Beispiel: 4-7, 9,11,15-HEAD Lassen Sie das Feld leer, um alle Revisionen zusammenzufÃŧhren.GÃŧltig:WertWert:Unterschiede anzeigenHilfe ansehenEinstellungen von RabbitVCS sehen oder bearbeitenDie an einer Datei vorgenommen Änderung ansehenDie Eigenschaften eines Objekts ansehenJaSie mÃŧssen einen Zielpfad angeben.die ausgewählten Objektebisrabbitvcs-0.19/locale/en_GB/000077500000000000000000000000001445560650400156445ustar00rootroot00000000000000rabbitvcs-0.19/locale/en_GB/LC_MESSAGES/000077500000000000000000000000001445560650400174315ustar00rootroot00000000000000rabbitvcs-0.19/locale/en_GB/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000675261445560650400215650ustar00rootroot00000000000000Ū•¨\ 9œ€###Ą#ļ#É#Ū#ī# $ $$$;1$m$ƒ$1ž$8Đ$ %%63%j%‡% œ%Ē%Ŋ%Ō%(â% & !&.&B&Y&€h&é&-ø&6&'1]''*¨'$Ķ'ø'( (3(E([(k(‚(‘(§(&ē(á(ô( )!)<)Q)7e)H)-æ):*O*o*u*…* ”* *§* Ģ*ļ* Ę*Ø*ë* ņ*+’+Š+ ˛+Ā+ Đ+ Ü+/æ+ ,",>,M,h,?,6ŋ,5ö,",-O-"^--ˆ- ‘- œ-Ē- Ã-Í- č-ō-÷-.0.K.S.[.m.….. .Ī.č. ņ. ˙.p /V|/Ķ/é/ø/20%30Y0l0&s0š0°0Â0)×0141H1Ag1Š1 Ã1 Í1Û1đ122&272H2W2g2|22 2˛2Ã2Ô2å2 ö2 333$3732M3 €3‹3 œ3Š3š3Đ3đ35474N4S4 Y4f4m44Ÿ4¯4 Ä4å4í4 ō4 ˙4g 5 t5€55 5´5Đ5Ø5į5ū56%6 ,6B86 {6 …66˜6 Ē6 ļ6 Ä6"Ō6 õ67) 757F7L7T7 ]7i7n7s7y7‰7§7ŋ7 Æ7 Ō7 ķ78 8!8 )838:8?8 Z8 g8r8 …88—8›8 ¤8°8¸8"ŋ8â8č8ø89-969=9 E9O9d9l9u9 …99”9 ™9 §9ą9¸9ģ9Ņ9Ø9ķ9 ::,:B: G: R:^:w: ‘: ›:¨:ģ:Î:Ö:Û:á:ķ: ;;(;1;A;Q; a; k;u;…; Œ;–;ž;­;Í;Ü;ė;< < (<4< ;<E<N<a<z<š<Ŗ<Ģ<´<ŧ<Ķ<Ü<&ã< ==*6=6a=˜=Ą=ŧ= Å=Ī=æ=> >:>T>n>†>œ>¯>Ë>å>??4?N? g?r? †?2‘?0Ä?,õ?"@ 8@F@V@g@p@€@‰@¨@(Æ@ī@#A2A";A^AuAˆAA•AœA ŦAšA ĀA ĘAÕA ÚA æAōAAúA-oSoJĸ(zcöŠ Uo{Ĩm›ʧ÷!ĀB4ŖgÅ$"€d'Ĩđ‡…6-uxkxo —ļ °>æi–• U‘˛0nŋz¯YQåX”3ŊWšNAq™)H^j‘І–D9Ą*5ŗEY¨FĄNÆ%(\žPW,cÔb1ėFbSĮ“[•ÖãƒZ†P@Î}É×Dˆ8/émųÚĶūęvŦ…v%‹7’Ļī‹I.jį2#y‰~ĸž?î—9ē@:¨Ų‡H/kg"Œ 0›’\^”Œ§L„aŸVĢe˜ ]tũ<#TŌ,6`_MĐŽBÛņčlhReØúi*Šs˙+O˜‰`VõEŅˇÄ wķ dq žáœ~S)íøÍ;šu}Â4끚arpĒ<ĩpÜQ;¸]{ô„ģ5ˆ´3â¤ZnGK8$Ī>1™CCƒā7 ŖĻ _ ېI|&!TÃ[f.=Á‚&ËĖAŽąŨäŧō¤Čy? -€R2rLM|û­GK“üsXf=hŸO:+J՜w ltŽ‚ß'%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished(no author)100Add MessageAffected File(s) (double-click to compare with base)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Commit to:Create copy fromDifferences (double-click to compare with base)Edit Property DetailsFiles to lockFirst:Folder NameFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. OptionsPlease add your authentication detailsPlease describe why you are locking these filesPlease provide your ssl certification filePrevious MessagesProgram used to browse repositoriesProgram used to compare filesProperties for:RabbitVCSRemote URI:RepositoryRevision RangeRevisionRevisions TableSecond:Switch DetailsTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromUpdate DepthVersion InformationWorking Copy:Working CopySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSRabbitVCS ErrorA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd a new property.Add an emblemAdd to ignore listAddedAdded a folder to the repositoryAgeAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sAnnotate a fileAnnotate...AnnotatedApplies a unified diff file to the working copyApply PatchApply Patch To Directory...Apply Patch...Apply property recursivelyApplying Patch File...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBranch/tag...Browse a repository treeBrowse toBrowse to a file or folderBrowse...BugsCannot annotate a directoryChangeChange the repository location of a working copyChangedChangesCheck CertificateCheck for ModificationsCheck for Modifications...Check for modifications made to the repositoryCheck out a working copyCheckoutCheckout - %sCheckout...Choose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationClose this dialog.CommitCommit modifications to the repositoryCompare files/foldersCompare revisionsCompare side by sideCompare the differences between two itemsCompare with baseCompare with base using side-by-side comparison toolCompare with previous revisionCompare with previous revision using side-by-side comparison toolCompare with working copyCompletedCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationConflictedCopiedCopy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to...Create Folder...Create PatchCreate Patch...Create Repository hereCreate a repository in a folderCreate folder...Creates a unified diff file with all changes you madeCreating Patch File...DateDebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDelete propertyDelete this propertyDelete this property (recursive)DeletedDenyDestination:Diff Menu...Do you want to delete the selected properties from all files and subdirectories beneath this directory?Edit authorEdit author...Edit log messageEdit log message...Edit revision properties...Edit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternalExternal ProgramsFailed LockFailed RevertFailed UnlockFile is not under version control.Fingerprint:FinishedForce an invalidate_extension_info() callFound %d item(s)From:GeneralGet LockGet Lock...HEADHelpHost:Ignore ancestryIgnore item by file extensionIgnore item by filenameImportImport - %sImport an item into a repositoryInapplicableInclude ignored filesInvalidateIssuer:Language:Limit:LineList of comparison optionsLoad/RefreshLoading...Locally lock itemsLock FilesLockedLogLog - %sLog MessageLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MergedMessageMime TypeMinimum level to logMissingModifiedMore Actions...Move to...N/ANameNew Location:New Name:New...NoNotification MessagesNumberNumber of URLs to rememberNumber of messages to rememberObstructedOmit ExternalsOnly record the mergeOpenOpen ShellOpen a fileOpen from first revisionOpen from second revisionPassword:Patch FailedPatch File AppliedPatch File CreatedPatchedPathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty ChangeProperty EditorProperty StatusProperty:RabbitVCSRabbitVCS ErrorRealm:RecursiveRefreshRefresh StatusRefresh the list of properties.Rejected PatchRelease Lock...Release lock on an itemRelocateRelocate your working copyRelocate...RenameRename...ReplacedRepository BrowserRepository paths clearedRepository successfully createdReservedResolveResolvedRestoreRestore a missing itemRestoredRevertRevert an item to its unmodified stateRevert propertyRevert property (recursive)Revert this property to its original stateRevert this property to its original state (recursive)RevertedReverts everything it seesRevisionRevision:Running Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...SSL Client CertificationSave As...Save AuthenticationSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySchedule items to be added to the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow Changes...Show LogShow RabbitVCS debugging toolsShow a file's log informationShow changes between paths and revisionsShow changes between revisionsShow changes from previous revisionShow logShow new version on the right sideShow unversioned filesShowing Revisions:SizeSkippedStatusSteal the locksStop on copySwitchSwitch...Test MergeTextText ChangeText StatusThanks:The debug menu is used to diagnose problems with RabbitVCS itselfThe from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There was a problem saving your properties.There was an error creating the repository. Make sure the given folder is empty.To:Type:URLURL/Path:URL:Unable to retrieve properties listUnable to set new value for property.UnchangedUnknownUnlockUnlockedUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...UpdatedUpdating...Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.Valid:ValueValue:View diff against baseView diff against previous revisionView diff against working copyView diff as side-by-side comparisonView diff between files/foldersView diff between revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemView unified diffWhere do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must supply a destination path.the selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-01-27 10:44-0500 PO-Revision-Date: 2010-04-05 19:46+0000 Last-Translator: Jonathon Fernyhough Language-Team: English (United Kingdom) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2010-11-26 14:08+0000 X-Generator: Launchpad (build Unknown) %i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished(no author)100Add MessageAffected File(s) (double-click to compare with base)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Commit to:Create copy fromDifferences (double-click to compare with base)Edit Property DetailsFiles to lockFirst:Folder NameFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. OptionsPlease add your authentication detailsPlease describe why you are locking these filesPlease provide your ssl certification filePrevious MessagesProgram used to browse repositoriesProgram used to compare filesProperties for:RabbitVCSRemote URI:RepositoryRevision RangeRevisionRevisions TableSecond:Switch DetailsTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromUpdate DepthVersion InformationWorking Copy:Working CopySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSRabbitVCS ErrorA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd a new property.Add an emblemAdd to ignore listAddedAdded a folder to the repositoryAgeAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sAnnotate a fileAnnotate...AnnotatedApplies a unified diff file to the working copyApply PatchApply Patch To Directory...Apply Patch...Apply property recursivelyApplying Patch File...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBranch/tag...Browse a repository treeBrowse toBrowse to a file or folderBrowse...BugsCannot annotate a directoryChangeChange the repository location of a working copyChangedChangesCheck CertificateCheck for ModificationsCheck for Modifications...Check for modifications made to the repositoryCheck out a working copyCheckoutCheckout - %sCheckout...Choose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationClose this dialogue.CommitCommit modifications to the repositoryCompare files/foldersCompare revisionsCompare side by sideCompare the differences between two itemsCompare with baseCompare with base using side-by-side comparison toolCompare with previous revisionCompare with previous revision using side-by-side comparison toolCompare with working copyCompletedCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationConflictedCopiedCopy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to...Create Folder...Create PatchCreate Patch...Create Repository hereCreate a repository in a folderCreate folder...Creates a unified diff file with all changes you madeCreating Patch File...DateDebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDelete propertyDelete this propertyDelete this property (recursive)DeletedDenyDestination:Diff Menu...Do you want to delete the selected properties from all files and subdirectories beneath this directory?Edit authorEdit author...Edit log messageEdit log message...Edit revision properties...Edit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternalExternal ProgramsFailed LockFailed RevertFailed UnlockFile is not under version control.Fingerprint:FinishedForce an invalidate_extension_info() callFound %d item(s)From:GeneralGet LockGet Lock...HEADHelpHost:Ignore ancestryIgnore item by file extensionIgnore item by filenameImportImport - %sImport an item into a repositoryInapplicableInclude ignored filesInvalidateIssuer:Language:Limit:LineList of comparison optionsLoad/RefreshLoading...Locally lock itemsLock FilesLockedLogLog - %sLog MessageLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MergedMessageMime TypeMinimum level to logMissingModifiedMore Actions...Move to...N/ANameNew Location:New Name:New...NoNotification MessagesNumberNumber of URLs to rememberNumber of messages to rememberObstructedOmit ExternalsOnly record the mergeOpenOpen ShellOpen a fileOpen from first revisionOpen from second revisionPassword:Patch FailedPatch File AppliedPatch File CreatedPatchedPathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty ChangeProperty EditorProperty StatusProperty:RabbitVCSRabbitVCS ErrorRealm:RecursiveRefreshRefresh StatusRefresh the list of properties.Rejected PatchRelease Lock...Release lock on an itemRelocateRelocate your working copyRelocate...RenameRename...ReplacedRepository BrowserRepository paths clearedRepository successfully createdReservedResolveResolvedRestoreRestore a missing itemRestoredRevertRevert an item to its unmodified stateRevert propertyRevert property (recursive)Revert this property to its original stateRevert this property to its original state (recursive)RevertedReverts everything it seesRevisionRevision:Running Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...SSL Client CertificationSave As...Save AuthenticationSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySchedule items to be added to the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow Changes...Show LogShow RabbitVCS debugging toolsShow a file's log informationShow changes between paths and revisionsShow changes between revisionsShow changes from previous revisionShow logShow new version on the right sideShow unversioned filesShowing Revisions:SizeSkippedStatusSteal the locksStop on copySwitchSwitch...Test MergeTextText ChangeText StatusThanks:The debug menu is used to diagnose problems with RabbitVCS itselfThe from and to URL fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be moved to Deleted Items.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There was a problem saving your properties.There was an error creating the repository. Make sure the given folder is empty.To:Type:URLURL/Path:URL:Unable to retrieve properties listUnable to set new value for property.UnchangedUnknownUnlockUnlockedUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...UpdatedUpdating...Use the log dialogue to select the revisions that you wish to merge. Alternatively write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions leave the box empty.Valid:ValueValue:View diff against baseView diff against previous revisionView diff against working copyView diff as side-by-side comparisonView diff between files/foldersView diff between revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemView unified diffWhere do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must supply a destination path.the selected item(s)torabbitvcs-0.19/locale/es/000077500000000000000000000000001445560650400153015ustar00rootroot00000000000000rabbitvcs-0.19/locale/es/LC_MESSAGES/000077500000000000000000000000001445560650400170665ustar00rootroot00000000000000rabbitvcs-0.19/locale/es/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000665111445560650400212130ustar00rootroot00000000000000Ū•~ ũüđņ  & 9 N _ p ~ ‚ ;• Ņ į 1!84!m!!œ!ą!Ä!Ų!(é!" ("5"I"`"€o"đ"-˙"6-#1d#–#$¯#Ô#ë#ü#$!$7$G$^$&q$˜$Ģ$Ä$ß$ô$7%H@%-‰%:ˇ%ō%&&(& 7&C&J& N&Y& m&{& Ž&’¯&B' K'Y' i'/u' Ĩ'ą'Í'Ü'÷'?(6N(5…("ģ(Ū("í()) ) +)9) R)\) w))†)ĸ)0Š)Ú)ė).*6*O* X* f*pr*Vã*:+P+_+2g+%š+Ā+Ķ+&Ú+,,),)>,h,4z,¯,AÎ,- *-8-M-`-r-ƒ-”-Ĩ-´-Ä-Ų-ė-ũ-. .1.B. S.`.o.‚.2˜. Ë.Ö. į.ô.//;/5L/‚/™/ž/ ¤/ą/¸/Ė/ę/ú/ 000 50gB0 Ē0ļ0Å0Ö0ę011141S1[1 b1Bn1 ą1 ģ1Å1"×1 ú12)2:2K2Q2Y2 b2n2s2x2~2Ž2Ŧ2Ä2 Ë2 ×2ø2 33 !3+32373 R3 _3j3 }3ˆ33“3 œ3¨3°3"ˇ3Ú3ā3đ3 4%4.4 64@4U4 e4p4t4 y4 ‡4‘4˜4›4ą4¸4Ķ4ō455 5 '535L5 f5p5ƒ5–5›5Ą5ŗ5 Í5Ø5č5ņ566 !6 +656E6 L6V6^6m666ĩ6ž6 Ų6å6 ė6ö6 7"7B7K7S7[7r7&y7 7°7*Ė76÷7.8I8 R8\8s8‘8­8Į8á8û89)9<9X9r99§9Á9Û9 ô9˙9 :2:0Q:,‚:¯: Å:Ķ:ã:ô:ũ: ;;5;(S;|;›;¤;ģ;Î;Ķ;Ú; ę;÷; ū; << < $<0<A8<-z<*¨<$Ķ<*ø<#=AB=%„=,Ē=+×=Q>U>Y> _>i>"n>%‘>ˇ>ŋ>Æ>Í>$ā>?? 1?ú=?8@?@E@L@#c@‡@$Ļ@Ë@ë@ A!A&3A%ZA;€AŧAÛA(íA(B ?BLB#PBtB‰BÚŒBgDxD‰DžDŽDÅDÚDëDûD˙DEE\E!rE4”EEÉEF##FGF`FyFF)žFČFāFīF G'G6GÔG7äGMH/jHšH,ĩHâHųH II0INI_IzI%IŗIÍIéI J"JE:JN€J-ĪJ=ũJ#;K _KiKyK‰K™KĄKŠKšKŌKåK)L/LÍL ÔLáL ķL6ũL4MCMcM uM–MGĩM=ũM@;N'|N¤N&ŗNÚNāN éN÷N$O -O8O QO\O dO…O:OČO"ŪO1P3P PP]P vPcƒPPįP8Q QQ^QFfQ)­Q×Q íQ'÷QR:RNR0lRRL¯RüRZSvS$”SšSŌSčSüST,TDTXTjT†TĄTˇTÎTäTôTU -U;UPUjU6ˆU ŋUËU ÜUéUųU#V8V=IV‡VžV¤VŦVŋVČV#ßVWW#.WRWZW€kW ėWųW X$X%BX hXrXƒX+ XĖXÔX ŨXJëX 6Y BYMY.`YY —Y2ĸYÕYđY÷Y ˙Y ZZZ!Z)Z+;Z'gZZ ˜Z&ĻZÍZ čZōZúZ[ [![4[ F[R[o[ [‹[ ”[ĸ[ļ[ŋ[,Č[õ[ũ["\6\ V\a\ i\s\\ ž\Š\­\´\ Æ\Ô\Ũ\ā\ú\]]<]L]f]l]{] Œ] ­] Î]Û]ö] ^^^+^ H^T^ e^o^^—^ Ģ^ ļ^Ā^Ķ^ Ú^ ä^ī^ _ "_0_ H_T_ n_ z_ „_‘_Ē_Č_ æ_đ_ ų_`#`.,`[`n`,Œ`8š`ō` a a#a'Baja$„aŠaÉaäabb#:b#^b‚b!ĸbÄb$ábc$c4cKc8[c;”c4Đcd%d;dRd jdwdŠd4›d.Đd(˙d (eIeZezee˜eŸe˛eÂe ĘeÕeæeėeüe fIf,hf%•f0ģf;ėf$(g8Mg3†g6ēg3ņg[%hh„h Šh”h*™h7Äh üh i i!i08iii‰iŖi&ŗiÚjãjéjđj!k $kEk ck„k žk+¨k&Ôk.ûk:*l"elˆl%›l&Álčlųl&ũl"$mGmÂļJtbßzõ<næ,¸FAų‰?hlĐEã>_UZ@A,NœžCĨRwIĒ×DxÛ`ŋ´y%T{2b4vé"ÅoÖvpņD4QŠ'.]Ę&*™_s‡%\ HGMՊoķ;{$‘ø?Rēxī $—|ŖyˆąÚš}Sރ^ĶāäįS/å (w9k7:ĩ†Ļ!Œ‹[>3c§ũaZ ĸ= W3ŧVÜ\ÁŽt#jÄsÉ7(Æk¤…~˛°E5cß);š ôōBģQ•Ū eT. ”0Ų}rfgVØWMzîK|úui÷ HXhq#0]Uū*Ôrüd+ lL5 ‚¯a:ˇP-q›mB)Ā'CJ€`PđĄĪFá<˒ĢiN O8ŗLŦâČ&–m^˜!YI6pd-=fėYXö~K+1Gj9/ëčg"Ũ˙ u@6ęOžĮĖ“û1Ņn¨8ÍeŊ[2έí„Ō%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished100Add MessageAffected File(s) (double-click to compare with base)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Commit to:Edit Property DetailsFiles to lockFolder NameFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. OptionsPlease add your authentication detailsPlease describe why you are locking these filesPlease provide your ssl certification filePrevious MessagesProgram used to compare filesProperties for:RabbitVCSRemote URI:RepositoryRevision RangeRevisionRevisions TableTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromVersion InformationWorking Copy:Working CopySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSRabbitVCS ErrorA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd a new property.Add an emblemAdd to ignore listAdded a folder to the repositoryAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sAnnotate a fileAnnotate...Applies a unified diff file to the working copyApply PatchApply Patch To Directory...Apply Patch...Apply property recursivelyApplying Patch File...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBranch/tag...Browse a repository treeBrowse toBrowse to a file or folderBrowse...BugsCannot annotate a directoryChangeChange the repository location of a working copyCheck CertificateCheck for Modifications...Check for modifications made to the repositoryCheck out a working copyCheckoutCheckout - %sCheckout...Choose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationClose this dialog.CommitCommit modifications to the repositoryCompare files/foldersCompare revisionsCompare side by sideCompare the differences between two itemsCompare with baseCompare with base using side-by-side comparison toolCompare with previous revisionCompare with previous revision using side-by-side comparison toolCompare with working copyCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationCopy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to...Create Folder...Create PatchCreate Patch...Create Repository hereCreate a repository in a folderCreate folder...Creates a unified diff file with all changes you madeCreating Patch File...DateDebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDelete propertyDelete this propertyDelete this property (recursive)DenyDiff Menu...Do you want to delete the selected properties from all files and subdirectories beneath this directory?Edit authorEdit author...Edit log messageEdit log message...Edit revision properties...Edit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternal ProgramsFile is not under version control.Fingerprint:FinishedForce an invalidate_extension_info() callFound %d item(s)From:GeneralGet LockGet Lock...HEADHelpHost:Ignore ancestryIgnore item by file extensionIgnore item by filenameImportImport - %sImport an item into a repositoryInclude ignored filesInvalidateIssuer:Language:Limit:LineList of comparison optionsLoad/RefreshLoading...Locally lock itemsLock FilesLockedLogLog - %sLog MessageLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MessageMime TypeMinimum level to logMore Actions...Move to...N/ANameNew Location:New Name:New...NoNotification MessagesNumberNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen ShellOpen a fileOpen from first revisionOpen from second revisionPassword:Patch File AppliedPatch File CreatedPathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty ChangeProperty EditorProperty StatusProperty:RabbitVCSRabbitVCS ErrorRealm:RecursiveRefreshRefresh StatusRefresh the list of properties.Release Lock...Release lock on an itemRelocateRelocate your working copyRelocate...RenameRename...Repository BrowserRepository paths clearedRepository successfully createdReservedResolveRestoreRestore a missing itemRevertRevert an item to its unmodified stateRevert propertyRevert property (recursive)Revert this property to its original stateRevert this property to its original state (recursive)Reverts everything it seesRevisionRevision:Running Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...SSL Client CertificationSave As...Save AuthenticationSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySchedule items to be added to the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow Changes...Show LogShow RabbitVCS debugging toolsShow a file's log informationShow changes between paths and revisionsShow changes between revisionsShow logShow unversioned filesShowing Revisions:SizeStatusSteal the locksStop on copySwitchSwitch...Test MergeTextText ChangeText StatusThanks:The debug menu is used to diagnose problems with RabbitVCS itselfThe from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There was a problem saving your properties.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:Unable to retrieve properties listUnable to set new value for property.UnknownUnlockUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...Updating...Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.Valid:ValueValue:View diff against baseView diff against previous revisionView diff against working copyView diff as side-by-side comparisonView diff between files/foldersView diff between revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemView unified diffWhere do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must supply a destination path.the selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-03-19 15:25+0000 Last-Translator: RaÃēl Ricardo Amaya Language-Team: Spanish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %i día%i días%i hora%i horas%i minuto%i minutos%i mes%i meses%i segundo%i segundos%i semana%i semanas%i aÃąo%i aÃąos%s - Finalizado100AÃąadir mensajeArchivos afectados (pulse dos veces para comparar con la base)AutenticaciÃŗnDetalles de certificaciÃŗnCambiar el repositorio de su copia de trabajoArchivos cambiados (pulse dos veces para comparar con el base)Confirmar a:Editar detalles de propiedadArchivos a cerrarNombre de carpetaDe revisiÃŗnDesde URLDesde: (URL y revisiÃŗn a mezclar)Importar mensajeEnlacesMensajes de registroOpciones de registroMensajeNota: los cambios en las propiedades se aplican instantÃĄneamente. Puede revisar y deshacer los cambios usando el menÃē de contexto de cada elemento. OpcionesPor favor, aÃąada sus detalles de autenticaciÃŗnPor favor, describa el motivo por el que estÃĄ cerrando estos archivosIntroduzca su archivo certificaciÃŗn SSLMensajes anterioresPrograma usado para comparar archivosPropiedades de:RabbitVCSURI remota:RepositorioIntervalo de revisiÃŗnRevisiÃŗnTabla de revisionesA revisiÃŗnA: (URL y revisiÃŗn a mezclar)HistÃŗrico de URLsURL a la que mezclarInformaciÃŗn de versiÃŗnCopia de trabajo:Copia de trabajoLas propiedades seleccionadas serÃĄn aplicadas recursivamente.ÂŋEstÃĄ seguro de que quiere eliminar %item%?RabbitVCSError de RabbitVCSUn asistente con pasos para mezclarAcerca deSobre RabbitVCSAceptar siempreAceptar una vezAcciÃŗnAÃąadirAÃąadir emblemaAÃąadir nueva propiedad.AÃąadir un emblemaAÃąadir a la lista de ignoradosSe ha aÃąadido una carpeta al repositorioHa ocurrido un error en el complemento RabbitVCS de Nautilus. Contacte con el equipo de RabbitVCS con los detalles de error listados debajo:AnotarAnotado - %sAnotar un archivoAnotar...Aplica un archivo diff unificado a una copia funcionalAplicar parcheAplicar parche al directorio...Aplicar parche...Aplicar propiedad recursivamenteAplicando archivo de parche...ÂŋEstÃĄ seguro de que quiere limpiar su informaciÃŗn de autenticaciÃŗn?ÂŋEstÃĄ seguro de que quiere limpiar sus mensajes anteriores?ÂŋEstÃĄ seguro de que quiere borrar las rutas de su repositorio?ÂŋEstÃĄ seguro de que quiere continuar?AutenticaciÃŗnInformaciÃŗn de autenticaciÃŗn borradaAutorAutores:Rama/etiquetaRama/etiqueta...Navegar por un ÃĄrbol de repositorioNavegar enBuscar archivo o carpetaNavegar...ErroresNo se puede anotar un directorioCambiarCambiar la ubicaciÃŗn de un repositorio de una copia localComprobar certificadoComprobar si hay modificaciones...Comprobar si hay modificaciones en el repositorioObtener una copia de trabajoObtener rep.Obtener repositorio - %sComprobar...Elija este mÊtodo si ha hecho algunos cambios a la rama y desea mezclar sus cambios con otra rama.Elija este mÊtodo si desea mezclar dos ramas diferentes en su copia de trabajo.Limpiar copia de trabajoLimpiando...LimpiarPeticiÃŗn de limpieza realizada... ÂŋEmpezar limpieza de copia local?Limpiar su informaciÃŗn de autenticaciÃŗnCerrar este diÃĄlogo.ConfirmarConfirmar modificaciones al repositorioComparar archivos/carpetasComparar revisionesComparar uno al lado del otroComparar las diferencias entre los dos elementosComparar con baseComparar con base usando la herramienta de comparaciÃŗn uno al lado del otroComparar con versiÃŗn anteriorComparar con revisiÃŗn anterior usando la herramienta de comparaciÃŗn uno al lado del otroComparar con copia de trabajoLa orden de aÃąadir se ha completadoRama/etiqueta completadaObtenciÃŗn completadaLimpieza completadaConfirmaciÃŗn competadaExportaciÃŗn completadaImportaciÃŗn completadaClausura completadaMezcla completadaPrueba de mezcla completadaRelocalizaciÃŗn completadaRenombrado completadoResoluciÃŗn completadaReversiÃŗn completadaCambio completoApertura de cerrojo completadaActualizaciÃŗn completadaConfirmaciÃŗnCopiar desde la rutaCopiar desde la revisiÃŗnCopiar el URL al portapapelesCopiar un elemento a otra ubicaciÃŗn en el repositorioCopiar a...Crear carpeta...Crear parcheCrear parche...Crear aquí un repositorioCrear un repositorio en una carpetaCrear carpeta...Crea un archivo diff unificado con todos los cambios que hizoCreando fichero parcheFechaDepurarDepurar reversiÃŗnEliminarEliminar confirmaciÃŗnEliminar propiedades recursivamenteEliminar propiedadEliminar esta propiedadEliminar esta propiedad (recursivo)DenegarMenÃē de Diff...ÂŋQuiere eliminar las propiedades seleccionadas de todos los archivos y subdirectorios que estÊn por debajo de este directorio?Editar autorEditar autor...Editar mensaje de registroEditar mensaje de registro...Editar propiedades de la revisiÃŗn...Editar...Activar emblemasActivar atributos de archivoActivar comprobaciones recursivas de estadoInglÊsExportarExportar - %sExportar una copia de trabajo o repositorio sin informaciÃŗn de versionadoExportar...ExtensiÃŗnProgramas externosEl archivo no estÃĄ bajo control de versiones.Huella:FinalizadoForzar a una llamada a invalidate_extension_info()%d elemento(s) encontradosDesde:GeneralTomar cerrojoBloquearHEADAyudaEquipo:Ignorar ancestrosIgnorar elementos por extensiÃŗn de archivoIgnorar elementos por nombre de archivoImportarImportar - %sImportar un elemento en un repositorioIncluir archivos ignoradosInvalidarEmisor:Idioma:Límite:LíneaLista de opciones de comparaciÃŗnCargar/actualizarCargando...Elementos locales bloqueadosArchivos cerradosBloqueadoRegistroRegistro - %sMensaje de registroRegistroUsuario:Marcar un elemento conflictivo como resueltoMezclarAsistente de mezcladoMezclar un intervalo de revisionesMezclar dos ÃĄrboles diferentesMezclar...MensajeTipo MIMENivel mínimo de registroMÃĄs acciones...Mover a...N/ANombreNueva ubicaciÃŗn:Nuevo nombre:Nuevo...NoMensajes de notificaciÃŗnNÃēmeroNÃēmero de URLs a recordarNÃēmero de mensajes a recordarOmitir externosRegistrar sÃŗlo la mezclaAbrirAbrir terminalAbrir un archivoAbrir desde la primera revisiÃŗnAbrir desde la segunda revisiÃŗnContraseÃąa:Archivo de parche aplicadoFichero parche creadoRutaRuta:Mensajes anterioresMensajes anteriores borradosPropiedadesPropiedades - %sPropiedadCambiar propiedadEditor de propiedadesEstado de propiedadPropiedad:RabbitVCSError de RabbitVCSReino:RecursivoActualizarActualizar estadoActualizar lista de propiedades.Desblouear...Desbloquear un elementoRelocalizarReubicar copia de trabajoReubicar...RenombrarRenombrar...Navegador de repositorioRutas de repositorio borradasRepositorio creado con ÊxitoReservadoResolverRestaurarRestaurar un elemento que faltaRevertirRevertir un elemento a su estado no modificadoRevertir propiedadRevertir propiedad (recusivo)Revertir esta propiedad a su estado originalRevertir esta propiedad a su estado original (recursivo)Revertir todo lo que se veaRevisiÃŗnRevisiÃŗn:Ejecutando orden de aÃąadir...Ejecutando la orden de Rama/Etiqueta...Obteniendo repositorio...Ejecutando orden de confirmaciÃŗn...Ejecutando orden de exportar...Ejecutando importaciÃŗn...Ejecutando orden de cerrar...Ejecutando orden de mezclarEjecutando prueba de mezclaEjecutando orden de relocalizaciÃŗnEjecutando la orden de renombrar...Ejecutando orden de resolver...Ejecutando orden de reversiÃŗn...Ejecutando comando de cambioEjecutando orden de abrir cerrojo...CertificaciÃŗn de cliente SSLGuardar comoâ€ĻGuardar autenticaciÃŗnDatos guardadosPlanificar que un elemento sea eliminado del repositorioPlanificar que un elemento sea renombrado en el repositorioGestionar elementos que se aÃąadirÃĄn al repositorioSeleccionar/Deseleccionar todosSeleccione un archivoSeleccione una carpetaSeleccionar un programaPreferenciasMostrar cambios...Mostrar registroMostrar las herramientas de depuraciÃŗn de RabbitVCSMostrar informaciÃŗn de registro de un archivoMostrar cambios entre rutas y revisionesMostrar cambios entre revisionesMostrar registroMostrar archivos no versionadosMostrando revisiones:TamaÃąoEstadoRobar los cerrojosParar al copiarCambiarCambiar...Comprobar mezclaTextoCambio de textoEstado del textoAgradecimientos:El menÃē de depuraciÃŗn es usado para diagnosticar problemas en RabbitVCSSe requieren los campos de origen y destino.El campo revisiÃŗn debe ser un enteroLa ruta proporcionada no es una copia de trabajoEl/los elemento(s) se enviarÃĄn a la papelera de reciclaje.Se necesita el campo de nuevo nombreSe requiere la URL del repositorio y la ruta de destino.Se necesita el campo de direcciÃŗn del repositorio.La ubicaciÃŗn del repositorio es un campo obligatorio.Ha ocurrido un problema al guardar sus propiedades.Ha habido un error al crear el repositorio. AsegÃērese de que la carpeta dada estÃĄ vacía.A:Tipo:URL/ruta:URL:No se pudo obtener la lista de propiedadesNo se puedo establecer un nuevo valor a esta propiedad.DesconocidoAbrir cerrojoActualizarActualizar a revisiÃŗnActualizar un archivo a una versiÃŗn específicaActualizar una copia de trabajoActualizar a revisiÃŗn...Actualizando...Use el diÃĄlogo de registro para seleccionar las revisiones que desea mezclar. O escriba las revisiones manualmente, cada una separada por una coma. Puede especificar un intervalo de revisiones con un guiÃŗn. Ejemplo: 4-7,9,11,15-HEAD Para mezclar todas las revisiones, deje el campo vacío.VÃĄlido:ValorValor:Ver diff con baseVer diff con la versiÃŗn anteriorVer diff con la copia de trabajoVer diff uno al lado del otroVer diff entre archivos/carpetasVer diff entre revisionesVer ayudaVer o cambiar las preferencias de RabbitVCSVer las diferencias entre dos archivosVer las modificaciones realizadas a un archivoVer las modificaciones del archivo desde el Ãēltimo cambioVer las propiedades de un elementoVer diff unificadoÂŋDÃŗnde quiere copiar la selecciÃŗn?ÂŋA dÃŗnde quiere mover la selecciÃŗn?Copia de trabajoSíDebe proporcionar una ruta de destino.el/los elemento(s) seleccionado(s)arabbitvcs-0.19/locale/es_CL/000077500000000000000000000000001445560650400156575ustar00rootroot00000000000000rabbitvcs-0.19/locale/es_CL/LC_MESSAGES/000077500000000000000000000000001445560650400174445ustar00rootroot00000000000000rabbitvcs-0.19/locale/es_CL/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000470221445560650400215650ustar00rootroot00000000000000Ū•*l ŧđ ņ ˙ 6L1g/™ÉÛķ%:(Js‰´Ã-Ō67*P${ ˇÉßī&/Vi‚–ąHÅ.4D S_f j uƒ–œ Ĩŗ à Ī?Ų65P"†Š"¸Ûâ ë õ ˙ 0%V^p yp‡VøO e t 2| %¯ Õ &Ü ! !!0!C!U!f!w!ˆ!—!§!ŧ!Ī!ā!ō!""%" 6" C"N"U"d"2w"Ē"š"Ė"ã"ú"## %#2#9#M#U# Z#g# o#}#Œ#Ŗ#Â# Ę#×# Ū#Bę# -$7$@$ R$ ^$ l$ z$‡$$Ą$§$¯$Č$ Ņ$Ũ$$â$%%&% -% 9% Z%g%}% š%Ĩ% ­%ˇ%ž% Ã%Î% á%ė%ķ%÷%&&"&2&8&H&c&}&†&& •&Ÿ&§&°&´& š&Ã&Ę&ā&û& '%'4'J' O' Z'd'i'{' •' '°'š' É' Ķ'Ũ'å'ô'((%( @( L(X( _(i(r(‹(Ģ(ŗ(ŧ(Ä(Í(ë(&ō()")=)F)]){)—)ą)Ë)å)ũ)*&*B*\*w*‘*Ģ*Å* Ų*.ä*2+0F+w+ +›+Ģ+ŧ+Å+Î+ė+"õ+,/,B,J,`, p,}, ‘,œ, Ą,­,-ĩ,$ã,*-$3-*X-ƒ-Aĸ-%ä-, .s7.QĢ.ũ./ / //#/*/3/:/$M/r/ˆ/ž/ Ļ/˛/¸/ ŋ/ É/!Ķ/%õ/0:0#>0b0w0bz0Ũ1 í1ų12*2@24`2C•2Ų2î2)313L3e3)y3Ŗ3ģ3Û3û3 464CQ4•47°4-č45/5B5\5l5†5Ą5)ē5ä5!ū5' 6"H6k6Dƒ6$Č6 í6÷6 7#757=7E7U7h7…7Ž7 •7Ą7 ŗ7Ŋ7DÅ78 8CC8$‡8Ŧ8(ģ8ä8ę8 ķ8 9 99=59s9|9’9¨9bÃ9S&:z: –:Ŗ:MĢ:*ų:$;$3; X;b;u; ‘;˛;Ä;á;õ; <<,-<Z<s<< Ą<Â<Ô<č< = ==#=5=;K=‡=ĸ= ģ=Ü=#÷=>!>)>8>A> X>b>j> s>}>Œ>>)ē>ä>ė>ū> ?M? c?n?v?‰?™?Ē?Ŋ? Í?Ø?ō?ų?@@"@7@-=@k@@“@ œ@"Ē@ Í@Ú@*õ@ A*A9AAAJA QA]A{A A —AĄA °AēA-ÍAûABB 8B YB eBoB wBB ŠB•B™B  BŽBˇBŅBíB CC,CGC MC [ChCmCC CŠC ēCÄC ÛCæC õC˙CD$D DDPD mDyDŠD™D ĢD$ˇDÜDüDE E E(#ELE3dE ˜EĸEģE ÄE ŌEķEF "F 0F >F LF ZFfF)„FŽFŊFÔFæF÷FG,$G3QG7…GŊGÛGņGHH)H5;HqH)ƒH/­HŨHđHøHI%I;I!QIsIyIŠI2›I'ÎI3öI;*J+fJ$’JDˇJ0üJ7-KgeK^ÍK,L3L 9L CL OL [L gL tLL4šLĪL ëL MM(M.M5M EM.OM*~MŠMČM#ĖMđM Nš§¨ô #O(5Ų”pž]Ķc(ƒ=Š!oMēÉ,ė+ų7_rŽ!ÚsZĮ6/ Č.E{>č™Ũ¤˜B÷†))"åA…ļ^ë0ødЏ%2ŪjÃ;“˙úNŊé˞ĸiˋK –Ģ9’ Ą@ˆC‡Īî&PŸĐ~vęŦ?-}Üxą đũGī­\€ážHšqF›‚&ÎXlŽ ŅkâzÍf|D× Ļw3 ÔU$û՜‘ØūĀTÅ4R:įŗ´aJ¯ō"h1y#ŒĩŖ ß'`*Û['YQģķŧ‰IÖ äbeÁ$WņõĨV<ÆŌŋ%ˇ*„tüL8ãnʏuÄö S•Âāgǰ—m íæ%s - Finished(no author)Add MessageAffected File(s)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to see diff)Commit to:Create copy fromEdit Property DetailsFiles to lockFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLog MessagesLogging OptionsMessageOptionsPlease add your authentication detailsPlease describe why you are locking these filesPrevious MessagesProgram used to browse repositoriesProgram used to compare filesProperties for:RepositoryRevision RangeRevisionRevisions TableSwitch DetailsTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromUpdate DepthVersion InformationWorking CopyAre you sure you want to delete %item%?A wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd an emblemAdd to ignore listAddedAnnotateAnnotate - %sAnnotate a fileAnnotate...AnnotatedAre you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Browse toBrowse...CancelledCannot annotate a directoryChange the repository location of a working copyChangedCheck CertificateCheckoutCheckout - %sChoose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationCommitCommit modifications to the repositoryCompletedCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationConflictedCopiedCopy From PathCopy From RevisionCopy an item to another location in the repositoryCopy from HEADCopy from revisionCopy from working copyCreate Repository hereCreate a repository in a folderDateDebugDebug RevertDeleteDelete ConfirmationDeletedDenyDestination:Edit...Empty MessageEnable emblemsEnable file attributesEnable recursive status checksEnglishExit ServiceExportExport - %sExport a working copy or repository with no versioning informationExtensionExternalExternal ProgramsFailed LockFailed RevertFailed UnlockFingerprint:FinishedFound %d item(s)From:GeneralGenerating Annotation...Get LockGet Lock...HelpIgnore all files with this extensionIgnore an itemIgnore ancestryImportImport - %sImport an item into a repositoryInapplicableInclude ignored filesInvalid revision informationInvalidateIssuer:Language:Limit:LineLoading...Locally lock itemsLock FilesLockedLogLog - %sLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MergedMessageMime TypeMissingModifiedN/ANameNew Name:New...Notification MessagesNumber of URLs to rememberNumber of messages to rememberObstructedOmit ExternalsOnly record the mergeOpenOpen ShellPassword:PathPrevious MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty StatusProperty:RecursiveRefreshRefresh StatusRelease Lock...Release lock on an itemRelocateRelocate your working copyRelocate...Remove LockRenameRename...ReplacedRepository paths clearedRepository successfully createdResolveResolvedRestoreRestoredRetrieving Log Information...RevertRevert an item to its unmodified stateRevertedReverts everything it seesRevisionRunning Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...Save AuthenticationSaved DataSchedule an item to be added to the repositorySchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow LogShow a file's log informationShow logShow new version on the right sideShow unversioned filesShowing Revisions:SkippedStart/Restart ServiceSteal the locksStop on copyTest AsynchronicityTest MergeTextText StatusThanks:The from and to url fields are both required.The from revision field is required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There have been modifications to your working copy. If you copy from the HEAD revision you will lose your changes.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:UnchangedUnknownUnlockUnlockedUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...UpdatedUpdating...ValueValue:View DiffView helpView or change RabbitVCS settingsView the modifications made to a fileView the properties of an itemYesYou must supply a destination path.the selected item(s)toProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2009-03-04 14:35-0500 PO-Revision-Date: 2009-04-01 00:36-0300 Last-Translator: Camilo Flores Language-Team: Spanish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); %s - Finalizado(sin autor)Agregar MensajeArchivos afectadosAutenticaciÃŗnDetalles del CertificadoCambiar el repositorio de tu copia de trabajoArchivos Modificados (doble click para comparar diferencias)Enviar hacia:Crear copia desdeEdita los detalles de la propiedadArchivos a bloquearDesde la versiÃŗnDesde la URLDesde: (URL y versiÃŗn a fusionar)Importar mensajeMensajes de la bitÃĄcoraOpciones de la bitÃĄcoraMensajeOpcionesPor favor agrega tus detalles de autenticaciÃŗnPor favor describe por quÊ estÃĄs bloqueando estos archivosMensajes anterioresPrograma a usar para navegar en los repositoriosPrograma a usar para comparar archivosPropiedades para:RepositorioRango de versionesVersiÃŗnTabla de versionesDetalles del SwitchHasta la versiÃŗnDesde: (URL y versiÃŗn a fusionar)Historia de la URLURL desde la cual fusionarProfundidad de la actualizaciÃŗnInformaciÃŗn de la versiÃŗnCopia de trabajoÂŋEstÃĄs seguro de eliminar %item%?Un asistente con pasos para fusionarAcerca deAcerca de RabbitVCSAceptar permanentementeAceptar por ahoraAcciÃŗnAÃąadirAgregar EmblemaAgregar un emblemaAÃąadir a lista de ignoradosAÃąadidoAnotarAnotar - %sAnotar un archivoAnotar...AnotadoÂŋEstas seguro de querer eliminar tu informaciÃŗn de autenticaciÃŗn?ÂŋEstÃĄs seguro de querer eliminar tus mensajes previos?ÂŋEstÃĄs seguro de querer reestablecer las rutas de tu repositorio?ÂŋEstÃĄs seguro de querer continuar?AutenticaciÃŗnInformaciÃŗn de autenticaciÃŗn eliminadaAutorAutores:Navegar haciaNavegar...CanceladoImposible anotar el directorioCambiar la ubicaciÃŗn del repositorio de una copia de trabajoCambiadoComprobar certificadoDescargar repositorioDescargar repositorio - %sEscoge este mÊtodo si has hecho cambios a un branch y deseas fusionar tus cambios con otro branchEscoge este mÊtodo si deseas fusionar dos branch diferentes en tu copia de trabajoLimpiar tu copia de trabajoLimpiando...LimpiarLimpieza Solicitada... ÂŋDeseas comenzar la limpieza de tu copia de trabajo?Eliminar tu informaciÃŗn de autenticaciÃŗnEnviar cambiosEnviar modificaciones al repositorioCompleto.AÃąadir CompletadoComando Branch/tag exitoso.Descarga de repositorio completaLimpieza CompletaEnvío de cambios completadoExportar CompletadoImportar CompletadoBloqueo CompletadoFusiÃŗn completaPrueba de factibilidad de fusiÃŗn completadoRelocalizaciÃŗn CompletaCambio de nombre exitoso.Resolver CompletadoReversiÃŗn de cambios completadaSwitch CompletadoDesbloqueo CompletoActualizaciÃŗn exitosa.ConfirmaciÃŗnEn conflictoCopiadoCopiar desde rutaCopiar desde versiÃŗnCopiar un elemento a otra ubicaciÃŗn dentro del repositorioCopiar desde versiÃŗn HEADCopiar desde la versiÃŗnCopiar desde la copia de trabajoCrear un repositorio aquíCrear un repositorio en una carpetaFechaDepurarRevertir DebugEliminarEliminar confirmaciÃŗnEliminadoDenegarDestino:Editar...Mensaje vacíoActivar emblemasActivar atributos de archivoActivar comprobaciÃŗn de estado recursivaInglÊsTerminar ServicioExportarExportar - %sExportar tu copia de trabajo o repositorio sin informaciÃŗn de versionamientoExtensiÃŗnExternoProgramas ExternosBloqueo fallidoRevertir fallidoDesbloqueo fallidoHuella digital:FinalizadoEncontrado %d elemento(s)Desde:GeneralGenerando AnotaciÃŗn...BloquearSolicitar bloqueo...AyudaIgnorar todos los archivos con esta extensionIgnorar un elementoIgnorar antecesoresImportarImportar - %sImportar elemento a un repositorioNo aplicableIncluir archivos ignoradosInformaciÃŗn no vÃĄlida sobre la versiÃŗn.InvalidarReportado por:Idioma:Límite:LíneaCargando...Bloquear elementos localmenteBloquear ArchivosBloqueadoBitÃĄcoraBitÃĄcora - %sBitÃĄcoraNombre de usuario:Marcar un elemento en conflicto como resueltoFusionarAsistente de FusiÃŗnFusionar un rango de versionesFusionar dos ÃĄrboles diferentesFusionar...FusionadoMensajeTipo MIMEFaltanteModificadoN/DNombreNuevo nombre:Nuevo...Mensajes de notificaciÃŗnCantidad de URLs a recordarCantidad de mensajes a recordarObstruídoOmitir los ExternosRegistrar sÃŗlo la fusiÃŗnAbrirAbrir ConsolaContraseÃąa:RutaMensajes anterioresMensajes previos eliminadosPropiedadesPropiedades - %sPropiedadEstado de la PropiedadPropiedad:RecursivamenteRefrescarRefrescar EstadoLevantar bloqueo...Levantar bloqueo de un elementoRelocalizarReubicar tu copia de trabajoReubicar...Levantar BloqueoCambiar nombreCambiar nombre...ReemplazadoRutas del repositorio reestablecidasRepositorio creado exitosamenteResolverResueltoRestaurarRestauradoRecuperando informaciÃŗn de la bitÃĄcoraRevertir modificacionesRevertir un elemento a un estado sin modificacionesRevertidoRevertir todo lo que veaVersiÃŗnAÃąadiendo...Ejecutando el comando Branch/tagDescargando repositorio...Enviando cambios...Exportando...Importando...Bloqueando...Fusionando...Ejecutando Ejecutando relocalizaciÃŗn...Ejecutando comando de cambio de nombre...Resolviendo...Revirtiendo cambios...Ejecutando SwitchDesbloqueando...Guardar autenticaciÃŗnInformaciÃŗn guardadaAgendar un elemento a aÃąadir al repositorioAgendar eliminaciÃŗn de un elemento del repositorioAgendar cambio de nombre de un elemento del repositorioSeleccionar / Descartar todosSelecciona un archivoSelecciona una carpetaElije el programaConfiguraciÃŗnMostrar bitÃĄcoraMostrar la informaciÃŗn de la bitÃĄcora de un archivoMostrar historialMostrar la nueva versiÃŗn al lado derechoMostrar archivos fuera del control de versionesMostrar versiones:OmitidoIniciar/Detener ServicioRomper los bloqueosDetenerse en la copiaProbar AsincronicidadComprobar factibilidad de fusiÃŗnTextoEstado del TextoAgradecimientos:Son necesarios los campos "desde" y "hasta" la urlEs necesario el campo "desde versiÃŗn".El campo "desde version" debe ser un nÃēmero enteroLa ruta proporcionada no corresponde a una copia de trabajoLos elementos serÃĄn enviados a la PapeleraEs necesario el campo "nuevo nombre"Se necesita el campo de la URL del repositorio y la ruta de destino.Es necesario el campo de la URL del repositorio.Es necesario el campo de la ubicaciÃŗn del repositorio.Se han detectado cambios en tu copia local. Si actualizas desde la versiÃŗn HEAD perderÃĄs los cambios.Hubo un error al crear el repositorio. AsegÃērate de que la carpeta especificada estÊ vacía.Hasta:Tipo:URL/Ruta:Sin cambiosDesconocidoDesbloquearDesbloqueadoActualizarActualizar segÃēn versiÃŗnActualizar un archivo segÃēn una versiÃŗn particularActualizar copia de trabajoActualizar segÃēn la versiÃŗn...ActualizadoActualizando...ValorValor:Ver DiferenciasVer ayudaVer o modificar la configuraciÃŗn de RabbitVCSVer las modificaciones hechas a un archivoVer propiedades de un elementoSíDebes ingresar una ruta de destino.los elementos seleccionadoshaciarabbitvcs-0.19/locale/fa/000077500000000000000000000000001445560650400152605ustar00rootroot00000000000000rabbitvcs-0.19/locale/fa/LC_MESSAGES/000077500000000000000000000000001445560650400170455ustar00rootroot00000000000000rabbitvcs-0.19/locale/fa/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000024541445560650400211660ustar00rootroot00000000000000Ū•œx y‡™´ÅÍ Õ ā ęôû   ž#âũ *,Wgv–Ļ ˇÃĖŪđ+    %s - FinishedRepositoryVersion InformationCompleted UpdateEdit...EnglishLoading...Mime TypeNew Name:New...PathPropertiesRenameSizeUpdating...Project-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-03-14 15:29+0000 Last-Translator: Hamed Nemati Language-Team: Persian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %s - ŲžØ§ÛŒØ§Ų† ÛŒØ§ŲØĒŲ‡Ų…ØŽØ˛Ų†Ø§ØˇŲ„Ø§ØšØ§ØĒ Ų†ØŗØŽŲ‡Ø¨Ų‡â€ŒŲ‡Ų†Ú¯Ø§Ų…â€ŒØŗØ§Ø˛ÛŒ ÚŠØ§Ų…Ų„ Ø´Ø¯ŲˆÛŒØąØ§ÛŒØ´...Ø§Ų†Ú¯Ų„ÛŒØŗÛŒØ¯Øą Ø­Ø§Ų„ Ø¨Ø§ØąÚ¯Ø°Ø§ØąÛŒ...Ų†ŲˆØš Ų…Ø§ÛŒŲ…Ų†Ø§Ų… ØŦدید:ØŦدید...Ų…ØŗÛŒØąŲ…Ø´ØŽØĩŲ‡â€ŒŲ‡Ø§ØĒØēÛŒÛŒØą Ų†Ø§Ų…Ø§Ų†Ø¯Ø§Ø˛Ų‡â€ŒØ¯Øą Ø­Ø§Ų„ Ø¨Ų‡â€ŒŲ‡Ų†Ú¯Ø§Ų…â€ŒØŗØ§Ø˛ÛŒ...rabbitvcs-0.19/locale/fi/000077500000000000000000000000001445560650400152705ustar00rootroot00000000000000rabbitvcs-0.19/locale/fi/LC_MESSAGES/000077500000000000000000000000001445560650400170555ustar00rootroot00000000000000rabbitvcs-0.19/locale/fi/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000036211445560650400211730ustar00rootroot00000000000000Ū•",/<øų  / :GXo v€‰ Ž™ ĄĢ ģ Æ ÔŪáôų  "27<@ÄC!'/ JTgx’ – § Ŧ¸ ŋË áí ü !'8@Ufx}„‹ " ! ActionAddAuthorChangeCommitCopy URL to clipboardCopy to...Create PatchCreate folder...Creating Patch File...ExportExtensionFinishedLineLoading...MessageMime TypeMore Actions...Move to...New Location:New Name:NoPatch File CreatedPathRenameRevisionSave As...Select a FileSelect a FolderSizeTextYestoProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-09-02 20:14+0000 Last-Translator: Jani Välimaa Language-Team: Finnish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) ToimintoLisääTekijäMuutaToimitaKopioi URL leikepÃļydälleKopioi...Luo paikkatiedostoLuo hakemisto...Luodaan paikkatiedosto...VieLaajennusValmisRiviLadataan...ViestiMIME-tyyppiLisää toimintoja...Siirrä ...Uusi sijainti:Uusi nimi:EiLuotiin paikkatiedostoPolkuNimeä uudelleenRevisioTallenna nimellä...Valitse tiedostoValitse hakemistoKokoTekstiKylläkohderabbitvcs-0.19/locale/fr/000077500000000000000000000000001445560650400153015ustar00rootroot00000000000000rabbitvcs-0.19/locale/fr/LC_MESSAGES/000077500000000000000000000000001445560650400170665ustar00rootroot00000000000000rabbitvcs-0.19/locale/fr/LC_MESSAGES/RabbitVCS.mo000066400000000000000000001115771445560650400212160ustar00rootroot00000000000000Ū•ōŦĄ<Ā)Á) É)Ô)Ú)ã)ô)**)*<*Q*b* s* *‹*2*Â*Õ*;ä* +6+1Q+8ƒ+ŧ+Ņ+î+,9,V,#s,—,Ŧ,ŋ,Ô,(ä,2 -@-V-f-z-‘-Š-ŋ-€Î-O.^. w.6ƒ.1ē.ė./$/=/T/e/€/“/Ĩ/Â/Ø/č/˙/ 00&00W0j0ƒ0ĸ0ˇ0WË0ŧ#17ā172rP2HÃ2: 3G3g3m3}3 Œ3 ˜3 ¤3˛3š3 Ŋ3Č3 Ü3 ę3ô3 4’(4ģ4 Ä4Ō4 â4/î45-5H54]5?’56Ō55 6"?6#b6"†6Š6°6¸6 ŋ6Í6Õ6Ū6 ÷67 7&7+7270N77‘7.Ŧ7Û7ô78 8p8V8Fä8+919G9V9^9%d9Š99Ŗ9Š9&°9×9í9)˙9):4;:p:A:Ņ: ë:ų: ;;.;>;O;`;q;€;›;Ģ;Ā;Ķ;ä;ô;<<(<9<K<\< w< „<‘<Ą<°<Ã<2Ų< =2= Q=\=m=}=”=´=5Å=û=>> >> >4>R>b>~> “>´> š>gÆ>.?6? E?Q?`? o?|??Ą?Ŋ? Ä?Ī?á?đ?@&@ -@B9@ |@ †@@ĸ@ š@"Ä@ į@ô@ũ@)AA-AoA€A†AŽA —AŖA§A­A˛AˇAŧAÂAÉA ŲAæABB #B /BPBfB |B‡BB–B›B ļBÃB ËBÖB éBôBûB CC C"&CICZC`CpC‹CŖCŊCÆCÎC ×CáC ÷CDD DD D .D8DIDNDdDkD†DĨD´DĘD ĪD ÚDæDëDņDE E(E8EAEQEaE rE|E E‹E ›E ŠE ļEÄE ËEÕEŨEņEF F5FEF]FfF FF§F¯FÂFÜF,öF#G *G4GGGVGoG G›G¤G&ĒGŅGÚGęGōG H&H!7HYHiH*…H6°HįHI II%*IPI`IwIIŠIÃIŨI÷IJ%J>JQJmJ‡J JŧJÖJīJ K$K=K BKMKaK jK2uK0¨K,ŲKL L*L:LKLdLmL}L†LĨLÃL&âL( M2MQMdM!mMMĻMšMžMÄMËMÚMęM"ũM! NBN_N uN ‚N N™N NŠNąN ļNÁN ÆNAŌN-O*BO*mO˜OAˇO%ųO,P+LPAxPQēP QQQ"Q%>QdQlQ sQ~Q†QQ$ QÅQ7ÛQ)R=RSR kRwRú‘SŒT‘T˜TžTĨT#ŧTāT$˙T$UDU `U!jU&ŒU%ŗU;ŲUV-4V(bV(‹V ´VÁVJÅVWWW%W-W6W?WDWLWPWTWZWcWiWqWvWW”WĨ—W=YCYLYRY[YoY€Y“Y¨Y¸YĪYæY ûY ZZ;ZWZqZP‡ZØZđZ3[MB[[§[Å[Û[4û[-0\)^\ˆ\§\Ŋ\Ø\.ė\7]S]p]†] Ą]Â]â]ū]Ë ^Ų^"č^ _?_8Y_’_ ¯_4Đ_``0`I`_`#n`’`Ŧ`Ŋ`Ú` đ`ü`,aBa\a(zaŖaŊaiÕaÂ?bRcSUcŠcL+d;xd!´d Ödād÷de!e9eJeQeYe meŽeĸe'ļe ŪeŽ˙eŽf ļfÃf Öf7áfg'3g%[gKgHÍg>h;Uh%‘h*ˇh*âh iii %i 3i=iFibi&qi ˜iĨiĒi˛i,Ōi˙ij77jojŒjŸj¨j˜ˇjmPkSžkll ;lHlQl,Yl †l ląlšl%Ál!įl m-!mOm$em'Šm6˛m!ém nn,n?nRncnrnˆnžn´nĘnÛnķn oo.oGo\oko„o•o!ŦoÎo éoöo p"p"=p9`pšpFˇpūp q"q9q!OqqqJ†qŅqÖqŨqãq ōqüq)rEr'^r†r*ĸrÍrÕr€îr oszsŽsžsąsÆsÜsųs*tDt MtYtlt ‚t2ŖtÖt ßtKít9u BuLu0`u ‘uœu ŧuČuŅu.Øu\vdv{v „vŽv vĩvšvĀvÅvĘvĐvØvāvõv) w'6w^wgw!xwšw¸w Îw Øwäwėw!ōwx (x 3xAxax zx †x“xĻxĩx-Ëxųx yy!-y Oy!py ’yœy¤y ­yˇyÖyčyėy đyūyz z&zÕ€ 1€ ;€G€0^€€$Ĩ€)ʀ&ô€$*@*k,–#Á&၂..‚)]‚"‡‚%Ē‚/Ђ"ƒ/#ƒ$Sƒxƒ ‘ƒƒąƒЃåƒ3üƒ10„b„"u„˜„ą„ʄå„ … ……-1…-_…3…'Á…<é…-&†T†r†&‡†$ކ͆í†ô†ú†‡‡&‡*>‡*i‡!”‡ļ‡·é‡ũ‡ ˆˆ %ˆ0ˆ5ˆFˆLˆY[ˆ)ĩˆ*߈+ ‰"6‰CY‰%‰0ÉAô‰M6Ši„ŠîŠõŠûŠ6‹?8‹x‹€‹ ‹›‹Ŗ‹ ˛‹3Ķ‹#ŒG+Œ9sŒ!­Œ!ΌņŒHEJސ•¤"Ŧ>Ī!+01\*ސš2ʐ)ũ,'‘LT‘%Ą‘-Į‘&õ‘)’F’W’^[’ ē’Į’В ؒ 㒠ī’ų’ ““““ “ ,“9“H“ M“Z“z“íE}4~8kŖpJåšn5›ĢL ЧÕÁĮ!_Ärĩö[ĘRUĪëLę-ņ<ß]Ŋtjķ‡Ė…ÍĖGƃ Ģč„Cڇ­ˇo­ÕXÖđ žaéč‰m•9Yq@6Øđ aŦib™;tí—Oŗ°ˆļ€*ĻžD"ņÔpOëPĩˆuÉ1Ō3^Į–Åé7i`l+Q/VÛh&"ģĐyõ`°´ĘĒSĶŦō'ŌefVMTÃjŲĄߊŽ=m^䛨|‘1dšėH>‹áz0[‚u; ôgˇüK(ÄU¯XŖS×vT{8„ČæÎ>Ā:‘ŪJÁ ęŧËû=҆Ü]øGA)%› KŨāÜ# gPCEî¨ËēÖQ@¤ģšMŸ˛”†WÔœŠũ}FŊw_äú‚˛|\&ãy¸î2{6Ķâ’rwÅNâ~!īŠqųŒ.ŋĻŽį(Č.´*ŅZs§'%A’…“ąxb)v¤?Û œD3/?n7cHž5Žž™•ЉŲ#hŧ÷$+ŋ— ļxWo¨ Ö-z,ƒFŽ˜Bė ˙ÚdŨŒãÎÂ×IĄ‹l:ūB$ IæēfR˜ō ĨŸ0¯ĸ9ZNĸ4“csįÍ<īÉ\ĨeąY,ŪƔk¸åšĪ2Ēá%I:%M%P%a %I:%M%p%b %d%b %d %Y%d minute(s) ago%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished(no date)100A conflict was found in the following file:Add MessageAdd TagAffected File(s) (double-click to compare with base)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Checker type:Clean your RepositoryCommit to:Configuration EditorConfigure the program to resolve conflicted files.Edit Property DetailsEnter Name and Email DetailsFiles to lockFolder NameFrom RevisionFrom URLFrom: (URL and revision to merge)Ignore and exclude files from being trackedImport MessageLocale: Log MessagesLogging OptionsMark Conflict AsMemory usage: MessageNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. OptionsOther InformationPathPlease describe why you are locking these filesPlease provide your ssl certification filePrevious MessagesProcess ID:Program used to compare filesProperties for:RabbitVCSRemote RepositoriesRemote URI:RepositoryReset your RepositoryRevision RangeRevisionRevisions TableTag DetailTagsTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromVersion Control SystemsWorking Copy:Working CopyHard - Matches the working tree and index to that of the tree being switched toMerge - Resets the index to match the tree recorded by the named commit, and updates the files that are different between the named commit and the current commit in the working treeMixed - Reset the index but not the working treeSelected properties will be applied recursively.Soft - Does not touch the index file or working tree at all, but requires them to be in good working orderAre you sure you want to delete %item%?RabbitVCS ErrorA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept MineAccept OnceAccept TheirsActionAddAdd EmblemAdd a new property.Add an emblemAdd line:Add to ignore listAdded a folder to the repositoryAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sAnnotate a fileAnnotate...Applies a unified diff file to the working copyApply Patch...Apply property recursivelyApply remote changesApply remote changes prior to local changes (rebase)Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?Are you sure you want to delete %s?Authentication information clearedAuthorAuthor:BranchBranch/tag...Branch:BranchesBrowse a repository treeBrowse toBrowse to a file or folderBrowse...BugsCancelCannot annotate a directoryChange the repository location of a working copyCheck CertificateCheck for Modifications...Check for modifications made to the repositoryCheck out a working copyChecking out %s...CheckoutCheckout...Choose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Choose this method if you wish to reintegrate a branch into the trunk.CleanClean up working copyCleaning Up...CleanupClearClear your authentication informationCloneClose this dialog.ColorCommitCommit modifications to the repositoryCompare files/foldersCompare revisionsCompare the differences between two itemsCompare with baseCompare with base using side-by-side comparison toolCompare with previous revisionCompare with previous revision using side-by-side comparison toolCompare with working copyCompleted AddCompleted CheckoutCompleted CleanCompleted CleanupCompleted CloneCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted Mark as ResolvedCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResetCompleted RevertCompleted RollbackCompleted StageCompleted UnlockCompleted UnstageCompleted UpdateCompleted repository setupConfig file:ConfirmationContent status:Copy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to clipboardCopy to clipboard the full data of these revisionsCopy to...Create Folder...Create Patch...Create Repository hereCreate a repository in a folderCreate folder...Creates a unified diff file with all changes you madeDateDate:DebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDelete propertyDelete property (recursive)Delete this propertyDelete this property (recursive)DenyDiff Menu...Do you want to delete the selected properties from all files and subdirectories beneath this directory?Dry runEdit ConflictsEdit authorEdit author...Edit conflictsEdit detailsEdit log messageEdit log message...Edit revision properties...Email:Enable GitEnable SubversionEnable emblemsEnable file attributesEnable recursive status checksExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternal ProgramsFetch from all remotesFetch/PullFile is not under version control.Fingerprint:FinishedForceForce an invalidate_extension_info() callFound %(changed)d changed and %(unversioned)d unversioned item(s)Found %d item(s)From:GeneralGet LockGet Lock...GitGraphHEADHelpHostHost:IgnoreIgnore ancestryIgnore file:Ignore item by file extensionIgnore item by filenameImportImport - %sImport an item into a repositoryInclude ignored filesInitialize RepositoryInvalidateIssuer:Limit:LineList of comparison optionsLoad/RefreshLoadingLoading...Locally lock itemsLock FilesLockedLog - %sLog MessageLoggingMark ResolvedMark a conflicted item as resolvedMark as ResolvedMergeMerge AssistantMerge a range of revisionsMerge into local branchMerge two different treesMerge...MessageMessage:Mime TypeMinimum level to log:Move to...N/ANameName and EmailName:New Location:New Name:No active branchNoneNotification MessagesNumberNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen ShellOpen a filePathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty EditorProperty StatusProperty status:Property:PushRabbitVCSRabbitVCS ErrorRabbitVCS GitRabbitVCS HgRabbitVCS SVNRealm:RecursiveRefreshRefresh InformationRefresh StatusRefresh the list of properties.Reintegrate a branchRelease Lock...Release lock on an itemRelocateRelocate your working copyRelocate...Remote Repository ManagerRemotesRemove directoriesRemove ignored files, tooRemove only ignored filesRemove untracked files from the working treeRenameRename...Repository BrowserRepository URLRepository paths clearedRepository successfully createdRepository:ReservedResetReset current HEAD to specified state.ResolvedRestart CheckerRestoreRestore a missing itemRevertRevert an item to its unmodified stateRevert changes from this revisionRevert propertyRevert property (recursive)Revert this property to its original stateRevert this property to its original state (recursive)Reverts everything it seesRevisionRevision:Rollback To RevisionRollback to specified revision numberRolling Back...Running Add Command...Running Clean Command...Running Clone Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge Command...Running Merge TestRunning Relocate Command...Running Rename Command...Running Reset Command...Running Resolved Command...Running Revert Command...Running Stage Command...Running Unlock Command...Running Unstage Command...SSL Client CertificationSaveSave As...Save AuthenticationSave _AsSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySchedule items to be added to the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSetting up repository...SettingsShow Changes...Show LogShow RabbitVCS debugging toolsShow a file's log informationShow and edit property detailsShow changes against previous revisionShow changes between paths and revisionsShow changes between revisionsShow ignored filesShow logShow new version on the left sideShow unversioned filesShowing Revisions:SizeStageStatusStatus CheckerSteal the locksStep 1: Merge TypeStep 2: Merge a Range of RevisionsStep 2: Merge two different treesStep 2: Reintegrate a BranchStep 3: Final OptionsStop CheckerStop on copySwitch...TagTag ManagerTagger:TagsTest MergeTextText StatusThe debug menu is used to diagnose problems with RabbitVCS itselfThe from and to url fields are both required.The from revision field must be an integerThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The requested file or folder does not exist.There was a problem saving your properties.There was an error communicating with the status checker service.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL:Unable to retrieve properties listUnable to set new value for property.UnknownUnlockUnresolvedUnstageUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate the selected path by reverse merging the changesUpdate the selected path to this revisionUpdate to revision...Update to this revisionUpdating...Use the following macros to configure the merge tool: %base - The common ancestor of the two files to be merged. %mine - The file you modified in your working copy. %theirs - The file being merged into your working copy. %merged - The file to store the merged result.Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.VCS:Valid:ValueValue:View diff against baseView diff against previous revisionView diff against working copyView diff as side-by-side comparisonView diff between files/foldersView diff between revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemWhat revision/branch do you want to checkout?Where do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must specify a version control system using the --vcs [svn|git] option_Back_Cancel_Close_Delete_Edit..._Forward_New_New..._No_OK_Open_Refresh_Save_Select_Yesjust nowthe selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: POT-Creation-Date: 2019-06-14 01:58+0200 PO-Revision-Date: 2019-06-14 13:08+0200 Last-Translator: Patrick Monnerat <.> Language-Team: French <.> Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1) X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Gtranslator 3.30.1 %H:%M%a %H:%M%d %b%d %b %YIl y a %d minute(s)%i jour%i jours%i heure%i heures%i minute%i minutes%i mois%i mois%i seconde%i secondes%i semaine%i semaines%i annÊe%i annÊes%s - TerminÊ(pas de date)100Un conflit a ÊtÊ trouvÊ dans le fichier suivant :Ajouter un messageAjouter un TagFicher(s) affectÊ(s) (double-clic pour comparer avec la version de base)AuthentificationDÊtails du certificatChanger le dÊpôt de votre copie de travailFichiers modifiÊs (double-clic pour comparer avec la version de base)Type de vÊrificateur:Nettoyer votre dÊpôtEnvoyer vers :Editeur de configurationConfigurer le programme pour rÊsoudre les conflits.Éditer les dÊtails de la propriÊtÊVeuillez saisir votre nom et emailFichiers à verrouillerNom du dossierDepuis la rÊvisionDepuis l'URLDepuis: (URL et rÊvision à fusionner)Ignorer et exclure les fichiers à ne pas suivreMessage d'importationLocalisation: Messages du journalOptions de journalisationMarquer le conflit commeMÊmoire occupÊe : MessageRemarque : les modifications apportÊes aux propriÊtÊs sont appliquÊes immÊdiatement. Vous pouvez vÊrifier et annuler les modifications en utilisant le menu contextuel pour chaque ÊlÊment. OptionsInformation complÊmentaireCheminMerci de dÊcrire pourquoi vous verrouillez ces fichiersMerci de fournir vos fichier de certification sslMessages prÊcÊdentsIdentifiant de processus;Programme utilisÊ pour comparer des fichiersPropriÊtÊs pour:RabbitVCSDÊpôts distantsURI distante :DÊpôtRÊinitialiser votre dÊpôtGamme de rÊvisionRÊvisionTableau de rÊvisionsDÊtail du TagTagsVers la rÊvisionVers: (URL et rÊvision à fusionner)Historique des URLFusionner depuis l'URLSystèmes de contrôle de versionCopie de travail :Copie de travailFort - Faire correspondre les fichiers et l'index de la copie de travail à l'arborescence ciblÊeFusion - RÊinitialiser l'index pour correspondre à l'arborescence enregistrÊe dans le commit sÊlectionnÊ et mettre à jour les fichiers de la copie de travail à partir de ce dernierMixte - RÊinitialiser l'index mais pas les fichiers de la copie de travailLes propriÊtÊs sÊlectionnÊes seront appliquÊes de manière rÊcursive.LÊger - Ne pas altÊrer l'index et les fichiers de la copie de travail, mais exiger qu'il soit en Êtat de fonctionnementÊtes vous sur de vouloir supprimer %item%?Erreur RabbitVCSUn assistant de fusion en ÊtapesÀ proposÀ propos de RabbitVCSAccepter dÊfinitivementAccepter le mienAccepter temporairementAccepter le leurActionAjouterAjouter un emblèmeAjouter une nouvelle propriÊtÊAjouter un emblèmeAjouter une ligne :Ajouter à la liste de fichier ignorÊsAjouter un rÊpertoire au dÊpotUne erreur s'est produite dans l'extension RabbitVCS de Nautilus. Merci de contacter l'Êquipe RabbitVCS en prÊcisant les dÊtails de l'erreur ci-dessous :AnnoterAnnoter - %sAnnoter un fichierAnnoter...Applique un fichier diff unifiÊ de la copie de travailAppliquer le correctif...Appliquer la propriÊtÊ rÊcursivementAppliquer les modifications distantesAppliquer les modifications distantes avant les changements locaux (rebase)Êtes vous sur de vouloir nettoyer vos informations d'authentification ?Êtes vous sur de vouloir nettoyer les messages prÊcÊdents ?Êtes vous sur de vouloir nettoyer les chemins du dÊpôt ?Êtes vous sur de vouloir continuer ?Êtes-vous sÃģr de vouloir supprimer %s ?Informations d'authentification nettoyÊesAuteurAuteur :BrancheBranch/tag...Branche :BranchesNavigateur de rÊfÊrentielParcourir dansNaviguez vers un fichier ou un dossierParcourir...BugsAnnulerImpossible d'annoter le dossierChanger l'emplacement d'une copie de travailVÊrifier le certificatVÊrifier les modifications ...VÊrifiez les modifications apportÊes au rÊfÊrentielObtenir une copie de travailMise à jour %s...CheckoutMettre à jourChoisissez cette mÊthode si vous avez effectuÊ des changements sur une branche et que vous souhaitez fusionner ces changements avec une autre branche.Choisissez cette mÊthode si vous souhaitez fusionner deux branches diffÊrentes dans votre copie de travail.Choisissez cette mÊthode si vous souhaitez rÊintÊgrer une branche dans le tronc.NettoyerNettoyer votre copie de travailNettoyage...NettoyerEffacerNettoyer vos informations d'authentificationDupliquerFermer cette boÃŽte de dialogue.CouleurEnvoyerEnvoyer les modifications au dÊpôt.Comparer des fichiers ou dossiersComparer les rÊvisionsComparer les diffÊrences entre deux fichiersComparer avec la baseComparer côte à côte avec la baseComparer avec la rÊvision prÊcÊdenteComparer côte à côte avec la rÊvision prÊcÊdenteComparer avec la copie de travailAjout terminÊCheckout terminÊNettoyage terminÊNettoyage terminÊClonage terminÊEnvoi terminÊExportation terminÊeImportation terminÊeVerrouillage terminÊRÊsolution terminÊeFusion terminÊeTest de fusion terminÊRelocalisation terminÊeRenommage terminÊReset terminÊRÊtablissement terminÊAnnulation terminÊeStage terminÊDÊverrouillage terminÊUnstage terminÊMise à jour terminÊeMise en place du dÊpot terminÊeFichier de configuration :ConfirmationStatut du contenu :Copier depuis le cheminCopier depuis la rÊvisionCopier l'URL dans le presse-papierCopier un objet vers un autre emplacement dans le dÊpôtCopier dans le presse-papierCopier les donnÊes complètes de ces rÊvisions dans le presse-papierCopier vers...CrÊer un dossierâ€ĻCrÊer un correctif...CrÊer un dÊpôt iciCrÊer un dÊpôt dans un dossierCrÊer un dossier...CrÊe un fichier diff unifiÊ avec tous les changements que vous avez faitDateDate :DebugDebug inversÊSupprimerConfirmation de la suppressionSupprimer les propriÊtÊs rÊcursivementSupprimer la propriÊtÊSupprimer rÊcursivement la propriÊtÊSupprimer cette propriÊtÊSupprimer rÊcursivement cette propriÊtÊRefuserMenu des diffÊrences...Voulez-vous supprimer les propriÊtÊs sÊlectionnÊes de l'ensemble des fichiers et des sous-rÊpertoires sous ce rÊpertoire ?SimulationEditer les conflitsEditer l'auteurEditer l'auteur...Modifier les confitsModifier les dÊtailsEditer le message de journalEditer le message de journal...Editer les propriÊtÊs de la rÊvision...E-mail :Activer GitActiver SubversionActiver les emblèmesActiver les attributs de fichierActiver les vÊrifications rÊcursives des statutsExporterExporter - %sExporter une copie de travail ou un dÊpôt sans information de versionnageExporterExtensionProgrammes externesAller chercher dans toutes les sources distantesFetch/PullLe fichier n'est pas versionnÊEmpreinte :TerminÊForcerForcer un appel à invalidate_extension_info()%(changed)d ÊlÊments modifiÊs et %(unversioned)d ÊlÊments non-inclus ont ÊtÊ trouvÊs%d objet(s) trouvÊ(s)Depuis :GÊnÊralObtenir le verrouObtenir le verrou...GitGrapheHEADAideHôteHôte :IgnorerIgnorer l'ascendanceIgnorer les fichiers :Ignorer un ÊlÊment par extension du nomIgnorer un ÊlÊment par nom de fichierImporterImportation - %sImporter un objet dans un dÊpôtInclure les fichiers ignorÊsInitialiser le dÊpotInvaliderÉmetteur :Limite:LigneListe des options de comparaisonsCharger/RafraÃŽchirChargementChargement...Verrouiller localement un objetVerrouiller les fichiersVerrouillÊJournal - %sMessage du journalJournalisationMarquer comme RÊsoluMarquer un conflit sur un objet comme rÊsoluMarquer comme RÊsoluFusionnerAssistant de fusionFusionner une gamme de rÊvisionsFusionner dans la branche localeFusionner deux arbres diffÊrentsFusion...MessageMessage:Type MIMENiveau minimum à journaliser:DÊplacer vers...N/ANomNom et E-mailNom:Nouvel emplacement :Nouveau nom :Pas de branche activeAucunMessages de notificationNumÊroNombre d'URL à retenirNombre de messages à retenirOmettre les externesEnregistrer seulement la fusionOuvrirOuvrir un terminalOuvrir un fichierRÊpertoireChemin :Messages prÊcÊdentsMessages prÊcèdents nettoyÊsPropriÊtÊsPropriÊtÊs - %sPropriÊtÊÉditeur de propriÊtÊÉtat de la propriÊtÊEtat de la propriÊtÊ:PropriÊtÊ :PushRabbitVCSErreur RabbitVCSRabbitVCS GitRabbitVCS HgRabbitVCS SVNDomaine:RÊcursifRafraÃŽchirActualiser les informationsRafraÃŽchir le statutRafraÃŽchir la liste de propriÊtÊs.RÊintÊgrer une brancheRelÃĸcher le verrou...RelÃĸcher le verrou d'un objetRelocaliserRelocaliser votre copie de travailRelocalisationâ€ĻGestionnaire de DÊpôts à distanceDistantsEnlever les rÊpertoiresEnlever aussi les fichiers ignorÊsN'enlever que les fichiers ignorÊsEnlever les fichiers non-versionnÊs de la copie de travailRenommerRenommer...Navigateur de dÊpôtURL du dÊpôtChemins du dÊpôt nettoyÊsDÊpôt crÊÊ avec succèsDÊpôt :RÊservÊResetRÊtablir l'Êtat de la tÃĒte (HEAD) à l'Êtat spÊcifiÊ.RÊsoluRedÊmarrer le vÊrificateurRestaurerRestaurer un fichier manquantRÊtablirRÊtablir un objet à son Êtat non modifiÊDÊfaire les modifications à partir de cette rÊvisionRÊtablir la propriÊtÊRÊtablir la propriÊtÊ (rÊcursive)RÊtablir la propriÊtÊ à son Êtat d'origineRÊtablir rÊcursivement la propriÊtÊ à son Êtat d'origineRÊtablir tout ce qu'on voitRÊvisionRÊvision :Retour à la RÊvisionRetour en arrière vers la rÊvision spÊcifiÊeRetour en arrière...ExÊcution de la commande d'Ajout...ExÊcution de la commande de nettoyage...Execution de la commande de clonage...ExÊcution de la commande d'Envoi...ExÊcution de la commande d'exportation...ExÊcution de la commande d'importation...ExÊcution de la commande de verrouillage...ExÊcution de la commande de fusionExÊcution de la commande de fusion...ExÊcution du test de fusion...ExÊcution de la commande de relocalisation...ExÊcution de la commande de renommage...ExÊcution de la commande Reset...ExÊcution de la commande Resolved...ExÊcution de la commande de rÊtablissement...ExÊcution de la commande Stage...ExÊcution de la commande de dÊverrouillage...ExÊcution de la commande Unstage...SSL Client CertificationSauvegarderEnregistrer sous...Sauvegarder l'authentificationEnregistrer _Sous...DonnÊes sauvegardÊesPlanifier la suppression d'un objet dans le dÊpôtPlanifier le renommage d'un objet dans le dÊpôtAjouter au dÊpôtTous sÊlectionner/dÊselectionnerSÊlectionnez un fichierSÊlectionnez un dossierSÊlectionnez un programmeMise en place du dÊpot...ParamètresVoir le journalConsulter le journalAfficher les outils de dÊbogage de RabbitVCSMontrer le journal d'information d'un fichierAfficher et modifier les dÊtails de la propriÊtÊComparer avec la rÊvision prÊcÊdenteAfficher les changements entre les chemins et les rÊvisionsMontrer les diffÊrences entre les rÊvisionsMontrer les fichiers ignorÊsConsulter le journalAfficher la nouvelle version à gaucheMontrer les fichiers non versionnÊsConsulter une rÊvisions:TailleStageÉtatVÊrificateur d'ÊtatVoler le verrouEtape 1: Type de fusionEtape 2: Fusionner une gamme de rÊvisionsEtape 2: Fusionner deux arbres diffÊrentsEtape 2: RÊintÊgrer une brancheEtape 3: Options finalesArrÃĒter le vÊrificateurStopper à la copieBasculement...TagGestionnaire de TagsEtiquetterTagsTester la fusionTexteÉtat du texteLe menu DÊboger est utilisÊ pour diagnostiquer des problèmes avec RabbitVCS elle-mÃĒmeLes champs 'depuis' et 'URL' sont requis.Le champ 'depuis la rÊvision' est requis.Les objets seront envoyÊs à la corbeille.Le champ 'nouveau nom' est requit.Les champs 'URL du dÊpôt' et 'chemin de destination' sont requis.Le champ 'URL du dÊpôt' est requit.Le fichier ou rÊpertoire demandÊ n'existe pas.Une erreur est survenue durant la sauvegarde de vos propriÊtÊs.Il y a eu une erreur de communication avec le service vÊrificateur d'Êtats.Une erreur c'est produite durant la crÊation du dÊpôt. Veuillez vÊrifier que le rÊpertoire est vide.Vers :Type:URL :Impossible de rÊcupÊrer les propriÊtÊs de la listeImpossible de dÊfinir une nouvelle valeur pour la propriÊtÊ.InconnuDÊverrouillerNon-rÊsoluUnstageMettre à jourMettre à jour vers la rÊvisionMettre à jour un fichier vers une version prÊciseMettre à jour une copie de travailMise à jour du chemin sÊlectionnÊ par fusion inverse des changementsMise à jour du chemin sÊlectionnÊ vers cette rÊvisionMettre à jour à la rÊvision...Mise à jour vers cette rÊvisionMise à jour...Utiliser lea macros suivants pour configurer l'outil de fusion: %base - L'ancÃĒtre commun aux deux fichiers à fusionner. %mine - Le ficher modifiÊ dans votre copie de travail. %theirs - Le fichier à fusionner avec votre copie de travail. %merged - Le fichier dans lequel stocker le rÊsultat de la fusion.Utilisez le journal de dialogue pour sÊlectionner la/les rÊvision(s) que vous souhaitez fusionner. Ou Êcrivez la/les rÊvision(s) manuellement, sÊparÊe(s) par des virgules. Vous pouvez spÊcifier une gamme de rÊvision par un tiret. Example: 4-7,9,11,15-HEAD Pour fusionner toute les rÊvisions, laissez le champ vide.VCS:Valide:ValeurValeur:Voir les diffÊrences avec la baseVoir les diffÊrences par rapport à la rÊvision prÊcÊdenteComparer avec la copie de travailVoir une comparaison côte à côte du diffVoir les diffÊrences entre les fichiers/dossiersVoir les diffÊrences entre les rÊvisionsConsulter l'aideConsulter ou modifier les paramètres de RabbitVCSVoir les diffÊrences entre deux fichiersVoir les modifications faites sur un fichierVoir les modifications apportÊes à un fichier depuis le dernier changementConsulter les propriÊtÊs d'un objetQuelle branche/rÊvision voulez-vous copier ?OÚ voulez-vous copier la sÊlection ?OÚ voulez-vous dÊplacer la sÊlection ?Copie de travailOuiVous devez dÊfinir un système de contrôle de versions en utilisant l'option --vcs [svn|git]En A_rriÊre_Annuler_Fermer_Supprimer_Éditer...En A_vant_Nouveau_Nouveau..._Non_OK_Ouvrir_RafraÃŽchir_Sauvegarder_SÊlectionner_OuiÀ l'instantle(s) objet(s) sÊlectionnÊ(s)versrabbitvcs-0.19/locale/he/000077500000000000000000000000001445560650400152665ustar00rootroot00000000000000rabbitvcs-0.19/locale/he/LC_MESSAGES/000077500000000000000000000000001445560650400170535ustar00rootroot00000000000000rabbitvcs-0.19/locale/he/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000115671445560650400212010ustar00rootroot00000000000000Ū•IdaŦ0 1?FJ ]?k6Ģ5â"; BLhw †”ώČŲčû  *AFMU \ hr{Œ• œ¨ ­¸ŋĮĖŅëû  $ , 4 = T n ˆ ĸ ē Ö đ  ) : C H $T y %˜ ž Ę #Î ō Åõ ģ Ë Ö +á U Wq SÉ "@ I0W ˆ ” ĄŦČäü*"Dg„œ˛ Ō Ũ č õ  (C JUen~ ‡ ’$ĻËŨ í ų # .!;!]!!Ą!Ã*å&7Wkƒ™­ļ0Æ!÷& @NSrDB);-F=6. C7&+ ,(%>153H'?0 8 @E#$< 2"G:9 *!A/I4%s - FinishedActionAddAdd to ignore listAnnotate - %sAre you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Authentication information clearedAuthorBrowse toCannot annotate a directoryCleaning Up...CleanupCommitCompleted AddCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted RelocateCompleted RenameCompleted UpdateCreate PatchCreating Patch File...DateDeleteEnglishExportExport - %sExtensionFinishedFound %d item(s)Get LockImportImport - %sLineLoading...LockedMessageOpenPathPrevious messages clearedProperty StatusRelocateRenameRepository paths clearedResolveRestoreRevisionRunning Add Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Relocate Command...Running Rename Command...Running Resolve Command...Select a FileSelect a FolderSelect a programShow logTextText StatusThe given path is not a working copyThe new name field is requiredThe repository URL field is required.Updating...YesYou must supply a destination path.toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-02-09 10:19+0000 Last-Translator: FULL NAME Language-Team: Hebrew MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %s - הסייםפ×ĸולההוספההוספה אל רשימ×Ē ×”×”×Ē×ĸלמו×Ēה×ĸרה - %sהאם א×Ēה בטוח שב×Ļרונך למחוק א×Ē × ×Ēוני האימו×Ē ×Š×œ×š?האם א×Ēה בטוח שבר×Ļונך למחוק א×Ē ×”×”×•×“×ĸה הקודמ×Ē ×Š×œ×š?האם א×Ēה בטוח שבר×Ļונך למחוק א×Ē × ×Ēיבי המאגר שלך?× ×Ēוני האימו×Ē × ×ž×—×§×•×™×•×Ļרסייר אללא ני×Ēן לכ×Ēוב ה×ĸרה לספרייהמנקה...ניקיוןשליחהההוספה הס×Ēיימההניקיון הס×Ēייםשליחה הושלמהיי×Ļוא הושלםייבוא הס×Ēייםנ×ĸילה הס×Ēיימההמיקום מחדש הס×Ēייםשינוי השם הושלםה×ĸדכון הושלםי×Ļיר×Ē ×Ēיקוןיו×Ļר קוב×Ĩ ×Ēיקון...×Ēאריךמחיקהאנגלי×Ēיי×Ļואיי×Ļוא - %sסיומ×Ēהס×Ēייםנמ×Ļאו %d פריטיםנ×ĸלייבואייבוא - %sשורהבט×ĸינה...× ×ĸולהוד×ĸהפ×Ēיחהנ×Ēיבההוד×ĸה הקודמ×Ē × ×ž×—×§×”×ž×Ļב הגדרהמקם מחדששנה ׊םנ×Ēיבי המאגר נמחקופ×Ēורשחזורמהדורהמרי×Ĩ פקוד×Ē ×”×•×Ą×¤×”...מרי×Ē ×¤×§×•×“×Ē ×Š×œ×™×—×”...מרי×Ĩ פקוד×Ē ×™×™×Ļוא...מרי×Ĩ פקוד×Ē ×™×™×‘×•×...מרי×Ĩ פקוד×Ē × ×ĸילה...מרי×Ĩ פקוד×Ē ×ž×™×§×•× מחדש...מרי×Ĩ פקוד×Ē ×Š×™× ×•×™ ׊ם...מרי×Ĩ פקוד×Ē ×¤×Ēור...בחיר×Ē ×§×•×‘×Ĩבחיר×Ē ×Ą×¤×¨×™×™×”×‘×—×™×¨×Ē ×Ēוכנהה×Ļג×Ē ×“×™×•×•×—×˜×§×Ą×˜×ž×Ļב טקסטהנ×Ēיב שני×Ēן אינו ה×ĸ×Ē×§ פו×ĸלשדה השם הינו הכרחישדה כ×Ēוב×Ē ×”×ž×§×•×¨ נדרש.מ×ĸדכן...כןיש לספק × ×Ēיב י×ĸד.אלrabbitvcs-0.19/locale/hr/000077500000000000000000000000001445560650400153035ustar00rootroot00000000000000rabbitvcs-0.19/locale/hr/LC_MESSAGES/000077500000000000000000000000001445560650400170705ustar00rootroot00000000000000rabbitvcs-0.19/locale/hr/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000645301445560650400212140ustar00rootroot00000000000000Ū•~ ũüđņ  & 9 N _ p ~ ‚ ;• Ņ į 1!84!m!!œ!ą!Ä!Ų!(é!" ("5"I"`"€o"đ"-˙"6-#1d#–#$¯#Ô#ë#ü#$!$7$G$^$&q$˜$Ģ$Ä$ß$ô$7%H@%-‰%:ˇ%ō%&&(& 7&C&J& N&Y& m&{& Ž&’¯&B' K'Y' i'/u' Ĩ'ą'Í'Ü'÷'?(6N(5…("ģ(Ū("í()) ) +)9) R)\) w))†)ĸ)0Š)Ú)ė).*6*O* X* f*pr*Vã*:+P+_+2g+%š+Ā+Ķ+&Ú+,,),)>,h,4z,¯,AÎ,- *-8-M-`-r-ƒ-”-Ĩ-´-Ä-Ų-ė-ũ-. .1.B. S.`.o.‚.2˜. Ë.Ö. į.ô.//;/5L/‚/™/ž/ ¤/ą/¸/Ė/ę/ú/ 000 50gB0 Ē0ļ0Å0Ö0ę011141S1[1 b1Bn1 ą1 ģ1Å1"×1 ú12)2:2K2Q2Y2 b2n2s2x2~2Ž2Ŧ2Ä2 Ë2 ×2ø2 33 !3+32373 R3 _3j3 }3ˆ33“3 œ3¨3°3"ˇ3Ú3ā3đ3 4%4.4 64@4U4 e4p4t4 y4 ‡4‘4˜4›4ą4¸4Ķ4ō455 5 '535L5 f5p5ƒ5–5›5Ą5ŗ5 Í5Ø5č5ņ566 !6 +656E6 L6V6^6m666ĩ6ž6 Ų6å6 ė6ö6 7"7B7K7S7[7r7&y7 7°7*Ė76÷7.8I8 R8\8s8‘8­8Į8á8û89)9<9X9r99§9Á9Û9 ô9˙9 :2:0Q:,‚:¯: Å:Ķ:ã:ô:ũ: ;;5;(S;|;›;¤;ģ;Î;Ķ;Ú; ę;÷; ū; << < $<0<A8<-z<*¨<$Ķ<*ø<#=AB=%„=,Ē=+×=Q>U>Y> _>i>"n>%‘>ˇ>ŋ>Æ>Í>$ā>?? 1?ú=?8@?@E@L@#c@‡@$Ļ@Ë@ë@ A!A&3A%ZA;€AŧAÛA(íA(B ?BLB#PBtB‰BŒB¨DŋDÖDôD E5EUEsE‚E†E<šE×EđE+ F=9FwF ‰F!ĒFĖFÜFđF'G(G;GLGcG GGH61H7hH4 HÕH$íHI&I7ILI^IuI…II'°IØIėIJ%J:J9NJGˆJ-ĐJ<ūJ!;K ]KhK}KKĨKŦK ˛KŋKĶKįKLtL “L ŸLŦL ÅL:ĐL MM8MKMhM>{M=ēM8øM 1NRN"ZN}NƒN ‹N˜N¨N ÄNÎN ęN÷N˙N O,#OPOdO)xOĸOˇOŋO ĐOfÛOUBP˜P­PŧP@ÄP%Q+QŨQRÍT UU#U4UPUXUiU„U•U ĒUËUĶUXįU @VMV]VsVŒV§V°VĀV#ÛV˙VW W>WXW aWmW,~W ĢW šW+ÃWīWX X X X ,X6X =XJX]X|X–X œX§XÁXŪX ņXûX YYY-Y6YEY`Y tY€Y ˆY•YŠYēY%ÁYįYíYZZ2Z;ZBZKZeZ uZ‚Z“Z™Z ¨Z˛ZēZŊZĪZÔZíZ["[;[B[Z[j[‚[›[¤[¸[Ë[Ņ[Ú[ë[\ \\(\:\M\ ]\ g\q\ ƒ\ Ž\˜\Ą\ą\ Ë\×\ é\,ķ\ ]-]=]N]d] ] ĸ] Ž]š]ŋ] Ō])ā] ^&%^'L^3t^$¨^Í^ Ö^ ā^í^__3_E_^_p_†_š_¸_Ô_ô_`!`<` U`c`x`1Š`.ŧ`*ë`a6a GaTafaoaƒa:”a,Īa*üa!'bIbZbxb Œb–bbŦbÅb Îb Úbčbîb ūb cAcWc%rc ˜c(šcâc4d!5d&Wd ~d^Ÿdūde ee)e1Ae se }e ˆe’e'¨eĐeäe úeøf g g g!g#?g)cgg&§g!Îgđg)h'*hRh.lh›h´hČh"čh ii"i?iUiÂļJtbßzõ<næ,¸FAų‰?hlĐEã>_UZ@A,NœžCĨRwIĒ×DxÛ`ŋ´y%T{2b4vé"ÅoÖvpņD4QŠ'.]Ę&*™_s‡%\ HGMՊoķ;{$‘ø?Rēxī $—|ŖyˆąÚš}Sރ^ĶāäįS/å (w9k7:ĩ†Ļ!Œ‹[>3c§ũaZ ĸ= W3ŧVÜ\ÁŽt#jÄsÉ7(Æk¤…~˛°E5cß);š ôōBģQ•Ū eT. ”0Ų}rfgVØWMzîK|úui÷ HXhq#0]Uū*Ôrüd+ lL5 ‚¯a:ˇP-q›mB)Ā'CJ€`PđĄĪFá<˒ĢiN O8ŗLŦâČ&–m^˜!YI6pd-=fėYXö~K+1Gj9/ëčg"Ũ˙ u@6ęOžĮĖ“û1Ņn¨8ÍeŊ[2έí„Ō%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished100Add MessageAffected File(s) (double-click to compare with base)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Commit to:Edit Property DetailsFiles to lockFolder NameFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. OptionsPlease add your authentication detailsPlease describe why you are locking these filesPlease provide your ssl certification filePrevious MessagesProgram used to compare filesProperties for:RabbitVCSRemote URI:RepositoryRevision RangeRevisionRevisions TableTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromVersion InformationWorking Copy:Working CopySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSRabbitVCS ErrorA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd a new property.Add an emblemAdd to ignore listAdded a folder to the repositoryAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sAnnotate a fileAnnotate...Applies a unified diff file to the working copyApply PatchApply Patch To Directory...Apply Patch...Apply property recursivelyApplying Patch File...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBranch/tag...Browse a repository treeBrowse toBrowse to a file or folderBrowse...BugsCannot annotate a directoryChangeChange the repository location of a working copyCheck CertificateCheck for Modifications...Check for modifications made to the repositoryCheck out a working copyCheckoutCheckout - %sCheckout...Choose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationClose this dialog.CommitCommit modifications to the repositoryCompare files/foldersCompare revisionsCompare side by sideCompare the differences between two itemsCompare with baseCompare with base using side-by-side comparison toolCompare with previous revisionCompare with previous revision using side-by-side comparison toolCompare with working copyCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationCopy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to...Create Folder...Create PatchCreate Patch...Create Repository hereCreate a repository in a folderCreate folder...Creates a unified diff file with all changes you madeCreating Patch File...DateDebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDelete propertyDelete this propertyDelete this property (recursive)DenyDiff Menu...Do you want to delete the selected properties from all files and subdirectories beneath this directory?Edit authorEdit author...Edit log messageEdit log message...Edit revision properties...Edit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternal ProgramsFile is not under version control.Fingerprint:FinishedForce an invalidate_extension_info() callFound %d item(s)From:GeneralGet LockGet Lock...HEADHelpHost:Ignore ancestryIgnore item by file extensionIgnore item by filenameImportImport - %sImport an item into a repositoryInclude ignored filesInvalidateIssuer:Language:Limit:LineList of comparison optionsLoad/RefreshLoading...Locally lock itemsLock FilesLockedLogLog - %sLog MessageLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MessageMime TypeMinimum level to logMore Actions...Move to...N/ANameNew Location:New Name:New...NoNotification MessagesNumberNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen ShellOpen a fileOpen from first revisionOpen from second revisionPassword:Patch File AppliedPatch File CreatedPathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty ChangeProperty EditorProperty StatusProperty:RabbitVCSRabbitVCS ErrorRealm:RecursiveRefreshRefresh StatusRefresh the list of properties.Release Lock...Release lock on an itemRelocateRelocate your working copyRelocate...RenameRename...Repository BrowserRepository paths clearedRepository successfully createdReservedResolveRestoreRestore a missing itemRevertRevert an item to its unmodified stateRevert propertyRevert property (recursive)Revert this property to its original stateRevert this property to its original state (recursive)Reverts everything it seesRevisionRevision:Running Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...SSL Client CertificationSave As...Save AuthenticationSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySchedule items to be added to the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow Changes...Show LogShow RabbitVCS debugging toolsShow a file's log informationShow changes between paths and revisionsShow changes between revisionsShow logShow unversioned filesShowing Revisions:SizeStatusSteal the locksStop on copySwitchSwitch...Test MergeTextText ChangeText StatusThanks:The debug menu is used to diagnose problems with RabbitVCS itselfThe from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There was a problem saving your properties.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:Unable to retrieve properties listUnable to set new value for property.UnknownUnlockUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...Updating...Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.Valid:ValueValue:View diff against baseView diff against previous revisionView diff against working copyView diff as side-by-side comparisonView diff between files/foldersView diff between revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemView unified diffWhere do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must supply a destination path.the selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-04-10 08:37+0000 Last-Translator: Vedran Miletić Language-Team: Croatian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %i dan%i dana%i dana%i sat%i sati%i sati%i minuta%i minute%i minuta%i mjesec%i mjeseci%i mjeseci%i sekunda%i sekunda%i sekundi%i tjedan%i tjedana%i tjedana%i godina%i godina%i godina%s - ZavrÅĄeno100Dodaj porukuDatoteka(e) promjene (dvoklik za usporedbu s osnovom)Prijava korisnikaDetalji o certifikatuPromijeni skladiÅĄte za radnu kopijuPromijenjene datoteke (dvoklik za usporedbu s osnovom)Pohrani u:Uredi vrijednost svojstvaDatoteke za zaključavanjeIme mapeOd inančiceOd URL-aDo: (URL i inačica za stapanje)Uvoz porukePoveznicePoruke dnevnikaMogućnosti dnevnikaPorukaNapomena: promjene svojstava se primjenjuju odmah. MoÅžete provjeriti i poniÅĄtiti promjene koristeći skočni izbornik za svaku stavku. MogućnostiMolim dopunite svojim autentikacijskim podacimaMolim opiÅĄite zaÅĄto zaključavate ove datotekeMolimo, postavite dateteku s ssl certifikatomPrethodne porukeProgram za usporedbu datotekaSvojstva za:RabbitVCSUdaljeni URI:SkladiÅĄteRaspon inačicaInačicaTablica inačicaDo inačiceDo: (URL i inačica za stapanje)URL PovijestURL od kojeg stapamoInformacija o verzijiRadna kopija:Radna kopijaOdabrana svojstva biti će primijenjena ponirući.Da li sigurno Åželite obrisati %item%?RabbitVCSRabbitVCS greÅĄkaČarobnjak s koracima za stapanjeO programuO RabiitVCS programuPrihvati za stalnoPrihvati za ovaj putAkcijaDodajDodaj oznakuDodaj novo svojstvoDodaje oznaku ikoneDodaj na listu zanemarenihMapa je dodana u skladiÅĄteDogodila se greÅĄka u RabbitVCS Nautilus proÅĄirenju. Molimo javite RabbitVCS timu detalje greÅĄke:PribiljeÅžiOznači - %sDodaj biljeÅĄke datoteciOznači...Primijenjuje datoteku objedinjenih razlika na radnu kopijuPrimijeni zakrpuPrimijeni zakrpu na mapu...Primjeni zakrpu...Primijeni svojstvo ponirućiPrimjena zakrpe...Da li sigurno Åželite očistiti vaÅĄe autentikacijske podatke?Da li se sigruni da Åželite očistiti vaÅĄe prethodne poruke?Da li ste sigurni da Åželite očistiti staze skladiÅĄta?Da li sigurno Åželite nastaviti?PrijavaAutentikacijski podaci očiÅĄÄ‡eniAutorAutori:Grana/oznakaGrana/oznaka...Pregledaj stablo skladiÅĄtaPregledajPregledaj datoteku ili mapuPregledaj...GreÅĄkeNe moÅžete označiti mapuPromijeniZamijeni sidriÅĄte radne kopije u skladiÅĄtuProvjeri certifikatProvjeri izmjene...Provjeri izmjene napravljene u skladiÅĄtuPreuzmi radnu kopijuPreuzmiPreuzimanje - %sPreuzmi..-Odaberite ovu metodu ako imate neke promjene u grani i Åželite stopiti svoje promjene s drugom granom.Odaberite ovu metodu ako Åželite stopiti dvije različite grane u vaÅĄu radnu kopiju.Očisti radnu kopijuČiÅĄÄ‡enje...OčistiPotrebno je čiÅĄÄ‡enje... Da li Åželite pokrenuti čiÅĄÄ‡enje?IzbriÅĄi podatke za prijavu korisnikaZatvori dijalog.PohraniPohrani izmjene u skladiÅĄteUsporedi datoteke/mapeUsporedi inačiceUsporedi jedno do drugogUsporedi razlike između dvije stavkeUsporedi s osnovnomUsporedi s osnovom koristeći usporedni alat (jedan do drugog)Usporedi s prethodnom inačicomUsporedi s proÅĄlom revizijomUsporedi s radnom kopijlomZavrÅĄeno dodavanjeZavrÅĄena izrada grane/oznakePreuzimanje zavrÅĄenoZavrÅĄeno čiÅĄÄ‡enjePohrana zavrÅĄenaIzvoz zavrÅĄenZavrÅĄen uvozZaključanoStapanje zavrÅĄenoZavrÅĄen test stapanjaZavrÅĄeno premjeÅĄtanjePromjena naziva zavrÅĄenaRazrijeÅĄavanje zavrÅĄenoVraćanje zavrÅĄenoZamjena izvrÅĄenaOtključavanje zavrÅĄenoAÅžuriranje zavrÅĄenoPotvrdaKopiraj sa stazeKopiraj iz inačiceKopiraj URL u spremnikKopiraj stavku na drugo mjesto unutar skladiÅĄtaKopiraj u...Izradi mapu...Izradi zakrpuNapravi zakrpu...Ovdje napravi skladiÅĄteNapravi skladiÅĄte u mapiNapravi mapu...Napravi objedinjenu datoteku razlika sa svim vaÅĄim promjenamaIzrada zakrpe...DatumPronađi greÅĄkuPronađi greÅĄke u povratkuObriÅĄiPotvrda brisanjaObriÅĄi svojstva ponirućiObriÅĄi svojstvoObriÅĄi ovo svojstvoObriÅĄi ovo svojstvo (poniruće)UskratiIzbornik razlika...ÅŊelite li obrisati označena svojstva iz svih datatoteka i poddirektorija u ovoj mapi?Uredi autoraUredi autora...Uredi poruku dnevnikaUredi poruku dnevnika...Uredi svojstva revizije...Uredi...Omogući oznakeOmogući svojstva datotekaOmogući poniruću provjeru statusaEngleskiIzvozIzvoz - %sIzvezi radnu kopiju ili skladiÅĄte bez informacije o verzijamaIzvozâ€ĻProÅĄirenjeVanjski programiDatoteka nije pod sustavom kontrola verzija.Otisak prsta:ZavrÅĄenoPrinudno pozovi invalidate_extension_info()Pronađeno %d stavakaOd:OpćenitoZaključajZaključaj...najnovijePomoćPosluÅžiteljZanemari porijekloZanemari stavku prema nastavkuZanemari predmet po imenuUveziUvezi - %sUvezi stavku u skladiÅĄteUključi zanemarene datotekeUčini nevaÅžećimIzdavač:Jezik:Ograničenje:RedakPopis opcija usporedbeOsvjeÅžiUčitavanje...Lokalno zaključava stavkeZaključaj datotekeZaključanoDnevnikDnevnik - %sKomentar za dnevnikPisanje dnevnikaLogin:Označi razrijeÅĄenom stavku u sukobuStopiPomoćnik stapanjaStopi raspon inačicaStopi dva različita stablaStopi...PorukaMime tipNajmanja razina logiranjaViÅĄe akcija...Premjesti...Nije primjenjivoNazivNova lokacija:Novo ime:Novo...NeObavijesne porukeBrojBroj zapamćenih URL-ovaBroj spremljenih porukaPreskoči vanjska skladiÅĄtaSamo zabiljeÅži stapanjeOtvoriOtvori komandni prozorOtvori datotekuOtvori iz prve revizijeOtvori iz druge revizijeZaporka:Zakrpa primijenjenaZakrpa napravljenaStazaPutanja:Prethodne porukePrethodne poruke očiÅĄÄ‡eneSvojstvaSvojstva - %sSvojstvoPromjena svojstvaEditor za svojstvaStatus svojstvaSvojstvo:RabbitVCSRabbitVCS greÅĄkaPodručje:PonirućiOsvjeÅžiOsvjeÅži statusOsvjeÅži popis svojstava.Oslobodi...Otključaj stavkuPremjestiPremjesti radnu kopiju na drugi posluÅžiteljPremjesti...Promijeni nazivPromijeni ime...Preglednik skladiÅĄtaSkladiÅĄne staze očiÅĄÄ‡eneSkladiÅĄte uspjeÅĄno napravljenoRezerviranoRazrijeÅĄiVratiVrati nedostajećeVrati izvornoVrati na staro stavku - poniÅĄti promjenePoniÅĄti promjene svojstvaPoniÅĄti promjene svojstva (poniruće)Vrati vrijednost svojstva na originalnuVrati vrijednost svojstva na originalnu (poniruće)Povrati na staro sve ÅĄto pronađeÅĄInačicaRevizija:Dodavanje...Izrada grane/oznakePreuzimanje u tijeku...Pohranjivanje u tijeku...Izvoz u tijeku...Izrada uvoza u tijeku...Zaključavanje...IzvrÅĄavanje stapanjaTestiranje stapanjaIzvrÅĄava se premjeÅĄtanje...Promjena naziva u tijeku...IzvrÅĄavanje razrijeÅĄavanja...IzvrÅĄavanje vraćanja....Zamijena u tijekuOtključavanje u tijeku...SSL Client CertificationSpremi kao...Spremi autentikacijuSpremljeni podaciPripremi stavku kako bi se obrisala iz skladiÅĄtaPriloÅži stavku za promjenu imena u skladiÅĄtuRasporedi stavke za dodavanje u skladiÅĄteOznači sve / Makni sve oznakeOdaberi datotekuOdaberi mapuOdaberite programPostavkePokaÅži promjene...PrikaÅži dnevnikPrikaÅži RabbitVCS alate za traÅženje greÅĄaka (debugging)Pokazuje informacije iz dnevnika za datotekuPrikaÅži promjene između staza i revizijaPogledaj razlike između revizijaPrikaÅži dnevnikPrikaÅži datoteke bez verzijePrikazuje inačice:VeličinaStatusPreuzmi lokoteZaustavi se na kopiranjuZamijeniZamijeni...Test stapanjaTekstPromjena tekstaStatus tekstaZahvale:Debug izbornik se koristi za traÅženje greÅĄaka unutar RabbitVCSaPolja url-ova su obavezna.Polje inačice treba sadrÅžavati brojOdabrana staza nije radna kopijaStavke će biti biti prebačeni u smećePolje novog imena je obaveznoURL skladiÅĄta i odrediÅĄna staza su obavezna polja.URL skladiÅĄta je obavezno polje.Lokacija skladiÅĄta je obavezno polje.Snimanje svojstava nije uspjelo.Dogodila se pogreÅĄka prilikom kreiranja skladiÅĄta. Provjerite da li je odabrana mapa prazna.Do:Tip:URL staza:URL:U nemogućnosti pribaviti popis svojstavaNije moguće postaviti novu vrijednost stvojstva.NapoznatoOtključajAÅžurirajAÅžuriraj na inačicuObnavlja datoteku na određenu revizijuObnovi radnu kopijuObnovi na reviziju...AÅžuriram...Koristite dnevnik za odabir revizija koje Åželite stopiti. MoÅžete i upisati revizije odvojene zarezima, a raspon revizija je moguće upisati koristeći crticu '-'. Primjer: 4-7,9,11,15-HEAD Za stapanje svih revizija, polje ostavite nepopunjeno.Ispravno:VrijednostVrijednost:PrikaÅži razliku prema osnoviPogedaj razliku od proÅĄle inačicePogledaj razliku u odnosu na radnu kopijuPogedaj razliku usporednoPogledaj razlike između datoteka/mapaPogledaj razliku između inačicaPogledaj pomoćPogledaj ili promijeni RabiitVCS postavkePogledaj razliku između dvije datotekePogledaj izmjene datotekePogledaj izmjene u datoteci od zadnje promjenePogledaj svojstva stavkeVidi ukupnu razlikuGdje Åželite kopirati odabrano?Gdje Åželite premjestiti odabrano?Radna verzijaDaTrebate odabrati odrediÅĄnu stazu.odabrana(e) stavka(e)dorabbitvcs-0.19/locale/hu/000077500000000000000000000000001445560650400153065ustar00rootroot00000000000000rabbitvcs-0.19/locale/hu/LC_MESSAGES/000077500000000000000000000000001445560650400170735ustar00rootroot00000000000000rabbitvcs-0.19/locale/hu/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000643011445560650400212130ustar00rootroot00000000000000Ū•  0 1 B Q b w Š Ÿ ° Á Ī Û å ÷ !!€+!Ŧ!Į! Ų!å!" """" &" 1" ?"I"\" b"’ƒ" #$# 4# @#/J# z#†#ĸ#ą#?Č#6$5?$"u$#˜$"ŧ$ß$æ$î$õ$ % %%%%.% G%Q%l%q%%0”%Å%Í%.č%&0&C& L& Z&f&l&‚&‘&™& Ÿ&Ŧ&˛&&š&ā&ö&')'G'4Y'Ž'A­'ī' ( (!(6(I(Y(k({(Œ((Ž(Ŋ(Ø(č(ũ( ))0)@)Q)d)t)…)–)¨)š) Ô) á)ė)ķ)**2+*^*2p* Ŗ* Ž*ģ*Ë*â*+5+I+`+e+k+ q+~+…+•+ą+ Æ+į+ ī+gü+ d,p,, Ž,›,Ŧ,Ā,Ü, ã,Bī, 2- <-F- O- [- i- w-"‚-Ĩ-)Ž-Ø-é- ō-ū-. ....2. F.S.l.Š.ĸ. Š. ĩ. Ö.ã. ų.//#/ >/I/\/c/ l/"x/›/Ŧ/˛/ģ/Â/Ę/ Ķ/Ũ/å/î/ ū/ 0 00 0 &00030D0U0 \0g0 l0 w0ƒ0œ0 ļ0Ã0Ö0é0ņ0ö0 11+1;1K1P1 Y1 e1 s1 1 ‰1 —1 ¤1˛1Į1Ö1å1õ1 22 12=2W2_2 f2p2y2Œ2›2´2 Ô2ā2é2ī2ø233 3&'3!N3p3€3*œ36Į3ū34"4 +454J4Z4q44Ģ4Ä4Ũ4÷45+5C5Y5r5…55š5Ķ5ė56"6;6U6o6Š6 62š60Í6,ū6+7 27@7P7a7v77˜7¨7ą7Ī7&î7(8>8]8s8x8€8 †8“8š8 Ą8Ģ8 ¯8ģ8Ã8Č8 Í8-Ų8*9$29W95v9AŦ9%î9,:,A:+n:Aš:QÜ:".;%Q; w;;‰;;™;Ą;¨;$ģ;ā;7ö;).<X<n<†< Ž<š< <#ˇ<Û<$ú<=?= [=!e=&‡=%Ž=;Ô=>/>A>-V>(„>(­> Ö>ã>Jį>#2?V?_?t?w?€A ‰A—A§AˇA ËA×A įAõAB B!B9BUB kB¤xBC6COC_CtC}C‘C šCĻCģCÔC)åC D#Dš>D ŲDæD ûDEBEbE)}E§E"ÅE=čE5&F6\F“F&˛F%ŲF˙FGG GG0GBGGGMG gG!tG –G*ŖG ÎG8ŲG HH4>HsHH  H­HŋH ĪHÛH÷H I I I+I 1I%MdM yM †M’MŦMÆM1ãMNA-N oN|N—NĩN'ĪN÷NRO"aO„O‹O ’OŸOšOÂO$ŲOūO)P DPNPjiPÔPęPQQ7QTQ)tQžQ ĨQKąQ ũQ RRR2RNR cR(nR —RLĄRîR S SS S%S,S1S%7S]SzS(S.ļS%åS T T%TDTVTrT!†T¨T&ŦT ĶTáTøT U U:UZU vU‚U ‘UœU¤U ­U šU ÃUĪUæUöUúU˙U V VVV.VBVHV]VeV}VV ŽVĪVëV W)W>WGWaWpW„WWŗW ¸W ÆW ĶW áW īW ųW X X"X5XJXeX$|X ĄXĢXČXØXđX YY Y)Y ?YLYhY‡Y Y ›Y§Y°Y"ĀYãYķY?Z1DZvZ.•Z(ÄZJíZ8[H[ g[ q[|[˜[Ŧ[Į[á[ũ[\5\O\k\‡\ \¸\Ķ\é\ũ\]4]O]g]€]•]°]Į]Ū]æ]+û].'^.V^ …^‘^Ļ^ž^Õ^ō^ __5_#F_,j_0—_;Č_.`3`R`Y`b` h`t` }`‰`˜` Ÿ` ­`š`Â`Ę`4Û`*a+;aga2‚aAĩa÷a,b&Ab0hbN™bLčb*5c5`c –c ŖcŽcļcÉc ŅcŨc-ôc"dD>d3ƒdˇdĪd ídøde$e04e,ee=’e3Đe,f1f9Hf,‚f)¯f@Ųf*g"Eg"hg-‹g%šg(ßghhTh$qh –h hģh‹3*)M&ŊJ„™fYÆK‰Zœ‚:= F}OŸØ9áįL1€ļ´ ~U@8äÉ$č°ŌĩÁ3>d_l>åi˛NĪ§4!6ŨI8A[KVT,H%îUҤôÄ\XŦ`2oY.xûĶy?#ezĮc,ą.B "ëú6}p"rĒHtČÛ!—Cß~Jvfh`(Fēy*ũn Ū›0ˆÍ[gpGZ…Dk 5Pƒu:‡wÖMs¨q;ŽĄ‘%A•ņā'c9nė<T /ÕIæWų-“ŗī)7eE$R@{X÷]Ãx+˜a\4LrŠm†ËŒtu ¯P^”Nm|CŲĨqøQ^âjBhl E­ Ü=Ú ŽŋogkG#;&žÎW{<ĢöÅĀõw5d˙׊bđéžsQ-ūš Ŗ2R– V?71'’biĖD/aģOĘŧSSÂ0ˇüjš_ķ(]¸ íãĸ|Ôō+ĐęĻzv%d minute(s) ago%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished(no author)(no date)Add BranchAdd TagBranch DetailBranchesNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. Remote RepositoriesTag DetailTagsA wizard with steps for mergingAboutAbout RabbitVCSActionAddAdd EmblemAdd an emblemAdd line:Add to ignore listAddedAdded a folder to the repositoryAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:Annotate - %sAnnotate a fileAnnotate...AnnotatedApplies a unified diff file to the working copyApply PatchApply Patch To Directory...Apply Patch...Applying Patch File...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?Are you sure you want to delete %s?Authentication information clearedAuthorAuthor:BranchBranch ManagerBranch/tagBranch/tag...Branch:BranchesBrowse a repository treeBrowse toBrowse to a file or folderBugsCannot annotate a directoryChangeChange the repository location of a working copyChangedCheck for Modifications...Check for modifications made to the repositoryCheck out a working copyChecking out %s...CheckoutCheckout - %sCheckout...CleanClean up working copyCleaning Up...CleanupCloneClose BranchColorCommitCommit modifications to the repositoryCompare files/foldersCompare revisionsCompare side by sideCompare the differences between two itemsCompare with baseCompare with base using side-by-side comparison toolCompare with previous revisionCompare with previous revision using side-by-side comparison toolCompare with working copyCompletedCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanCompleted CleanupCompleted CloneCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted Mark as ResolvedCompleted MergeCompleted Merge TestCompleted PushCompleted RelocateCompleted RenameCompleted ResetCompleted RevertCompleted RollbackCompleted StageCompleted SwitchCompleted UnlockCompleted UnstageCompleted UpdateCompleted repository setupConfig file:ConflictedCopiedCopy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to clipboardCopy to clipboard the full data of these revisionsCopy to...Create PatchCreate Patch...Create Repository hereCreate a repository in a folderCreate folder...Creates a unified diff file with all changes you madeCreating Patch File...DateDate:DebugDebug RevertDeleteDelete propertyDelete property (recursive)Delete this propertyDelete this property (recursive)DeletedDiff Menu...Do you want to delete the selected properties from all files and subdirectories beneath this directory?Edit authorEdit author...Edit conflictsEdit detailsEdit log messageEdit log message...Edit revision properties...ExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternalFailed LockFailed RevertFailed UnlockFetch/PullFile is not under version control.FinishedForce an invalidate_extension_info() callFound %d item(s)Get LockGet Lock...GraphHEADHelpHostHost:Ignore by File ExtensionIgnore by File NameIgnore file:Ignore item by extensionIgnore item by file extensionIgnore item by filenameImportImport - %sImport an item into a repositoryInapplicableInitialize RepositoryInvalidateKeep old branch's historyLineList of comparison optionsLoading...Locally lock itemsLockedLog - %sLog MessageMark a conflicted item as resolvedMark as ResolvedMergeMerge...MergedMessageMessage:Mime TypeMissingModifiedMore Actions...Move to...N/ANameName:New Location:New Name:NoNo active branchNo commits foundNumberObstructedOpenOpen ShellOpen a fileOpen from first revisionOpen from second revisionPatch FailedPatch File AppliedPatch File CreatedPatchedPathPrevious messages clearedPropertiesProperties - %sProperty ChangeProperty StatusPushRVCS AgeRVCS AuthorRVCS RevisionRVCS StatusRabbitVCSRabbitVCS GitRabbitVCS HgRabbitVCS SVNRabbitVCS status forRefresh StatusRejected PatchRelease Lock...Release lock on an itemRelocateRelocate your working copyRelocate...Remote Repository ManagerRemotesRenameRename...ReplacedRepository BrowserRepository URLRepository paths clearedRepository successfully createdRepository:ReservedResetResolvedRestoreRestore a missing itemRestoredRevertRevert an item to its unmodified stateRevert changes from this revisionRevert propertyRevert property (recursive)Revert this property to its original stateRevert this property to its original state (recursive)RevertedReverts everything it seesRevisionRevision:Rollback To RevisionRolling Back...Running Add Command...Running Branch/tag Command...Running Checkout Command...Running Clean Command...Running Clone Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge Command...Running Merge TestRunning Push Command...Running Relocate Command...Running Rename Command...Running Reset Command...Running Resolved Command...Running Revert Command...Running Stage Command...Running Switch Command...Running Unlock Command...Running Unstage Command...SaveSave As...Schedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySchedule items to be added to the repositorySelectSelect a FileSelect a FolderSelect a programSet as active branchSetting up repository...SettingsShow Changes...Show LogShow a file's log informationShow and edit property detailsShow changes against previous revisionShow changes between paths and revisionsShow changes between revisionsSimple status checkerSizeSkippedStageStart Point:StatusSwitchSwitch...TagTag ManagerTagger:TagsTextText StatusThe from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe new name field is requiredThe output from '%s' was not able to be processed. %sThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.The requested file or folder does not exist.There was a problem saving your properties.There was an error communicating with the status checker service.There was an error creating the repository. Make sure the given folder is empty.Unable to retrieve properties listUnable to set new value for property.UnchangedUnknownUnlockUnlockedUnstageUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate the selected path by reverse merging the changesUpdate the selected path to this revisionUpdate to revision...Update to this revisionUpdatedUpdating...ValueView diff against baseView diff against previous revisionView diff against working copyView diff as side-by-side comparisonView diff between files/foldersView diff between revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemView unified diffView unified diff(s)What revision/branch do you want to checkout?Where do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must specify a version control system using the --vcs [svn|git] optionYou must supply a destination path.just nowthe selected item(s)toProject-Id-Version: rabbit-vcs 0.17.1 Report-Msgid-Bugs-To: POT-Creation-Date: 2018-02-08 20:40+0100 PO-Revision-Date: 2018-02-10 21:00+0100 Last-Translator: csola48 Language-Team: hungarian Language: hu_HU MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Poedit 1.8.7.1 X-Poedit-SourceCharset: UTF-8 X-Poedit-Basepath: .. X-Poedit-SearchPath-0: . %d perce%i nap%i nap%i Ãŗra%i Ãŗra%i perc%i perc%i hÃŗnap%i hÃŗnap%i mp%i mp%i hÊt%i hÊt%i Êv%i Êv%s - Befejezve(nincs szerző)(nincs adat)Ág hozzÃĄadÃĄsaÜzenet hozzÃĄadÃĄsaÁg rÊszleteiÁgakFigyelem: a tulajdonsÃĄgok vÃĄltozÃĄsa azonnal megtÃļrtÊnik. A helyi menÃŧ segítsÊgÊvel tÊtelenkÊnt megtekintheti Ês visszavonhatja a vÃĄltozÃĄsokat. TÃĄvoli tÃĄrolÃŗ:Címke rÊszleteiCímkÊkEgyesítővarÃĄzslÃŗNÊvjegyRabbitVCS nÊvjegyeEsemÊnyHozzÃĄadÃĄsJelkÊp hozzÃĄadÃĄsaEgy jelkÊp hozzÃĄadÃĄsaSor hozzÃĄadÃĄsaHozzÃĄadÃĄs a mellőzÃļtt fÃĄjl listÃĄhozHozzÃĄadvaDossziÊ hozzÃĄadÃĄsa a tÃĄrolÃŗhozEgy hiba tÃļrtÊnt a RabbitVCS Nautilus kiterjesztÊsben. Vegye fel a kapcsolatot RabbitVCS team a hiba alÃĄbbi rÊszletes leírÃĄsÃĄval:Jegyzet - %sJegyzet egy fÃĄjlhozJegyzet...MegjegyzÊs hozzÃĄfÅązveEgysÊges ÃļsszehasonlítÃŗ fÃĄjl alkalmazÃĄsa a munkapÊldÃĄnybanHibajavítÃĄs alkalmazÃĄsaHibajavítÃĄs alkalmazÃĄsa a kÃļnyvtÃĄrraHibajavítÃĄs alkalmazÃĄsa...HibajavítÃŗ fÃĄjl alkalmazÃĄsa...Biztos, hogy akarja tÃļrÃļlni a hitelesítÊsi informÃĄciÃŗt?Biztos, hogy akarja tÃļrÃļlni a korÃĄbbi Ãŧzeneteket?Biztos, hogy akarja tÃļrÃļlni a tÃĄrolÃŗ Ãētvonalakat?Biztos, hogy folytatni akarja?Biztos, hogy tÃļrÃļlni akarja ezt: %s?HitelesítÊsi informÃĄciÃŗ tÃļrÃļlveSzerzőSzerzőÁgÁgkezelőÁgak/címkÊk...Ágak/címkÊk...Ág:ÁgakTÃĄrolÃŗ fa bÃļngÊszÊseBÃļngÊszÊsFÃĄjl vagy dossziÊ bÃļngÊszÊseProgram hibaNem lehet jegyzetet fÅązni a kÃļnyvtÃĄrhozVÃĄltozÃĄsMunkapÊldÃĄny helyÊnek megvÃĄltoztatÃĄsa a tÃĄrolÃŗbanMÃŗdosítvaMÃŗdosítÃĄsok ellenőrzÊse...TÃĄrolÃŗhoz kÊszített mÃŗdosítÃĄsok ellenőrzÊseMunkapÊldÃĄny ellenőrzÊse%s lecsekkol...EllenőrzÊsLecsekkolÃĄs - %sLecsekkolÃĄs...TisztítÃĄsMunkapÊldÃĄny tisztítÃĄsaTisztítÃĄs...TisztítÃĄsKlÃŗnozÃĄsÁg lezÃĄrasaSzínBekÃŧldÊsMÃŗdosítÃĄs bekÃŧldÊse a tÃĄrolÃŗbaFÃĄjl/dossziÊ ÃļsszehasonlítÃĄsaRevíziÃŗk ÃļsszehasonlítÃĄsaPÃĄrhuzamos ÃļsszehasonlítÃĄsKÃŧlÃļnbsÊgek ÃļsszehasonlítÃĄsa kÊt tÊtel kÃļzÃļttÖsszehasonlítÃĄs a bÃĄzissalÖsszehasonlítÃĄs a bÃĄzissal a pÃĄrhuzamos ÃļsszehasonlítÃŗ eszkÃļzzelÖsszehasonlítÃĄs az előző revíziÃŗvalÖsszehasonlítÃĄs az előző revíziÃŗ hasznÃĄlatÃĄval a pÃĄrhuzamos ÃļsszehasonlítÃŗ eszkÃļzzelÖsszehasonlítÃĄs a munkapÊldÃĄnnyalBefejezveHozzÃĄadÃĄs befejezveBranch/tag parancs befejezveEllenőrzÊs befejezveTisztítÃĄs befejezveTisztítÃĄs befejezveKlÃŗnozÃĄs befejezveBekÃŧldÊs befejezveExportÃĄlÃĄs befejezveImportÃĄlÃĄs befejezveZÃĄrolÃĄs befejezveMegjelÃļlÊs megoldottkÊnt befejezveEgyesítÊs befejezveEgyesítÊs teszt befejezvePush befejezveÁthelyezÊs befejezveÁtnevezÊs befejezveAlaphelyzetbe ÃĄllítÃĄs kÊszVisszavonÃĄs befejezveVisszagÃļrgetÊs kÊszStage kÊszÁtvÃĄltÃĄs kÊszNyitÃĄs befejezveUnstage befejezveFrissítÊs befejezveTÃĄrolÃŗ beÃĄllítÃĄsa befejeződÃļttBeÃĄllítÃĄsi fÃĄjl:KonfliktusosÁtmÃĄsolvaMÃĄsolÃĄs az ÃētvonalrÃŗlMÃĄsolÃĄs a revíziÃŗbÃŗlURL mÃĄsolÃĄsa a vÃĄgÃŗlapraEgy tÊtel mÃĄsolÃĄsa mÃĄsik helyre a tÃĄrolÃŗbanMÃĄsolÃĄs a vÃĄgÃŗlapraEzen reviziÃŗk telejes adatÃĄllomÃĄnyÃĄnak vÃĄgÃŗlapra mÃĄsolÃĄsaMÃĄsolÃĄs...HibajavítÃĄs kÊszítÊseHibajavítÃĄs kÊszítÊse...TÃĄrolÃŗ kÊszítÊse ideTÃĄrolÃŗ kÊszítÊse ebben a mappÃĄbanMappa lÊtrehozÃĄsa...EgysÊges ÃļsszehasonlítÃŗ fÃĄjl kÊszítÊse, amely minden vÃĄltozÃĄst tartalmazHibajavítÃŗ fÃĄjl kÊszítÊse...DÃĄtumDÃĄtumHibakeresÊsNyomkÃļvetÊs visszafelÊTÃļrlÊsTulajdonsÃĄg tÃļrlÊseTulajdonsÃĄg tÃļrlÊse (rekurzívan)Ezen tulajdonsÃĄg tÃļrlÊseEzen tulajdonsÃĄg tÃļrlÊse (rekurzívan)TÃļrÃļlveÖsszehasonlítÃŗ menÃŧ...TÃļrÃļlni akarja a kivÃĄlasztott tulajdonsÃĄgot minden fÃĄjlban ebben kÃļnyvtÃĄrban Ês alkÃļnyvtÃĄraiban?Szerző szerkesztÊseSzerző szerkesztÊse...Konfliktusok szerkesztÊseRÊszletek szerkesztÊseNaplÃŗ Ãŧzenet szerkesztÊseNaplÃŗ Ãŧzenet szerkesztÊse...RevíziÃŗ tulajdonsÃĄgok szerkesztÊse...ExportExport - %sEgy munkapÊldÃĄny vagy tÃĄrolÃŗ exportÃĄlÃĄsa verziÃŗinformÃĄciÃŗ nÊlkÃŧlExport...KiterjesztÊsKÃŧlsőZÃĄrolÃĄs sikertelenVisszaÃĄllítÃĄs sikertelenSikertelen zÃĄrolÃĄsFetch/PullEz a fÃĄjl nincs verziÃŗ kontroll alatt.BefejezveEgy ÊrvÊnytelen kiterjesztÊs informÃĄciÃŗ lehívÃĄsÃĄnak kÊnyszerítÊse%d elemet talÃĄltZÃĄrolÃĄsZÃĄrolÃĄs...GrafikonHEADSÃēgÃŗHostHost:MellőzÊs fÃĄjlkiterjesztÊs szerintMellőzÊs fÃĄjlnÊv szerintMellőzÃļtt fÃĄjl:TÊtel mellőzÊse kiterjesztÊs szerintMellőzÃļtt tÊtel fÃĄjl kiterjesztÊs szerintTÊtel mellőzÊse fÃĄjl nÊv szerintImportImport - %sEgy tÊtel importÃĄlÃĄsa a tÃĄrolÃŗbaNem alkalmazhatÃŗA tÃĄrolÃŗ inicializÃĄlÃĄsaÉrvÊnytelenítÊsRÊgi ÃĄgelőzmÊnyek megtartÃĄsaSorÖsszehasonlítÃŗ lista beÃĄllítÃĄsokBetÃļltÊs...Helyi zÃĄrolt tÊtelekLezÃĄrvaNaplÃŗ - %sNaplÃŗ bejegyzÊsEgy konfliktusos tÊtel megoldottkÊnt valÃŗ megjelÃļlÊseMegjelÃļlÊs megoldottkÊntEgyesítÊsEgyesítÊs...EgyesítveÜzenetÜzenet:Mime típusHiÃĄnyzÃŗMÃŗdosítvaTovÃĄbbi mÅąveletek...ÁthelyezÊs...N/ANÊvNÊv:Új hely:Új nÊv:NemNincs aktív ÃĄgNincsenek commit-okSzÃĄmAkadÃĄlyba ÃŧtkÃļzikMegnyitHÊjprogram megnyitÃĄsaFÃĄjl megnyitÃĄsaAz első revíziÃŗ megnyitÃĄsaA mÃĄsodik revíziÃŗ megnyitÃĄsaHibajavítÃĄs nem sikerÃŧltHibajavítÃŗ fÃĄjl alkalmazvaHibajavítÃŗ fÃĄjl elkÊszítveHibajavítÃĄsa kÊszÚtvonalElőző Ãŧzenet tÃļrÃļlveTulajdonsÃĄgokTulajdonsÃĄgok - %sTulajdonsÃĄg vÃĄltozÃĄsaTulajdonsÃĄg ÃĄllapotPushRVCS ÉletkorRVCS SzerzőRVCS ReviziÃŗRVCS ÁllapotRabbitVCSRabbitVCS GitRabbitVCS HgRabbitVCS SVNRabbitVCS stÃĄtuszFrissített ÃĄllapotElutasított hibajavítÃĄsZÃĄrolÃĄs felodÃĄsa...Egy tÊtel zÃĄrolÃĄsÃĄnak feloldÃĄsaÁthelyezMunkapÊldÃĄny ÃĄthelyezÊseÁthelyezÊs...TÃĄvoli tÃĄrolÃŗkezelőTÃĄvoli tÃĄrolÃŗkÁtnevezÊsÁtnevezÊs...LecserÊlveTÃĄrolÃŗ bÃļngÊszÊsTÃĄrolÃŗ URLTÃĄrolÃŗ Ãētvonal tÃļrÃļlveTÃĄrolÃŗ sikeresen lÊtrehozvaTÃĄrolÃŗFenntartvaAlaphelyzetMegoldvaVisszaÃĄllítvaHiÃĄnyzÃŗ tÊtel visszaÃĄllítÃĄsaHelyreÃĄllítvaVisszaÃĄllítÃĄsEgy tÊtel visszaÃĄllítÃĄs a mÃŗdosítÃĄs elÃļtti ÃĄllapotÃĄraMÃŗdosítÃĄsok visszavonÃĄsa ebbő a reviziÃŗbÃŗlTulajdonsÃĄg visszaÃĄllítÃĄsaTulajdonsÃĄgok visszaÃĄllítÃĄsa (rekurzívan)Eredeti tulajdonsÃĄgok visszaÃĄllítÃĄsaEzen tulajdonsÃĄg eredeti ÃĄllapotba valÃŗ visszaÃĄllítÃĄsa (rekurzívan)VisszaÃĄllítvaMinden lÃĄthatÃŗ visszavonÃĄsaRevíziÃŗRevíziÃŗ:VisszagÃļrgetÊs reviziÃŗraVisszagÃļrgetÊs...HozzÃĄadÃĄs parancs fut...Branch/tag parancs fut...EllenőrzÊs parancs fut...TisztítÃĄs parancs fut...KlÃŗnozÃĄsÃĄs parancs fut...BekÃŧldÊs parancs fut...ExportÃĄlÃĄs parancs fut...ImportÃĄlÃĄs parancs fut...ZÃĄrolÃĄs parancs fut...EgyesítÊs parancs futEgyesítÊs parancs fut...EgyesítÊs teszt futPush parancs fut...ÁthelyezÊs parancs fut...ÁtnevezÊs parancs fut...Alaphelyzet parancs fut...Megoldva parancs fut...VisszavonÃĄs parancs futStage parancs fut...ÁtvÃĄltÃĄs parancs fut...NyitÃĄs parancs fut...Unstage parancs fut...MentÊsMentÊs mÃĄskÊntâ€ĻA tÃĄrolÃŗbÃŗl tÃļrlendő elemek ÃŧtmezÊseA tÃĄrolÃŗban ÃĄtnevezendő elemek ÃŧtemezÊseA tÃĄrolÃŗhoz hozzÃĄadandÃŗ elemek ÃŧtemezÊseKijelÃļlÊsFÃĄjl kivÃĄlasztÃĄsaDossziÊ kivÃĄlasztÃĄsaProgram kivÃĄlasztÃĄsaBeÃĄllítÃĄs aktív ÃĄgkÊntTÃĄrolÃŗ beÃĄllítÃĄsa...BeÃĄllítÃĄsokVÃĄltozÃĄsok mutatÃĄsa...NaplÃŗ mutatÃĄsaFÃĄjl naplÃŗ informÃĄciÃŗ mutatÃĄsaRÊszletek megjelenítÊse Ês szerkesztÊseÖsszehasonlítÃŗ nÊzet az előző revíziÃŗvalVÃĄltozÃĄsok mutatÃĄsa az Ãētvonal Ês a revíziÃŗ kÃļzÃļttVÃĄltozÃĄsok mutatÃĄsa kÊt revíziÃŗ kÃļzÃļttEgyszerÅą ÃĄllapot-ellenőrzőMÊretKihagyvaStageKezdőpont:ÁllapotÁtvÃĄltÃĄsÁtvÃĄltÃĄs...CímkeCímkekezelőCímkÊző:CímkÊkSzÃļvegSzÃļveg ÃĄllapotAz URL tartomÃĄny hatÃĄrainak megadÃĄsa szÃŧksÊges.A revíziÃŗ mező egÊsz szÃĄm kell legyenA megadott Ãētvonal nem a munkapÊldÃĄnyÊ.Új nÊv mező szÃŧksÊgesA(z) '%s' kimenetÊt nem sikerÃŧlt feldolgozni. %sA tÃĄrolÃŗ URL Ês a vÊgcÊl Ãētvonal mezőket ki kell tÃļlteni.TÃĄrolÃŗ URL mező igÊnyeltTÃĄrolÃŗ helye mező kitÃļltÊse kÃļtelező.A kÊrt fÃĄjl vagy mappa nem lÊtezik.TulajdonsÃĄgok mentÊsÊnÊl problÊma adÃŗdott.Hiba tÃļrtÊnt a stÃĄtuszellenőrző szolgÃĄltatÃĄssal valÃŗ kommunikÃĄciÃŗbanHiba a tÃĄrolÃŗ kÊszítÊsekor. GyőződjÃļn meg rÃŗla, hogy a mappa Ãŧres.TulajdonsÃĄg lista nem ÃĄllíthatÃŗ helyreA tulajdonsÃĄg Ãēj ÊrtÊkÊt nem lehet beÃĄllítani.VÃĄltozatlanIsmeretlenNyitÃĄsZÃĄrolÃĄs feloldvaUnstageFrissítÊsRevíziÃŗ frissítÊseEgy fÃĄjl frissítÊse speciÃĄlis revíziÃŗraMunkapÊldÃĄny frissítÊseA kijelÃļlt Ãētvonal frissítÊse a mÃŗdosítÃĄsok visszavonÃĄsÃĄvalA kijelÃļlt Ãētvonal frissítÊse erre a reviziÃŗraRevíziÃŗfrissítÊs...FrissítÊs erre a reviziÃŗraFrissítveFrissítÊs...ÉrtÊkÖsszehasonlítÃŗ nÊzet a bÃĄzissalÖsszehasonlítÃŗ nÊzet az előző revíziÃŗvalÖsszehasonlítÃŗ nÊzet a munkapÊldÃĄnnyalÖsszehasonlítÃŗ nÊzet, mint pÃĄrhuzamos ÃļsszehasonlítÃĄsÖsszehasonlítÃŗ nÊzet fÃĄjlok/dossziÊk kÃļzÃļttÖsszehasonlítÃŗ nÊzet revíziÃŗk kÃļzÃļttSÃēgÃŗ megjelenítÊseRabbitVCS beÃĄllítÃĄsok megtekintÊse vagy mÃŗdosítÃĄsaÖsszehasonlítÃŗ nÊzet kÊt fÃĄjl kÃļzÃļttFÃĄjlhoz kÊszített mÃŗdosítÃĄs nÊzeteEgy fÃĄjl mÃŗdosítÃĄsok megtkintÊse az utolsÃŗ vÃĄltozÃĄs ÃŗtaEgy tÊtel tulajdonsÃĄgainak megtekintÊseEgysÊges ÃļsszehasonlítÃŗ nÊzetEgysÊges ÃļsszehasonlítÃŗ nÊzetMelyik reviziÃŗt/ÃĄgat szeretnÊ lecsekkolni?HovÃĄ akarja mÃĄsolni a kijelÃļlÊst?HovÃĄ akarja ÃĄthelyezni a kijelÃļlÊst?MunkapÊldÃĄnyIgenA --vcs [svn|git] opciÃŗ hasznÃĄlatÃĄval meg kell adnia egy verziÃŗkÃļvető rendszerMeg kell adni a vÊgcÊl Ãētvonalat.Êpp mosta kivÃĄlasztott tÊtel/ek/eddigrabbitvcs-0.19/locale/it/000077500000000000000000000000001445560650400153065ustar00rootroot00000000000000rabbitvcs-0.19/locale/it/LC_MESSAGES/000077500000000000000000000000001445560650400170735ustar00rootroot00000000000000rabbitvcs-0.19/locale/it/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000656321445560650400212230ustar00rootroot00000000000000Ū•~ ũüđņ  & 9 N _ p ~ ‚ ;• Ņ į 1!84!m!!œ!ą!Ä!Ų!(é!" ("5"I"`"€o"đ"-˙"6-#1d#–#$¯#Ô#ë#ü#$!$7$G$^$&q$˜$Ģ$Ä$ß$ô$7%H@%-‰%:ˇ%ō%&&(& 7&C&J& N&Y& m&{& Ž&’¯&B' K'Y' i'/u' Ĩ'ą'Í'Ü'÷'?(6N(5…("ģ(Ū("í()) ) +)9) R)\) w))†)ĸ)0Š)Ú)ė).*6*O* X* f*pr*Vã*:+P+_+2g+%š+Ā+Ķ+&Ú+,,),)>,h,4z,¯,AÎ,- *-8-M-`-r-ƒ-”-Ĩ-´-Ä-Ų-ė-ũ-. .1.B. S.`.o.‚.2˜. Ë.Ö. į.ô.//;/5L/‚/™/ž/ ¤/ą/¸/Ė/ę/ú/ 000 50gB0 Ē0ļ0Å0Ö0ę011141S1[1 b1Bn1 ą1 ģ1Å1"×1 ú12)2:2K2Q2Y2 b2n2s2x2~2Ž2Ŧ2Ä2 Ë2 ×2ø2 33 !3+32373 R3 _3j3 }3ˆ33“3 œ3¨3°3"ˇ3Ú3ā3đ3 4%4.4 64@4U4 e4p4t4 y4 ‡4‘4˜4›4ą4¸4Ķ4ō455 5 '535L5 f5p5ƒ5–5›5Ą5ŗ5 Í5Ø5č5ņ566 !6 +656E6 L6V6^6m666ĩ6ž6 Ų6å6 ė6ö6 7"7B7K7S7[7r7&y7 7°7*Ė76÷7.8I8 R8\8s8‘8­8Į8á8û89)9<9X9r99§9Á9Û9 ô9˙9 :2:0Q:,‚:¯: Å:Ķ:ã:ô:ũ: ;;5;(S;|;›;¤;ģ;Î;Ķ;Ú; ę;÷; ū; << < $<0<A8<-z<*¨<$Ķ<*ø<#=AB=%„=,Ē=+×=Q>U>Y> _>i>"n>%‘>ˇ>ŋ>Æ>Í>$ā>?? 1?ú=?8@?@E@L@#c@‡@$Ļ@Ë@ë@ A!A&3A%ZA;€AŧAÛA(íA(B ?BLB#PBtB‰BŋŒBLD `DnD‚D’D¨DÂD ŌDŪDâDBüD?EUE5uEBĢEîE"˙E"F:FOF fF$tF™F ˛FŋF×FíFũFŽG1–G2ČG,ûG(H-CHqH‡H˜HĢHŊHŲHęHI#I=I*SI"~IĄIšIMĐIGJ-fJ;”JĐJīJ˙JK(K:KAKJKYKxKŠK#K˜ÁKZL aLmL |L<†L ÃLŅLėL$ũL"ME;M:M9ŧM öMN)&NPNWN _N jNxN˜N N ¸NÃNČNčN8ņN*O@O(WO€OœO ĨO ŗO…ŋOhEPŽPÉPŨPEåP +QLQ`Q gQˆQ QˇQ'ĖQôQ- R"8R=[R™RĩRÉRßRķRSS0SHSZSkS…SŸSŗSĘSāSķSTT(T;TQT1mT ŸTĢT ŧT ĮTÕT"ėT U@U^UqUvU|UU–U%¨UÎUâU&ũU$V)Vaj%aj=‡j%Åjëjk'k GkTk,Wk„k˜kÂļJtbßzõ<næ,¸FAų‰?hlĐEã>_UZ@A,NœžCĨRwIĒ×DxÛ`ŋ´y%T{2b4vé"ÅoÖvpņD4QŠ'.]Ę&*™_s‡%\ HGMՊoķ;{$‘ø?Rēxī $—|ŖyˆąÚš}Sރ^ĶāäįS/å (w9k7:ĩ†Ļ!Œ‹[>3c§ũaZ ĸ= W3ŧVÜ\ÁŽt#jÄsÉ7(Æk¤…~˛°E5cß);š ôōBģQ•Ū eT. ”0Ų}rfgVØWMzîK|úui÷ HXhq#0]Uū*Ôrüd+ lL5 ‚¯a:ˇP-q›mB)Ā'CJ€`PđĄĪFá<˒ĢiN O8ŗLŦâČ&–m^˜!YI6pd-=fėYXö~K+1Gj9/ëčg"Ũ˙ u@6ęOžĮĖ“û1Ņn¨8ÍeŊ[2έí„Ō%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished100Add MessageAffected File(s) (double-click to compare with base)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Commit to:Edit Property DetailsFiles to lockFolder NameFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. OptionsPlease add your authentication detailsPlease describe why you are locking these filesPlease provide your ssl certification filePrevious MessagesProgram used to compare filesProperties for:RabbitVCSRemote URI:RepositoryRevision RangeRevisionRevisions TableTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromVersion InformationWorking Copy:Working CopySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSRabbitVCS ErrorA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd a new property.Add an emblemAdd to ignore listAdded a folder to the repositoryAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sAnnotate a fileAnnotate...Applies a unified diff file to the working copyApply PatchApply Patch To Directory...Apply Patch...Apply property recursivelyApplying Patch File...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBranch/tag...Browse a repository treeBrowse toBrowse to a file or folderBrowse...BugsCannot annotate a directoryChangeChange the repository location of a working copyCheck CertificateCheck for Modifications...Check for modifications made to the repositoryCheck out a working copyCheckoutCheckout - %sCheckout...Choose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationClose this dialog.CommitCommit modifications to the repositoryCompare files/foldersCompare revisionsCompare side by sideCompare the differences between two itemsCompare with baseCompare with base using side-by-side comparison toolCompare with previous revisionCompare with previous revision using side-by-side comparison toolCompare with working copyCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationCopy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to...Create Folder...Create PatchCreate Patch...Create Repository hereCreate a repository in a folderCreate folder...Creates a unified diff file with all changes you madeCreating Patch File...DateDebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDelete propertyDelete this propertyDelete this property (recursive)DenyDiff Menu...Do you want to delete the selected properties from all files and subdirectories beneath this directory?Edit authorEdit author...Edit log messageEdit log message...Edit revision properties...Edit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternal ProgramsFile is not under version control.Fingerprint:FinishedForce an invalidate_extension_info() callFound %d item(s)From:GeneralGet LockGet Lock...HEADHelpHost:Ignore ancestryIgnore item by file extensionIgnore item by filenameImportImport - %sImport an item into a repositoryInclude ignored filesInvalidateIssuer:Language:Limit:LineList of comparison optionsLoad/RefreshLoading...Locally lock itemsLock FilesLockedLogLog - %sLog MessageLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MessageMime TypeMinimum level to logMore Actions...Move to...N/ANameNew Location:New Name:New...NoNotification MessagesNumberNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen ShellOpen a fileOpen from first revisionOpen from second revisionPassword:Patch File AppliedPatch File CreatedPathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty ChangeProperty EditorProperty StatusProperty:RabbitVCSRabbitVCS ErrorRealm:RecursiveRefreshRefresh StatusRefresh the list of properties.Release Lock...Release lock on an itemRelocateRelocate your working copyRelocate...RenameRename...Repository BrowserRepository paths clearedRepository successfully createdReservedResolveRestoreRestore a missing itemRevertRevert an item to its unmodified stateRevert propertyRevert property (recursive)Revert this property to its original stateRevert this property to its original state (recursive)Reverts everything it seesRevisionRevision:Running Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...SSL Client CertificationSave As...Save AuthenticationSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySchedule items to be added to the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow Changes...Show LogShow RabbitVCS debugging toolsShow a file's log informationShow changes between paths and revisionsShow changes between revisionsShow logShow unversioned filesShowing Revisions:SizeStatusSteal the locksStop on copySwitchSwitch...Test MergeTextText ChangeText StatusThanks:The debug menu is used to diagnose problems with RabbitVCS itselfThe from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There was a problem saving your properties.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:Unable to retrieve properties listUnable to set new value for property.UnknownUnlockUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...Updating...Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.Valid:ValueValue:View diff against baseView diff against previous revisionView diff against working copyView diff as side-by-side comparisonView diff between files/foldersView diff between revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemView unified diffWhere do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must supply a destination path.the selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-10-26 11:05+0000 Last-Translator: timendum Language-Team: Italian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %i giorno%i giorni%i ora%i ore%i minuto%i minuti%i mese%i mesi%i secondo%i secondi%i settimana%i settimane%i anno%i anni%s - Finiti100Aggiungi MessaggioFile Modificati (doppio click per confrontarli con la base)AutenticazioneDettagli del CertificatoCambia il repository della tua copia di lavoroFile Modificati (doppio click per confrontarli con la base)Commit a:Modifica Proprieta DettagliFile da bloccareNome CartellaDalla RevisioneDa URLDa: (URL e revisione a merge)Importa MessaggioLinksMessaggi del logOpzioni di LogMessggioNote: le modifiche alle proprietà sono applicate subito. Puoi rivedere o tornare indietro usando il menu contestuale per ogni elemento. OpzioniAggiungi i tuoi dettagli di autenticazioneDescrivi perchè vuoi bloccare questi filesFile SSL di certificazione necessarioMessaggi PrecedentiProgramma usato per confrontare i fileProprieta per:RabbitVCSURI remota:RepositoryIntervallo RevisioniRevisioneTabella RevisioniAlla Revisionea: (URL e revisione a merge)Cronologia URLURL sorgente da effettuare il MergeInformazioni della VersioneCopia di Lavoro:Copia di LavoroLe proprietà selezionate non possono essere applicate ricorsivamente.Sei sicuro di voler cancellare %item%?RabbitVCSErrore RabbitVCSProcedura guidata per il mergeInformazioni suInformazioni su RabbitVCSAccetta SempreAccetta una VoltaAzioneAggiungiAggiungi iconaAggiungi una nuova proprietà.Aggiungi un'iconaAggiungi in ignoraAggiungi una cartella al repositorySi è verificato un errore nell'estensione RabbitVCS Nautilus. Contatta il RabbitVCS team con i dettagli dell'errore specificati sotto:AnnotaAnnota - %sAnnota un fileAnnota...Applica il file unico con le differenza alla copia di lavoroApplica PatchApplica Path Alla CartellaApplica Patch...Applica le proprietà ricorsivamenteApplica Patch al File...Sei sicuro di voler cancellare le tue informazioni di autenticazione?Sei sicuro di voler cancellare i tuoi messaggi precedenti?Sei sicuro di voler pulire i percorsi del tuo repository?Sei sicuro di voler continuare ?AutenticazioneInformazioni di autenticazione cancellateAutoreAutori:Branch/tagBranch/tag...Sfoglia l'albero del repositorySfogliaSfoglia file o cartellaSfoglia...BugsNon posso annotare una cartellaModificaCambia la locazione del repository della copia di lavoroControlla CertificatoControlla modifiche...Controlla modifiche fatte nel repositoryPreleva una Copia di LavoroCheckoutCheckout - %sCheckout...Seleziona questo metodo se hai fatto qualche cambiamento al branch e vuoi effettuare un merge tra le tue modifiche e un altro branch.Seleziona questo metodo se vuoi effettuare un merge tra due differenti branch nella tua copia di lavoro.Pulisci la copia di lavoroPulizia in corso...PulisciRichiesta di pulizia.... Iniziare una pulizia nella copia di lavoro?Elimina i dati di autenticazioneChiudi la finestra.CommitInvia le modifiche al RepositoryConfronta file/cartelleConfronta le revisioniConfronta affiancatoConfronta le differenze tra due oggettiConfronta con la baseConfronta con la base affiancando le finestreCompara con la versione precedenteConfronta con la revisione precedente affiancando le finestreCompara con la copia localeAggiunta completataBranch/tag completatoCheckout completatoPulizia CompletataCommit CompletatoEsportazione CompletataImportazione completataBlocco CompletatoMerge CompletatoTest del Merge CompletatoRicollocamento CompletatoRinomina CompletataRisoluzione CompletataRipristino completatoScambio completatoSblocco completatoAggiornamento completatoConfermaCopia dal PercorsoCopia dalla RevisioneCopia l'URL nella clipboardCopia un oggetto in un altra parte del repositoryCopia in...Crea cartella...Crea PatchCrea Patch...Crea un Repository quaCrea un Repositori in una cartellaCrea cartellaCrea un file unico con le differenza di tutte le modifiche fatteCrea Patch File...DataDebugDebug RipristinoCancellaCancella ConfermaCancella le proprietà ricorsivamenteCancella proprietàCancella questa proprietàCancella questa proprietà (ricorsivo)NegaMenu Differenze...Vuoi cancellare la proprietà selezionata da tutti i file e sotto-cartelle sotto questa cartella?Modifica autoreModifica autore...Modifica messaggio di logModifica messaggio di log...Modifica le proprietà della revisione...Modifica...Abilita iconeAbilita gli attributi dei fileAbilita il controllo ricorsivo degli statiIngleseEsportaEsporta - %sEsporta la copia di lavoro o repository senza le informazioni di versioneEsporta...EstensioneProgrammi esterniFile senza controllo versioneFingerprint:FinitoForza una chiamata a invalidate_extension_info()Trovati %d oggettiDa:GeneraleBloccaBlocca...HEADAiutoHost:Ignora AntenatiIgnora oggetto dall'estensioneIgnora oggetto dal nome fileImportaImporta - %sImporta un oggetto in un repositoryIncludi file ignoratiInvalidaEmittenteLingua:Limiti:LineaVisualizza opzioni di confrontoCarica/AggiornaCaricamento...Blocca gli oggetti localmenteFile BloccatiBloccatoLogLog - %sMessaggio di logLoggingLogin:Segna un oggetto in conflitto come risoltoMergeAssistente al MergeEffettua un Merge per un intervallo di revisioniEffettua un merge di due differenti alberiMerge...MessaggioTipo MimeLivello minimo per logAltre azioni...Sposta in...N/ANomeNuova Destinazione:Nuiovo Nome:Nuovo...NoMessaggi di NotificaNumeroNumero di URL da ricordareNumero di messaggi da ricordareOmetti esterniRegistra solo il mergeApriApri ShellApri un fileApri dalla prima revisioneApri dalla seconda revisionePassword:Patch al File ApplicataPatch File CreatoPercorsoPercorso:Messaggi PrecedentiMessaggi precedenti cancellatiProprietaProprieta - %sProprietaCambia ProprietàModifica delle proprietàStato ProprietaProprieta:RabbitVCSErrore RabbitVCSDominio:RicorsivoAggiornaAggiorna StatoAggiorna la lista delle proprietà.Sblocca...Sblocca l'oggettoRicollocaRicolloca la tua copia di lavoroRicolloca...RinominaRinonima...Sfoglia RepositoryPercorsi del repository pulitiRepository creato con successoRiservatoRisolviRipristinaRipristina oggetto mancanteRipristinaRipristina gli oggetti nel loro stato non modificatoRipristina proprietàRipristina proprietà (ricorsivo)Ripristina questa proprietà con il suo stato originaleRipristina questa proprietà con il suo stato originale (ricorsivo)Ripristina tutto ciÃ˛ che vediRevisioneRevisione:Esecuzione del comando Aggiungi...Esecuzione del comando Branch/tag...Esecuzione del comando Checkout...Esecuzione del comando Commit...Esecuzione del comando di Esportazione...Esecuzione del comando di Importazione...Esecuzione del comando Blocca...Esecuzione del comando Merge...Esecuzione del Merge Test...Esecuzione del comando di RicollocamentoEsecuzione del comando Rinomina...Esecuzione del comando Risolvi...Esecuzione del comando di Ripristino...Esecuzione del comando di Scambio...Esecuzione del comando Sblocca...SSL Client CertificationeSalva con nome...Salva AutenticazioneDati salvatiSchedula un oggetto da essere cancellato dal repositorySchedula un oggetto da essere rinonimato nel repositorySchedula oggetti da aggiungere al repositorySelezione / Deseleziona tuttiSeleziona un FileSeleziona una CartellaSeleziona un programmaOpzioniVisualizza modifiche...Visualizza LogMostra gli strumenti di debugging di RabbitVCSVisualizza il file logVisualizza modifiche tra percorsi e revisioniVisualizza le modifiche tra le revisioniVisualizza LogVisualizza i file non versionatiRevisioni:DimensioneStatusRuba il bloccaggioFerma su copiaScambiaScambia...Testa il MergeTestoTesto ModificatoStato TestoGrazie:Il menu di debug è usato per diagnosticare problemi con RabbitVCSI campi da e url sono entrambi obbligatoriIl campo da revisione deve essere un interoIl percorso non è la copia di lavoroGli oggetti verranno inviati al cestino.Il campo nuovo nome è obbligatorio.I campi URL e percorso di destinazione del repository sono entrambi obbligatori.Il campo URL del repository è obbligatorio.La locazione del repository è un campo obbligatorioErrore nel salvataggio delle proprietàC'è stato un errore nella creazione del repository. Verifica che la cartella sia vuota.A:Tipo:URL/PathURL:Impossibile caricare le proprietàImpossibile inserire valore della proprietàSconosciutoSbloccaAggiornaAggiorna alla RevisioneAggiorna il file alla specifica revisioneAggiorna la Copia di LavoroAggiorna alla revisione...Aggiornamento in corso...Usa la finestra del log per selezionare le revisioni su cui vuoi effettuare il merge. Oppure scrivi le revisioni manualmente, ognuna separata da una virgola. Pure specificare un intervallo con un trattino. Esempio: 4-7,9,11,15-HEAD Per eseguire il merge di tutte le revisioni, lascia il box vuoto.Valido:ValoreValore:Visualizza differenze con la baseVisualizza le differenze con la revisione precedenteVisualizza le differenze con la copia di lavoroVisualizza le differenze affiancateVisualizza differenze tra file/cartelleGuarda differenze tra le versioniVisualizza aiutoVisualizza o cambia le opzioni di RabbitVCSVisualizza differenze tra due fileVisualizza le modifiche fatte al fileVisualizza le modifiche fatte al file dall'ultimo cambiamentoVisualizza le proprieta di un oggettoVisualizza differenze uniteDove vuoi copiare la selezione?Dove vuoi muovere la selezione?Copia lavoroSiDevi specificare un percorso di destinazioneoggetti selezionatiarabbitvcs-0.19/locale/ja/000077500000000000000000000000001445560650400152645ustar00rootroot00000000000000rabbitvcs-0.19/locale/ja/LC_MESSAGES/000077500000000000000000000000001445560650400170515ustar00rootroot00000000000000rabbitvcs-0.19/locale/ja/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000457041445560650400211770ustar00rootroot00000000000000Ū•Ŧo<øų.AVg x†ŠŗČ1ã'DYn(~§ ŊĘŪõ-6Ax$‘ļÍŪđ-&@gz“ŽHÂ- 9Y_o ~Š‘ •  ŽÁ ĘØ č?ô645k"ĄÄ"Ķöũ    )380T…—° špĮV8Ĩ´2ŧ%ī& CQfy‹œ­žÍŨō  ( 9 J [ l y ˆ 2› Î å ! !!!+!0!8!G!^!}!…! Œ!B˜! Û!å! ÷!") "7"H"N"V" _"k"p"u"{"‹" ’" ž"ŋ" Õ"ā" č"ō"ų" ū" # #'#.#2#;#C#"J#m#s#ƒ#ž#¸#Á# É#Ķ#č#ė# ņ#û#$$3$R$a$w$ |$ ‡$‘$¤$Š$ģ$ Õ$ā$đ$ų$ % %% $%.%6%E%U%m%v% ‘%% ¤%Ž%Į%į%ī%÷%&ū%%&.&E&c&&™&ŗ&Í&å&û&'*'D'_'y'“'­' Á'2Ė'0˙'0( F(T(d(u(~(‡(Ĩ(Ž(Å(Ø(ß( ī(ü( ) )) )))-1)*_)$Š)*¯)Ú)Aų)%;*,a*QŽ*ā*ä* ę*ô*ų*+++$"+G+]+ s+ú+z,,‡, Ž,!˜,%ē,ā,˙,#-'-<-Ã?-/ ///!/(/./ 4/@/D/ d/r//7§/ß/(÷/ 0@0 Z02h0.›0Ę0á0ū01211I1F{1Â1:â12,2=2T2t2‹2Ą22ģ2î2˙23/3UF3-œ3Ę3ã3ų34%4A4Q4X4q4Š4Ŗ4 Ē4ļ4 Ė4+Ö445:75r5Œ5$“5¸5ŋ5Į5Û5ō5 ų56* 6956o6'Ž6ļ6Ė6į6yx7'ō7868gL8´8 Ę8*×8 99-9I9e9x9‘9§9ˇ9Į9ā9đ9 ::):<: R:_:f:|:B›:!Ū:*;+; 2;?;F;V; ];!g;$‰;0Ž;ß;æ;ų;c<u<|<’<¯<7ļ<,î<= ='=:=P= W= a=l=ˆ=˜=0­=Ū=ũ= >> >(>,>'<>d> €>Š> ‘>> ¤>9˛> ė>ö>$?%7? ]?j? z?$ˆ?­?ą?¸? É?Ķ?é?!˙?!@=@Y@`@s@„@š@Ą@-ē@č@ī@A AA #A-A 5A?AFAVA$lA ‘A›A ˇA ÄAŅA3áA-BCBJB QB^BzB ŠB/—BĮBãBķB C"C 2C?CUCeC CŽC§CēCÍCãC9öC?0DpDDĨDģDÔDÛD$ëDE6 E"WEzEE!E ŋEĖEÜE øEFFL#F?pFE°F>öF*5GT`G-ĩG3ãGuHH’H šHĻHĢH˛HÂH!ÉH$ëHI$)I NI[IéJņJõJúJ K' K'HKpK-wKĨKÁKåũŊãvõHf€Õ‡.ŧār{tE´LŖŦy˜ģ ˙ž,@ƒ—( j ÆļŠMĄ kącáé*“ø4ĘĮĨXÉN¨7ŋ¸§š+Q•GÔCč:AUišų9Ķ|ޝÍ÷ôį…ēVnÛė°2BIO>D \o”ŠäPŪ"~ü & Fˆ ÅÚ q<×sņÃx­’Yg–Č_í$ KķúSâœÜûĢÎæë0hz#Đđ¤ Rw`ÖŌ‹=ī%ĒË Ÿu'8ĩ‚1†T6ØÁbūŲĀ!3^Ė/aÂĻ5›;öŒō[l˛}-ĸßmp‰ˇWŗĪJ]ZeędŨÄ?™Ņ‘)„%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished100Add MessageAuthenticationBranch DetailCertificate DetailsChange the repository of your working copyCommit to:Edit Property DetailsFiles to lockFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageOptionsPlease add your authentication detailsPlease describe why you are locking these filesPrevious MessagesProgram used to compare filesProperties for:RabbitVCSRepositoryRevision RangeRevisionRevisions TableTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromVersion InformationWorking CopyAre you sure you want to delete %item%?RabbitVCSA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd an emblemAdd to ignore listAnnotateAnnotate - %sAnnotate a fileAnnotate...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBranch/tag...Browse toBrowse...BugsCannot annotate a directoryChange the repository location of a working copyCheck CertificateCheck out a working copyCheckoutCheckout - %sChoose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationCommitCommit modifications to the repositoryCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationCopy From PathCopy From RevisionCopy an item to another location in the repositoryCreate Repository hereCreate a repository in a folderDateDebugDeleteDelete ConfirmationDenyEdit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExtensionExternal ProgramsFingerprint:FinishedForce an invalidate_extension_info() callFound %d item(s)From:GeneralGet LockGet Lock...HEADHelpHost:Ignore ancestryImportImport - %sImport an item into a repositoryInclude ignored filesInvalidateIssuer:Language:Limit:LineLoading...Locally lock itemsLock FilesLockedLogLog - %sLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MessageMime TypeMinimum level to logN/ANameNew Name:New...Notification MessagesNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen ShellPassword:Patch File CreatedPathPrevious MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty StatusProperty:RabbitVCSRealm:RecursiveRefreshRefresh StatusRelease Lock...Release lock on an itemRelocateRelocate your working copyRelocate...RenameRename...Repository paths clearedRepository successfully createdResolveRestoreRevertRevert an item to its unmodified stateRevisionRunning Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...Save AuthenticationSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow LogShow a file's log informationShow logShow unversioned filesShowing Revisions:StatusSteal the locksStop on copySwitchSwitch...Test MergeTextText StatusThanks:The from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:UnknownUnlockUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...Updating...Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.Valid:ValueValue:View helpView or change RabbitVCS settingsView the modifications made to a fileView the properties of an itemYesYou must supply a destination path.the selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-12-02 16:25+0000 Last-Translator: yamafuji mitsugu Language-Team: Japanese MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %iæ—Ĩ%i時間%i分%iãƒļ月%i į§’%i週%iåš´%s - 厌äē†100ãƒĄãƒƒã‚ģãƒŧジぎčŋŊ加čĒč¨ŧãƒ–ãƒŠãƒŗãƒ čŠŗį´°č¨ŧæ˜Žæ›¸ãŽčŠŗį´°äŊœæĨ­ã‚ŗãƒ”ãƒŧぎãƒŦポジトãƒĒã‚’å¤‰æ›´ã™ã‚‹ã‚ŗãƒŸãƒƒãƒˆå…ˆ:ãƒ—ãƒ­ãƒ‘ãƒ†ã‚ŖãŽčŠŗį´°ã‚’įˇ¨é›†ãƒ­ãƒƒã‚¯ã™ãƒ•ã‚Ąã‚¤ãƒĢ元ãƒĒãƒ“ã‚¸ãƒ§ãƒŗå…ƒURL元: (マãƒŧジするURLとãƒĒãƒ“ã‚¸ãƒ§ãƒŗ)ãƒĄãƒƒã‚ģãƒŧã‚¸ã‚’ã‚¤ãƒŗãƒãƒŧトするé–ĸ逪ãƒĒãƒŗã‚¯ãƒ­ã‚°ãƒĄãƒƒã‚ģãƒŧジログã‚Ēãƒ—ã‚ˇãƒ§ãƒŗãƒĄãƒƒã‚ģãƒŧジã‚Ēãƒ—ã‚ˇãƒ§ãƒŗčĒč¨ŧãŽčŠŗį´°ã‚’čŋŊ加しãĻãã ã•ã„ãƒ•ã‚Ąã‚¤ãƒĢã‚’ãƒ­ãƒƒã‚¯ã™ã‚‹į†į”ąã‚’å…Ĩ力しãĻくださいäģĨå‰ãŽãƒĄãƒƒã‚ģãƒŧã‚¸ãƒ•ã‚Ąã‚¤ãƒĢぎ比čŧƒãĢäŊŋį”¨ã™ã‚‹ãƒ—ãƒ­ã‚°ãƒŠãƒ åąžæ€§:RabbitVCSãƒŦポジトãƒĒãƒĒãƒ“ã‚¸ãƒ§ãƒŗãŽį¯„å›˛ãƒĒãƒ“ã‚¸ãƒ§ãƒŗãƒĒãƒ“ã‚¸ãƒ§ãƒŗä¸€čĻ§å…ˆãƒĒãƒ“ã‚¸ãƒ§ãƒŗå…ˆ: (マãƒŧジするURLとãƒĒãƒ“ã‚¸ãƒ§ãƒŗ)URLåąĨ歴マãƒŧジ元ぎURLバãƒŧã‚¸ãƒ§ãƒŗæƒ…å ąäŊœæĨ­ã‚ŗãƒ”ãƒŧæœŦåŊ“ãĢ%iつぎã‚ĸイテムを削除しぞすか%?RabbitVCSマãƒŧジã‚Ļã‚Ŗã‚ļãƒŧドRabbitVCSãĢついãĻRabbitVCSãĢついãĻäģŠåžŒå—けå…Ĩれる一åēĻだけ受けå…Ĩれるã‚ĸã‚¯ã‚ˇãƒ§ãƒŗčŋŊåŠ ã‚¨ãƒŗãƒ–ãƒŦムをčŋŊåŠ ã‚¨ãƒŗãƒ–ãƒŦムをčŋŊåŠ į„ĄčĻ–ãƒĒ゚トãĢčŋŊåŠ æŗ¨é‡ˆæŗ¨é‡ˆ - %sãƒ•ã‚Ąã‚¤ãƒĢãĢæŗ¨é‡ˆæŗ¨é‡ˆ...æœŦåŊ“ãĢčĒč¨ŧæƒ…å ąã‚’å‰Šé™¤ã—ãžã™ã‹?æœŦåŊ“ãĢãƒ­ã‚°ãƒĄãƒƒã‚ģãƒŧジを削除しぞすか?æœŦåŊ“ãĢãƒŦポジトãƒĒぎパ゚をクãƒĒã‚ĸしぞすか?æœŦåŊ“ãĢįļšã‘ぞすか?čĒč¨ŧčĒč¨ŧæƒ…å ąã¯å‰Šé™¤ã•ã‚Œãžã—ãŸäŊœč€…著者:ãƒ–ãƒŠãƒŗãƒ/ã‚ŋã‚°ãƒ–ãƒŠãƒŗãƒ/ã‚ŋグ...å‚į…§é–˛čϧ...ãƒã‚°ãƒ‡ã‚ŖãƒŦクトãƒĒãĢæŗ¨é‡ˆã§ããžã›ã‚“äŊœæĨ­ã‚ŗãƒ”ãƒŧぎãƒŦポジトãƒĒぎ場所を変更するč¨ŧ明書をチェックするäŊœæĨ­ã‚ŗãƒ”ãƒŧをチェックã‚ĸã‚Ļトチェックã‚ĸã‚Ļトチェックã‚ĸã‚Ļト - %sãƒ–ãƒŠãƒŗãƒãĢ変更を加えīŧŒãã‚Œã‚’åˆĨãŽãƒ–ãƒŠãƒŗãƒãĢ変更をマãƒŧジする場合īŧŒã“ãŽãƒĄã‚Ŋッドを選択しãĻくださいīŧŽ2ã¤ãŽį•°ãĒã‚‹ãƒ–ãƒŠãƒŗãƒã‚’äŊœæĨ­ã‚ŗãƒ”ãƒŧãĢマãƒŧジする場合īŧŒã“ãŽãƒĄã‚Ŋッドを選択しãĻくださいīŧŽäŊœæĨ­ã‚ŗãƒ”ãƒŧをクãƒĒãƒŧãƒŗã‚ĸップクãƒĒãƒŧãƒŗã‚ĸップ中...クãƒĒãƒŧãƒŗã‚ĸップクãƒĒãƒŧãƒŗã‚ĸップがčĻæą‚ã•ã‚Œãžã—ãŸ.... äŊœæĨ­ã‚ŗãƒ”ãƒŧをクãƒĒãƒŧãƒŗã‚ĸップしぞすか?čĒč¨ŧåąĨæ­´ã‚’å‰Šé™¤ã‚ŗãƒŸãƒƒãƒˆãƒŦポジトãƒĒã¸ãŽå¤‰æ›´ã‚’ã‚ŗãƒŸãƒƒãƒˆčŋŊ加厌äē†ãƒ–ãƒŠãƒŗãƒ/ã‚ŋグ ぎ厌äē†ãƒã‚§ãƒƒã‚¯ã‚ĸã‚Ļト厌äē†ã‚¯ãƒĒãƒŧãƒŗã‚ĸップ厌äē†ã‚ŗãƒŸãƒƒãƒˆåތäē†ã‚¨ã‚¯ã‚šãƒãƒŧト厌äē†ã‚¤ãƒŗãƒãƒŧト厌äē†ãƒ­ãƒƒã‚¯åތäē†ãƒžãƒŧジ厌äē†ãƒžãƒŧジテ゚ト厌äē†å†é…įŊŽåތäē†ãƒĒネãƒŧムぎ厌äē†č§Ŗæļˆåތäē†å…ƒãĢæˆģしぞした切りæ›ŋえ厌äē†ãƒ­ãƒƒã‚¯č§Ŗé™¤åތä熿›´æ–°åތäē†įĸēčĒãƒ‘ã‚šã‹ã‚‰ã‚ŗãƒ”ãƒŧãƒĒãƒ“ã‚¸ãƒ§ãƒŗã‹ã‚‰ã‚ŗãƒ”ãƒŧãƒŦポジトãƒĒ内ぎåˆĨぎ場所ãĢã‚ĸã‚¤ãƒ†ãƒ ã‚’ã‚ŗãƒ”ãƒŧするここãĢãƒŦポジトãƒĒをäŊœæˆãƒ•りãƒĢダ内ãĢãƒŦポジトãƒĒをäŊœæˆæ—Ĩäģ˜ãƒ‡ãƒãƒƒã‚°å‰Šé™¤å‰Šé™¤ãŽįĸēčĒæ‹’åĻᎍ集...ã‚¨ãƒŗãƒ–ãƒŦムを有劚ãĢã™ã‚‹ãƒ•ã‚Ąã‚¤ãƒĢåąžæ€§ã‚’æœ‰åŠšãĢã™ã‚‹å†å¸°įš„ãĒįŠļ態チェックを有劚ãĢã™ã‚‹č‹ąčĒžã‚¨ã‚¯ã‚šãƒãƒŧトエク゚ポãƒŧト - %sバãƒŧã‚¸ãƒ§ãƒŗæƒ…å ąį„Ąã—ã§īŧŒäŊœæĨ­ã‚ŗãƒ”ãƒŧぞたはãƒŦポジトãƒĒをエク゚ポãƒŧãƒˆã™ã‚‹æ‹Ąåŧĩå¤–éƒ¨ãƒ—ãƒ­ã‚°ãƒŠãƒ ãƒ•ã‚Ŗãƒŗã‚ŦãƒŧプãƒĒãƒŗãƒˆ:厌äē†invalidate_extension_info() å‘ŧãŗå‡ēしをåŧˇåˆļする%d個ぎã‚ĸイテムがčĻ‹ã¤ã‹ã‚Šãžã—ãŸå…ƒ:一čˆŦロックを取垗ロックを取垗...最新ヘãƒĢプポト:įŗģįĩ࿃…å ąã‚’į„ĄčĻ–ã™ã‚‹ã‚¤ãƒŗãƒãƒŧãƒˆã‚¤ãƒŗãƒãƒŧト - %sãƒŦポジトãƒĒãĢã‚ĸã‚¤ãƒ†ãƒ ã‚’ã‚¤ãƒŗãƒãƒŧãƒˆé™¤å¤–ãƒ•ã‚Ąã‚¤ãƒĢをåĢã‚ã‚‹į„ĄåŠšãĢするį™ē行者:言čĒž:期限:čĄŒãƒ­ãƒŧド中...ロãƒŧã‚ĢãƒĢでã‚ĸã‚¤ãƒ†ãƒ ã‚’ãƒ­ãƒƒã‚¯ãƒ­ãƒƒã‚¯ã™ã‚‹ãƒ•ã‚Ąã‚¤ãƒĢロックログログ - %sãƒ­ã‚°ãƒ­ã‚°ã‚¤ãƒŗ:įĢļ合するã‚ĸã‚¤ãƒ†ãƒ ã‚’č§Ŗæąē済ãŋãĢマãƒŧクするマãƒŧジマãƒŧジã‚ĸã‚ˇã‚šã‚ŋãƒŗãƒˆãƒĒãƒ“ã‚¸ãƒ§ãƒŗãŽį¯„å›˛ã‚’ãƒžãƒŧã‚¸į•°ãĒる2つぎツãƒĒãƒŧをマãƒŧジマãƒŧジ...ãƒĄãƒƒã‚ģãƒŧジMimeã‚ŋイプæŦĄãŽãƒŦベãƒĢäģĨä¸Šã‚’č¨˜éŒ˛ã™ã‚‹N/A名前新しい名前:新čĻ...通įŸĨãƒĄãƒƒã‚ģãƒŧã‚¸č¨˜éŒ˛ã™ã‚‹URLãŽæ•°č¨˜éŒ˛ã™ã‚‹ãƒĄãƒƒã‚ģãƒŧã‚¸ãŽæ•°å¤–éƒ¨å‚į…§ã‚’é™¤å¤–ã™ã‚‹ãƒžãƒŧジぎãŋč¨˜éŒ˛ã™ã‚‹é–‹ãã‚ˇã‚§ãƒĢを開くパ゚ワãƒŧド:äŋŽæ­Ŗã‚’äŊœæˆåތäē†ãƒ‘゚äģĨå‰ãŽãƒĄãƒƒã‚ģãƒŧã‚¸ãƒ­ã‚°ãƒĄãƒƒã‚ģãƒŧã‚¸ã¯å‰Šé™¤ã•ã‚Œãžã—ãŸåąžæ€§ãƒ—ãƒ­ãƒ‘ãƒ†ã‚Ŗ - %såąžæ€§åąžæ€§ãŽįŠļæ…‹åąžæ€§:RabbitVCS領域:å†å¸°įš„æ›´æ–°įŠļ態を更新ロックを開攞...ã‚ĸイテム上でロックを開攞再配įŊŽäŊœæĨ­ã‚ŗãƒ”ãƒŧを再配įŊŽå†é…įŊŽ...ãƒĒネãƒŧムãƒĒネãƒŧム...ãƒŦポジトãƒĒぎパ゚はクãƒĒã‚ĸされぞしたãƒŦポジトãƒĒぎäŊœæˆãĢæˆåŠŸã—ãžã—ãŸč§ŖæļˆåžŠå…ƒå…ƒãĢæˆģすæœĒ変更ぎįŠļ態ãĢæˆģすãƒĒãƒ“ã‚¸ãƒ§ãƒŗčŋŊ加中...ãƒ–ãƒŠãƒŗãƒ/ã‚ŋグ ã‚ŗãƒžãƒŗãƒ‰ã‚’åŽŸčĄŒä¸­...チェックã‚ĸã‚Ļト中...ã‚ŗãƒŸãƒƒãƒˆä¸­ã‚¨ã‚¯ã‚šãƒãƒŧト中...ã‚¤ãƒŗãƒãƒŧト中...ロック中...マãƒŧジ中マãƒŧジテ゚ト中再配įŊŽä¸­...ãƒĒネãƒŧãƒ ã‚’åŽŸčĄŒä¸­...č§Ŗæļˆä¸­...元ãĢæˆģしãĻいぞす切りæ›ŋえ中...ãƒ­ãƒƒã‚¯č§Ŗé™¤ä¸­čĒč¨ŧをäŋå­˜ã™ã‚‹ãƒ‡ãƒŧã‚ŋぎäŋå­˜ãƒŦポジトãƒĒへぎã‚ĸイテムぎ削除をäēˆåŽšã™ã‚‹ãƒŦポジトãƒĒへぎã‚ĸイテムぎãƒĒネãƒŧムをäēˆåŽšã™ã‚‹å…¨ãĻ選択īŧå…¨ãĻéžé¸æŠžãƒ•ã‚Ąã‚¤ãƒĢを選択フりãƒĢãƒ€ã‚’é¸æŠžãƒ—ãƒ­ã‚°ãƒŠãƒ ã‚’é¸æŠžč¨­åŽšãƒ­ã‚°ã‚’čĄ¨į¤ēãƒ•ã‚Ąã‚¤ãƒĢãŽãƒ­ã‚°æƒ…å ąã‚’čĻ‹ã‚‹ãƒ­ã‚°ã‚’čĄ¨į¤ēバãƒŧã‚¸ãƒ§ãƒŗįŽĄį†å¤–ãŽãƒ•ã‚Ąã‚¤ãƒĢã‚’čĄ¨į¤ēã™ã‚‹čĄ¨į¤ēしãĻいるãƒĒãƒ“ã‚¸ãƒ§ãƒŗ:įŠļ態ロックをæ¨Ēå–ã‚Šã™ã‚‹ã‚ŗãƒ”ãƒŧがį™ēį”Ÿã—ãŸã‚‰åœæ­ĸ切りæ›ŋえ切りæ›ŋえ...マãƒŧジをテ゚トするテキ゚トテキ゚トぎįŠļ態čŦčžž:FROMãƒ•ã‚ŖãƒŧãƒĢドとURLãƒ•ã‚ŖãƒŧãƒĢãƒ‰ãŽä¸Ąæ–šãĢå…Ĩ力しãĻください元ãƒĒãƒ“ã‚¸ãƒ§ãƒŗį•Ēåˇã¯æ•´æ•°ã§ãĒければãĒりぞせん与えられたパ゚はワãƒŧã‚­ãƒŗã‚°ã‚ŗãƒ”ãƒŧではありぞせんそぎ(それらぎ)ã‚ĸã‚¤ãƒ†ãƒ ã¯ã‚´ãƒŸįŽąã¸é€ã‚‰ã‚Œãžã™æ–°ã—ã„åå‰ã‚’å…Ĩ力しãĻくださいãƒŦポジトãƒĒぎURLとチェックã‚ĸã‚Ļãƒˆå…ˆãŽä¸Ąæ–šãŽå…Ĩ力がåŋ…čĻã§ã™īŧŽãƒŦポジトãƒĒURLをå…Ĩ力しãĻくださいãƒŦポジトãƒĒぎ場所をå…Ĩ力しãĻくださいãƒĒポジトãƒĒäŊœæˆä¸­ãĢエナãƒŧがį™ēį”Ÿã—ãžã—ãŸīŧŽãƒ•りãƒĢダがįŠēであるかįĸēčĒã—ãĻくださいīŧŽå…ˆ:į¨ŽéĄž:URL/パ゚:URL:ä¸æ˜Žãƒ­ãƒƒã‚¯č§Ŗé™¤æ›´æ–°į‰šåŽšãŽãƒĒãƒ“ã‚¸ãƒ§ãƒŗã¸æ›´æ–°į‰šåŽšãŽãƒĒãƒ“ã‚¸ãƒ§ãƒŗã¸æ›´æ–°...äŊœæĨ­ã‚ŗãƒ”ãƒŧã‚’æ›´æ–°į‰šåŽšãŽãƒĒãƒ“ã‚¸ãƒ§ãƒŗã¸æ›´æ–°...更新中...マãƒŧジしたいãƒĒãƒ“ã‚¸ãƒ§ãƒŗãŽé¸æŠžãĢログダイã‚ĸãƒ­ã‚°ã‚’åˆŠį”¨ã™ã‚‹īŧŒã‚‚しくはīŧŒãƒžãƒŧジするãƒĒãƒ“ã‚¸ãƒ§ãƒŗã‚’ã‚ŗãƒŗãƒžã§åŒēåˆ‡ãŖãĻå…Ĩ力しãĻくださいīŧŽãƒĒãƒ“ã‚¸ãƒ§ãƒŗãŽį¯„å›˛ã¯ãƒã‚¤ãƒ•ãƒŗã§æŒ‡åŽšã™ã‚‹ã“ã¨ãŒã§ããžã™īŧŽ 例: 4-7,9,11,15-HEAD すずãĻぎãƒĒãƒ“ã‚¸ãƒ§ãƒŗã‚’ãƒžãƒŧジするãĢはīŧŒå…Ĩ力ボック゚をįŠēぎぞぞãĢしãĻくださいīŧŽæœ‰åŠš:値値:ヘãƒĢãƒ—ãŽé–˛čϧRabbitVCSãŽč¨­åŽšãƒ•ã‚Ąã‚¤ãƒĢãĢ寞する変更をčĻ‹ã‚‹ã‚ĸã‚¤ãƒ†ãƒ ãŽãƒ—ãƒ­ãƒ‘ãƒ†ã‚Ŗã‚’čĻ‹ã‚‹ã¯ã„é€ã‚Šå…ˆãƒ‘ã‚šã‚’č¨­åŽšã—ãĻくださいīŧŽé¸æŠžã•れたã‚ĸイテムtorabbitvcs-0.19/locale/ko/000077500000000000000000000000001445560650400153035ustar00rootroot00000000000000rabbitvcs-0.19/locale/ko/LC_MESSAGES/000077500000000000000000000000001445560650400170705ustar00rootroot00000000000000rabbitvcs-0.19/locale/ko/LC_MESSAGES/RabbitVCS.mo000066400000000000000000001114111445560650400212030ustar00rootroot00000000000000Ū•í„“ė8)9)J)Y)j))’)§)¸) É) ×)2á)*'*;6*r*ˆ*1Ŗ*8Õ*+#+@+9\+–+´+#Ņ+õ+ ,,(-,2V,‰,Ÿ,¯,Ã,Ú,ō,-€-˜-§- Ā-6Ė-1.5.N.$a.†..¸.Ë.Ũ.ú./ /7/ I/&U/|//¨/Į/Ü/Wđ/ŧH0717=1ru1Hč1:12l2Œ2’2ĸ2 ą2 Ŋ2 É2×2 Û2æ2 ú2 33 %3’F3Ų3 â3đ3(4)4/G4(w4  4/Ŧ4Ü4ë4545?P5655Į5"ũ5# 6"D6g6n6v6 }6‹6“6œ6 ĩ6ŋ6 Ú6ä6é6đ60 7=7O7.j7™7˛7Å7 Î7pÚ7VK8Fĸ8é8ī8999%"9H9N9a9g9„9&‹9!˛9Ô9ņ9::)4:/^:*Ž:š:4Ë:;A;a; {;‰;œ;Ŧ;ž;Î;ß;đ;<<+<;<P<c<t<„<•<¨<¸<É<Û<ė< = =!=1=@=S=2i=œ=2Ž= á=ė=ũ= >$>D>5U>‹>>Ą>§> ­>ē>Á>Õ>ķ>?? 4?U? Z?gg?Ī?×? æ?ō?@ @@.@B@^@ e@p@‚@‘@¨@Į@ Î@BÚ@ A 'A1ACA ZA"eAˆA‘A)—AAÁABBB %B1B7B3QAjQQŦQūQ"R%'RMRUR \RgRoRvR$‰RŽR7ÄR)üR&So(Ro{oo¯oĘoâo÷op1pLphpˆpœp´pÃpĘpŲpípq.qNq>eq ¤qŽqŋqÔqōqr=!r_rfr{r ƒrr¤r Ģršr ×rårürs)s0sƒ@sÄs Õsãsôs tt+tCt^t yt „t’t§tģtĶtītuIu`upuwu*‹uļu/Īu ˙u v,vf>v$ĨvĘvŅvØv ņv ûv5w;w Xw bwmw |wŠw$™w!žw āwíw$˙w&$xKx _xixmx‚x œx §xĩx ÍxÛx âxîx ˙x y'$yLy cyqy$‚y§yÂyây ķy ũyz z)z0zDz Lz Xzdz„z•zœzŽz ÆzÔzæzíz {{{"{#3{W{ ^{j{q{ ‚{{Ÿ{ §{´{ Å{ Ķ{ ā{î{ ū{ | |5|R|g|y|Ž|%ĸ|Č|Ų|ô| }#}#6}5Z} }}¯} Æ}&Ô}3û} /~:~A~6R~‰~~¤~Ģ~ Ä~4Ņ~(/C+`4Œ/Áņ€ €0;€l€ €€%Ą€"Į€#ę€))8!b„"¤Į(ã& ‚"3‚(V‚)‚Š‚)Ăî‚ ƒ&ƒ-ƒKƒ`ƒƒ'“ƒ.ģƒ%ęƒ„ %„ 3„A„]U„ŗ„˄Ō„ ë„ų„…&0…$W…/|…Ŧ… ȅ é…÷…†+†"@†c†u†|††—†¨†/Á†*ņ†‡<‡U‡ f‡t‡ †‡’‡Ŗ‡ ˛‡ŋ‡Ї ׇRå‡'8ˆ.`ˆ$ˆ,´ˆ(áˆ/ ‰;:‰Lv‰kÉ/Š+7Š7cЛРNJ ˇŠÁŠڊ īŠ'‹,8‹?e‹1Ĩ‹׋õ‹ŒM$Œ9rŦްŽĩŽ!ĶŽõŽ'";^(}Ļ%ˇŨü<T2k.žH͐7‘7N‘†‘ž‘Xĸ‘ û‘ ’ ’’ <’ G’ R’`’o’ ~’ Œ’ —’ĸ’ ŗ’ ž’ɒ Ņ’ےâ’ķ’#^S BÚŲ.ĀZ;}8ũ\Žs˛Ūå7EĪäã€ļžC%øp0"&täy(ņ Š„÷ÆŊč˛Jí9"ŒįĄCÖāá‹_ZæuV‚¸Ž é–h¯´į@E F•ŗģeivŦĩŖ[ 4͐›a˜ ã/Tל”2 ŌÚU9šĢžÉ)W¤yĶ™ëL€@-ˇß)lÕl 7/ąŊ{ēū1ŨŠD&:ŧ‚zwaßsžHĪÛV3O¤ČÉK]Ļ–¨ģĸG’\ræØŨÁõ°~ŗå•50’X'‡ĘļĸRЍâ5„*,Ŗ†|͆‘e=Ô ËiėƒIŠŽĄû;Sq:‰ dÎŲb‘tQO×,`M#8cˇđĮjuƒÕ“ĨÆ6éĀw+vK›-!ÁmDA°ËÛÍh}öēFgfÅŽę¸q~ųÜÄš {ėQ­4UŦîI2'X™Ēí$ŧWbAHˆŅ$ĻPôRʼnĒč˜x1YŸÜ¯>“ÃØP`”§n—Œâĩ<Ĩ^˙ŪcjxķˆÖęną3ŋN%ÃĮü<úT—>Äŋ!k6Gr§‡ČMō+ĐáLšYī­[˜Î. z?Ō šd…´ooĖŅ*_kÂ?Ÿ‹…Š= Ę]|fÔg(ëpžNBJ¨āĢm%d minute(s) ago%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished(no date)A conflict was found in the following file:Add MessageAdd TagAffected File(s) (double-click to compare with base)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Checker type:Clean your RepositoryConfiguration EditorConfigure the program to resolve conflicted files.Default Commit MessageEdit Property DetailsEnter Name and Email DetailsFiles to lockFolder NameFrom URLFrom: (URL and revision to merge)Ignore and exclude files from being trackedImport MessageLocale: Log MessagesLogging OptionsMark Conflict AsMemory usage: MessageNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. OptionsOther InformationPathPlease describe why you are locking these filesPlease provide your ssl certification filePrevious MessagesProcess ID:Program used to compare filesProperties for:Remote RepositoriesRemote URI:RepositoryReset your RepositoryRevision RangeRevisionRevisions TableTag DetailTagsTo: (URL and revision to merge)URL HistoryURL to merge fromVersion Control SystemsWorking Copy:Working CopyHard - Matches the working tree and index to that of the tree being switched toMerge - Resets the index to match the tree recorded by the named commit, and updates the files that are different between the named commit and the current commit in the working treeMixed - Reset the index but not the working treeSelected properties will be applied recursively.Soft - Does not touch the index file or working tree at all, but requires them to be in good working orderAre you sure you want to delete %item%?RabbitVCS ErrorA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept MineAccept OnceAccept TheirsAddAdd EmblemAdd a new property.Add an emblemAdd line:Add to ignore listAdded a folder to the repositoryAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sAnnotate a fileAnnotate the revision following this oneAnnotate this file's revisionAnnotate this file's revision in another windowAnnotate this revision in another windowAnnotate...Applies a unified diff file to the working copyApply Patch...Apply property recursivelyApply remote changesApply remote changes prior to local changes (rebase)Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?Are you sure you want to delete %s?Authentication information clearedAuthorAuthor:BranchBranch/tag...Branch:BranchesBrowse a repository treeBrowse toBrowse to a file or folderBrowse...BugsCancelCannot annotate a directoryChange the repository location of a working copyCheck CertificateCheck for Modifications...Check for modifications made to the repositoryCheck out a working copyChecking out %s...CheckoutCheckout...Choose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Choose this method if you wish to reintegrate a branch into the trunk.CleanClean up working copyCleaning Up...CleanupClearClear your authentication informationCloneClose this dialog.ColorColorize commits and authorsCommitCommit modifications to the repositoryCompare against previous revisionCompare against working copyCompare files/foldersCompare revisionsCompare selected revisionsCompare the differences between two itemsCompare this revision against previous revisionCompare this revision against working copyCompare with baseCompare with base using side-by-side comparison toolCompare with previous revisionCompare with previous revision using side-by-side comparison toolCompare with working copyCompleted AddCompleted CheckoutCompleted CleanCompleted CleanupCompleted CloneCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted Mark as ResolvedCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResetCompleted RevertCompleted RollbackCompleted StageCompleted UnlockCompleted UnstageCompleted UpdateCompleted repository setupConfig file:ConfirmationContent status:Copy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to clipboardCopy to clipboard the full data of these revisionsCopy to...Create Folder...Create Patch...Create Repository hereCreate a repository in a folderCreate folder...Creates a unified diff file with all changes you madeDateDate/time formatDate:DebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDelete propertyDelete property (recursive)Delete this propertyDelete this property (recursive)DenyDiff Menu...Do you want to delete the selected properties from all files and subdirectories beneath this directory?Dry runEdit ConflictsEdit authorEdit author...Edit conflictsEdit detailsEdit log messageEdit log message...Edit revision properties...Email:Enable GitEnable SubversionEnable emblemsEnable file attributesEnable recursive status checksExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternal ProgramsFetch from all remotesFetch/PullFile is not under version control.FinishedForceForce an invalidate_extension_info() callFound %(changed)d changed and %(unversioned)d unversioned item(s)Found %d item(s)GeneralGet LockGet Lock...GraphHelpHighlight source lines according to language syntaxHighlight source syntaxHostHost:IgnoreIgnore ancestryIgnore file:Ignore item by file extensionIgnore item by filenameImportImport - %sImport an item into a repositoryInclude ignored filesInitialize RepositoryInvalidateLineList of comparison optionsLoad/RefreshLoadingLoading...Locally lock itemsLock FilesLockedLog - %sLog MessageLoggingMark ResolvedMark a conflicted item as resolvedMark as ResolvedMergeMerge AssistantMerge a range of revisionsMerge into local branchMerge two different treesMerge...MessageMessage:Minimum level to log:Move to...NameName and EmailName:New Location:New Name:No active branchNotification MessagesNumberNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen Python ConsoleOpen a filePathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty EditorProperty StatusProperty status:Property:PushRabbitVCS ErrorRabbitVCS GitRabbitVCS HgRabbitVCS SVNRecursiveRefreshRefresh InformationRefresh StatusRefresh the list of properties.Reintegrate a branchRelease Lock...Release lock on an itemRelocateRelocate your working copyRelocate...Remote Repository ManagerRemotesRemove directoriesRemove ignored files, tooRemove only ignored filesRemove untracked files from the working treeRenameRename...Repository BrowserRepository URLRepository paths clearedRepository successfully createdRepository:ReservedResetReset current HEAD to specified state.ResolvedRestart CheckerRestoreRestore a missing itemRevertRevert an item to its unmodified stateRevert changes from this revisionRevert propertyRevert property (recursive)Revert this property to its original stateRevert this property to its original state (recursive)Reverts everything it seesRevisionRevision:Rollback To RevisionRollback to specified revision numberRolling Back...Running Add Command...Running Clean Command...Running Clone Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge Command...Running Merge TestRunning Relocate Command...Running Rename Command...Running Reset Command...Running Resolved Command...Running Revert Command...Running Stage Command...Running Unlock Command...Running Unstage Command...SSL Client CertificationSaveSave As...Save AuthenticationSave _AsSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySchedule items to be added to the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSet a unique background color of lines belonging to the same commit. Apply to line author's tooSetting up repository...SettingsShow Changes...Show LogShow RabbitVCS debugging toolsShow a file's log informationShow and edit property detailsShow changes against previous revisionShow changes between paths and revisionsShow changes between revisionsShow ignored filesShow logShow new version on the left sideShow next revisionShow this revisionShow unversioned filesShowing Revisions:SizeStageStatusStatus CheckerStep 1: Merge TypeStep 2: Merge a Range of RevisionsStep 2: Merge two different treesStep 2: Reintegrate a BranchStep 3: Final OptionsStop CheckerStop on copySwitch...TagTag ManagerTagger:TagsTest MergeTextText StatusThe debug menu is used to diagnose problems with RabbitVCS itselfThe from and to url fields are both required.The item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The requested file or folder does not exist.There was a problem saving your properties.There was an error communicating with the status checker service.There was an error creating the repository. Make sure the given folder is empty.Type:Unable to retrieve properties listUnable to set new value for property.UnknownUnlockUnresolvedUnstageUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate the selected path by reverse merging the changesUpdate the selected path to this revisionUpdate to revision...Update to this revisionUpdating...Use the following macros to configure the merge tool: %base - The common ancestor of the two files to be merged. %mine - The file you modified in your working copy. %theirs - The file being merged into your working copy. %merged - The file to store the merged result.Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.ValueValue:View diff against baseView diff against previous revisionView diff against working copyView diff as side-by-side comparisonView diff between files/foldersView diff between revisionsView diff between selected revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemView this revision's diff against previous revisionView this revision's diff against working copyWhat revision/branch do you want to checkout?Where do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must specify a version control system using the --vcs [svn|git] option_Back_Cancel_Close_Create folder here_Delete_Edit..._Forward_New_New..._No_OK_Open_Refresh_Save_Select_Yesdefaultjust nowlocalethe selected item(s)Project-Id-Version: rabbitvcs 0.18 Report-Msgid-Bugs-To: PO-Revision-Date: 2021-05-25 16:12+0900 Last-Translator: Kevin Kim Language-Team: Korean Language: ko MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Generator: Poedit 2.3 %d ëļ„ ė „%i ėŧ%i ė‹œę°„%i ëļ„%i ę°œė›”%i 봈%i ėŖŧ%i 년%s - ė™„ëŖŒ 됨(ë‚ ė§œ ė—†ėŒ)ėļŠëŒė´ 발ę˛Ŧ된 파ėŧ:ëŠ”ė„¸ė§€ ėļ”ę°€íƒœęˇ¸(Tag) ėļ”ę°€ė˜í–Ĩė„ 받는 파ėŧ (ę¸°ëŗ¸ęŗŧ 비ęĩí•˜ë ¤ëŠ´ 더블클ëĻ­)ė¸ėĻė¸ėĻė„œ ėƒė„¸ ė •ëŗ´í˜„ėžŦ ėž‘ė—…ëŗ¸ė˜ ė €ėžĨė†Œ ëŗ€ę˛Ŋëŗ€ę˛Ŋ된 파ėŧ (ę¸°ëŗ¸ęŗŧ 비ęĩí•˜ë ¤ëŠ´ 더블클ëĻ­)검ė‚Ŧ기 ėœ í˜• :ė €ėžĨė†Œ ëš„ėš°ę¸°(Clean)ęĩŦė„ą íŽ¸ė§‘ę¸°ėļŠëŒ 파ėŧė„ 해결하도록 í”„ëĄœęˇ¸ëž¨ė„ ęĩŦė„ąí•Šë‹ˆë‹¤.ę¸°ëŗ¸ ėģ¤ë°‹ ëŠ”ė„¸ė§€ė†ė„ą 넏ëļ€ ė •ëŗ´ ėˆ˜ė •ė´ëĻ„ 및 ė´ëŠ”ėŧ 넏ëļ€ ė •ëŗ´ ėž…ë Ĩėž ę¸€ 파ėŧ폴더 ė´ëĻ„URLė—ė„œFrom: (ëŗ‘í•Š 할 URL 및 ëĻŦëš„ė „)ėļ”ė ė—ė„œ 파ėŧ ė œė™¸ę°€ė ¸ė˜¤ę¸° ëŠ”ė„¸ė§€ė–¸ė–´ : 로그 ëŠ”ė‹œė§€ëĄœęš… ė˜ĩė…˜ėļŠëŒė„ ë‹¤ėŒėœŧ로 í‘œė‹œ 메ëǍëĻŦ ė‚ŦėšŠëŸ‰ : ëŠ”ė„¸ė§€ė°¸ęŗ  : ė†ė„ą ëŗ€ę˛Ŋ ė‚Ŧí•­ė€ ėĻ‰ė‹œ ė ėšŠëŠë‹ˆë‹¤. 각 항ëĒŠė˜ ėƒí™Šė— 맞는 메뉴ëĨŧ ė‚ŦėšŠí•˜ė—Ŧ ëŗ€ę˛Ŋ ė‚Ŧí•­ė„ ę˛€í† í•˜ęŗ  ėˇ¨ė†Œ 할 눘 ėžˆėŠĩ니다. ė˜ĩė…˜ę¸°íƒ€ ė •ëŗ´ę˛ŊëĄœė´ 파ėŧė„ ėž ęˇ¸ëŠ” ė´ėœ ëĨŧ 네ëĒ…í•˜ė„¸ėš”SSL ė¸ėĻ 파ėŧė„ 렜ęŗĩí•˜ė„¸ėš”.ė´ė „ ëŠ”ė„¸ė§€ í”„ëĄœė„¸ėŠ¤ ID : 파ėŧ 비ęĩė— ė‚ŦėšŠë˜ëŠ” í”„ëĄœęˇ¸ëž¨ė†ė„ą:ė›ę˛Š ė €ėžĨė†Œė›ę˛Šė§€ ėŖŧė†Œ(Remote URI):ė €ėžĨė†Œė €ėžĨė†Œ ėžŦ네렕ëĻŦëš„ė „(Revision) ë˛”ėœ„ëĻŦëš„ė „(Revision)ëĻŦëš„ė „ 표태그 넏ëļ€ ė •ëŗ´íƒœęˇ¸(Tags)To : (ëŗ‘í•Š 할 URL 및 ëĻŦëš„ė „)URL ę¸°ëĄëŗ‘í•Ší•  URLë˛„ė „ 관ëĻŦ ė‹œėŠ¤í…œėž‘ė—…ëŗ¸(Working Copy):ėž‘ė—…ëŗ¸(Working Copy)Hard - ėž‘ė—… 트ëĻŦ 및 ėƒ‰ė¸ė„ ė „í™˜ë˜ëŠ” 트ëĻŦė˜ ėƒ‰ė¸ęŗŧ ėŧėš˜ė‹œí‚ĩ니다Merge - ëĒ…ëĒ…ëœ ėģ¤ë°‹ėœŧ로 기록된 트ëĻŦ뙀 ėŧėš˜í•˜ë„ëĄ ė¸ëąėŠ¤ëĨŧ ėžŦė„¤ė •í•˜ęŗ , 다ëĨ¸ 파ėŧė„ 현ėžŦ ėž‘ė—…ė¤‘ė¸ 트ëĻŦ뗐 ė—…ë°ė´íŠ¸ 합니다Mixed - ėƒ‰ė¸ė„ ėžŦė„¤ė •í•˜ė§€ë§Œ ėž‘ė—… 트ëĻŦ는 ėžŦė„¤ė •í•˜ė§€ ė•ŠėŠĩë‹ˆë‹¤ė„ íƒí•œ ė†ė„ąė´ ėžŦ掀렁ėœŧ로 ė ėšŠëŠë‹ˆë‹¤.Soft - ėƒ‰ė¸ 파ėŧė´ë‚˜ ėž‘ė—… 트ëĻŦëĨŧ ė „í˜€ 건드ëĻŦė§€ ė•Šė§€ë§Œ ė œëŒ€ëĄœ ėž‘ë™í•´ė•ŧ í•Šë‹ˆë‹¤ė •ë§ %item% ė„(ëĨŧ) ė‚­ė œí•˜ė‹œę˛ ėŠĩ니까?RabbitVCS 똤ëĨ˜ë‹¨ęŗ„ëŗ„ ëŗ‘í•Š 마법ė‚Ŧ프로그램 ė •ëŗ´RabbitVCS ė •ëŗ´ė˜ęĩŦ렁ėœŧ로 í—ˆėšŠë‚´ ëŗ€ę˛Ŋ ė ėšŠí•œë˛ˆ í—ˆėšŠë‹¤ëĨ¸ ė‚ŦëžŒė˜ ëŗ€ę˛Ŋ ė ėšŠėļ”ę°€ė— ë¸”ëŸŧ ėļ”ę°€ėƒˆ ė†ė„ą ėļ”ę°€.ė— ë¸”ëŸŧ ėļ”氀뤄 ėļ”ę°€:ëŦ´ė‹œ ëĒŠëĄė— ėļ”氀렀ėžĨė†Œė— ėļ”ę°€ëœ 폴더RabbitVCS Nautilus 확ėžĨ 기ëŠĨė—ė„œ ė•Œ 눘 ė—†ëŠ” 똤ëĨ˜ę°€ ë°œėƒí–ˆėŠĩ니다. ė•„ëž˜ 똤ëĨ˜ë‚´ėšŠė„ RabbitVCS team 뗐 ė•Œë ¤ėŖŧė„¸ėš”:ėŖŧė„ ë‹Ŧ기ėŖŧė„ ë‹Ŧ기 - %s파ėŧ뗐 ėŖŧė„ ë‹Ŧę¸°ė´ ëĻŦëš„ė „ė— ėŖŧė„ ë‹Ŧę¸°ė´ 파ėŧė˜ ëĻŦëš„ė „ė— ėŖŧė„ ë‹Ŧ기다ëĨ¸ ė°Ŋė—ė„œ ė´ 파ėŧė˜ ëĻŦëš„ė „ ėŖŧė„ ë‹Ŧ기다ëĨ¸ ė°Ŋė—ė„œ ė´ ëĻŦëš„ė „ ėŖŧė„ ë‹Ŧ기ėŖŧė„ ë‹Ŧ기 ...í†ĩ합된 diff 파ėŧė„ ėž‘ė—…ëŗ¸(working copy)뗐 ė ėšŠí•Šë‹ˆë‹¤íŒ¨ėš˜ ė ėšŠ ...ėžŦ掀렁ėœŧ로 ė†ė„ą ė ėšŠė›ę˛Š ëŗ€ę˛Ŋ ė ėšŠëĄœėģŦ ëŗ€ę˛Ŋ 렄뗐 ė›ę˛Š ëŗ€ę˛Ŋ ė ėšŠ (rebase)ė •ë§ ė¸ėĻ ė •ëŗ´ëĨŧ ė§€ėš°ę˛ ėŠĩ니까?ė´ė „ ëŠ”ė„¸ė§€ëĨŧ ė§€ėš°ę˛ ėŠĩ니까?ė €ėžĨė†Œ ę˛Ŋ로ëĨŧ ė§€ėš°ė‹œę˛ ėŠĩ니까?ęŗ„ė† í•˜ė‹œę˛ ėŠĩ니까?ė •ë§ %s ė„(ëĨŧ) ė‚­ė œí•˜ė‹œę˛ ėŠĩ니까?ė¸ėĻ ė •ëŗ´ę°€ ė§€ė›ŒėĄŒėŠĩë‹ˆë‹¤ėž‘ė„ąėžėž‘ė„ąėž:ë¸Œëžœėš˜(Branch)ë¸Œëžœėš˜/태그 ...ë¸Œëžœėš˜:ë¸Œëžœėš˜(Branches)ė €ėžĨė†Œ 트ëĻŦ ė°žė•„ëŗ´ę¸°ė°žė•„ëŗ´ę¸°íŒŒėŧ 또는 폴더로 ė´ë™ę˛€ėƒ‰...ë˛„ęˇ¸ėˇ¨ė†Œí´ë”ė— ėŖŧė„ė„ ë‹Ŧ 눘 ė—†ėŠĩë‹ˆë‹¤ėž‘ė—…ëŗ¸(working copy)ė˜ ė €ėžĨė†Œ ėœ„ėš˜ ëŗ€ę˛Ŋė¸ėĻė„œ í™•ė¸ėˆ˜ė • ė‚Ŧ항 í™•ė¸ ...ė €ėžĨė†Œ ėˆ˜ė • ė‚Ŧ항 í™•ė¸ėž‘ė—…ëŗ¸(working copy) 랴íŦė•„ė›ƒ(Checkout)%s 랴íŦė•„ė›ƒ(Checkout) 뤑...랴íŦė•„ė›ƒ(Checkout)랴íŦė•„ė›ƒ(Checkout)...ëļ„기ëĨŧ ėŧëļ€ ëŗ€ę˛Ŋí•˜ęŗ  ëŗ€ę˛Ŋ ė‚Ŧí•­ė„ 다ëĨ¸ ëļ„揰뙀 ëŗ‘í•Ší•˜ë ¤ëŠ” ę˛Ŋėš°ė´ ë°Šë˛•ė„ ė„ íƒí•˜ė‹­ė‹œė˜¤.두 ę°œė˜ 다ëĨ¸ ëļ„기ëĨŧ ėž‘ė—…ëŗ¸(working copy)뗐 ëŗ‘í•Ší•˜ë ¤ëŠ´ė´ ë°Šë˛•ė„ ė„ íƒí•˜ė‹­ė‹œė˜¤.ëļ„기ëĨŧ 트렁íŦ뗐 ë‹¤ė‹œ í†ĩí•Ší•˜ë ¤ëŠ´ė´ ë°Šë˛•ė„ ė„ íƒí•˜ė‹­ė‹œė˜¤.ëš„ėš°ę¸°(Clean)ėž‘ė—…ëŗ¸(working copy) ëš„ėš°ę¸°(Cleanup)ëš„ėš°ëŠ” 뤑(Clean Up)...ëš„ėš°ę¸°(Cleanup)ė§€ėš°ę¸°ė¸ėĻ ė •ëŗ´ ė§€ėš°ę¸°ëŗĩ렜(Clone)ė´ ëŒ€í™”ėƒėž ë‹Ģ기.ėƒ‰ėƒėģ¤ë°‹ęŗŧ ėž‘ė„ąėž ėƒ‰ėƒ í‘œė‹œėģ¤ë°‹(Commit)ė €ėžĨė†Œė— 대한 ėˆ˜ė • ė‚Ŧ항 ėģ¤ë°‹ė´ė „ ëĻŦëš„ė „ęŗŧ 비ęĩí•˜ę¸°ėž‘ė—…ëŗ¸ęŗŧ 비ęĩí•˜ę¸°íŒŒėŧ/폴더 비ęĩëĻŦëš„ė „ 비ęĩí•˜ę¸°ė„ íƒí•œ ëĻŦëš„ė „ 비ęĩí•˜ę¸°ë‘ 항ëĒŠė˜ ė°¨ė´ė  비ęĩė´ė „ ëĻŦëš„ė „ęŗŧ ė´ ëĻŦëš„ė „ 비ęĩí•˜ę¸°ėž‘ė—…ëŗ¸ęŗŧ ė´ ëĻŦëš„ė „ 비ęĩí•˜ę¸°ë˛ ė´ėФ뙀 비ęĩë‚˜ëž€ížˆ 비ęĩ 도ęĩŦëĨŧ ė‚ŦėšŠí•˜ė—Ŧ ę¸°ëŗ¸ęŗŧ 비ęĩė´ė „ ë˛„ė „ęŗŧ 비ęĩëŗ‘ë Ŧ 비ęĩ 도ęĩŦëĨŧ ė‚ŦėšŠí•˜ė—Ŧ ė´ė „ ë˛„ė „ęŗŧ 비ęĩėž‘ė—…ëŗ¸ęŗŧ 비ęĩí•˜ę¸°ėļ”ę°€(Add) ė™„ëŖŒė˛´íŦė•„ė›ƒ(Checkout) ė™„ëŖŒëš„ėš°ę¸°(Clean) ė™„ëŖŒëš„ėš°ę¸°(Cleanup) ė™„ëŖŒëŗĩ렜(Clone) ė™„ëŖŒėģ¤ë°‹(Commit) ė™„ëŖŒë‚´ëŗ´ë‚´ę¸°(Export) ė™„ëŖŒę°€ė ¸ė˜¤ę¸°(Import) ė™„ëŖŒėž ę¸ˆ(Lock) ė™„ëŖŒí•´ę˛°ë¨(Resolved) ėœŧ로 í‘œė‹œ ė™„ëŖŒëŗ‘í•Š(Merge) ė™„ëŖŒëŗ‘í•Š(Merge) í…ŒėŠ¤íŠ¸ ė™„ëŖŒėžŦë°°ėš˜(Relocate) ė™„ëŖŒė´ëĻ„ 바꾸기 ė™„ëŖŒëĻŦė…‹(Reset) ė™„ëŖŒë˜ëŒëĻŦ기(Revert) ė™„ëŖŒë˜ëŒëĻŦ기(Rollback) ė™„ëŖŒėŠ¤í…Œė´ė§€(Stage) ė™„ëŖŒėž ę¸ˆí•´ė œ(Unlock) ė™„ëŖŒė–¸ėŠ¤í…Œė´ė§€(Unstage) ė™„ëŖŒė—…ë°ė´íŠ¸ ė™„ëŖŒė €ėžĨė†Œ 네렕 ė™„ëŖŒė„¤ė • 파ėŧ:í™•ė¸ëŗ¸ëŦ¸ ėƒíƒœ:ę˛ŊëĄœė—ė„œ ëŗĩė‚ŦëĻŦëš„ė „ė—ė„œ ëŗĩė‚Ŧ클ëĻŊëŗ´ë“œė— URL ëŗĩė‚Ŧ항ëĒŠė„ ė €ėžĨė†Œė˜ 다ëĨ¸ ėœ„ėš˜ëĄœ ëŗĩė‚Ŧ클ëĻŊëŗ´ë“œė— ëŗĩė‚Ŧė´ ëĻŦëš„ė „ë“¤ė˜ 렄랴 ë°ė´í„°ëĨŧ 클ëĻŊëŗ´ë“œė— ëŗĩė‚Ŧëŗĩė‚Ŧ...폴더 ėƒė„ą ..íŒ¨ėš˜ 만들기 ...ė—Ŧ揰뗐 ė €ėžĨė†Œ ë§Œë“¤ę¸°í´ë”ė— ė €ėžĨė†Œ 만들기폴더 ėƒė„ą...ëĒ¨ë“  ëŗ€ę˛Ŋ ė‚Ŧí•­ė´ í†ĩ합된 diff 파ėŧė„ ë§Œë“­ë‹ˆë‹¤ë‚ ė§œë‚ ė§œ/ė‹œę°„ í˜•ė‹ë‚ ė§œ:디버그디버그 되돌ëĻŦę¸°ė‚­ė œė‚­ė œ í™•ė¸ėžŦ掀렁ėœŧ로 ė†ė„ą ė‚­ė œė†ė„ą ė‚­ė œė†ė„ą ė‚­ė œ (ėžŦ귀)ė´ ė†ė„ą ė‚­ė œė´ ė†ė„ą ė‚­ė œ (ėžŦ귀)ęą°ëļ€Diff 메뉴 ...ëĒ¨ë“  파ėŧ 및 í•˜ėœ„ í´ë”ė—ė„œ ė„ íƒí•œ ė†ė„ąė„ ė‚­ė œ í•˜ė‹œę˛ ėŠĩ니까? ė´ 폴더 í•˜ėœ„ė˜ ëĒ¨ë“  파ėŧ 및 폴더?ė‹¤í–‰ í…ŒėŠ¤íŠ¸ėļŠëŒ ėˆ˜ė •ėž‘ė„ąėž ėˆ˜ė •ėž‘ė„ąėž ėˆ˜ė •...ėļŠëŒ ėˆ˜ė •ė„¸ëļ€ ė •ëŗ´ ėˆ˜ė •ëĄœęˇ¸ ëŠ”ė„¸ė§€ ėˆ˜ė •ëĄœęˇ¸ ëŠ”ė„¸ė§€ ėˆ˜ė •...ëĻŦëš„ė „ ė†ė„ą ėˆ˜ė •...ė´ëŠ”ėŧ:Git í™œė„ąí™”Subversion í™œė„ąí™”ė— ë¸”ëŸŧ í™œė„ąí™”íŒŒėŧ ė†ė„ą í™œė„ąí™”ėžŦ귀 ėƒíƒœ í™•ė¸ ė‚ŦėšŠë‚´ëŗ´ë‚´ę¸°(Export)ë‚´ëŗ´ë‚´ę¸° - %së˛„ė „ ė •ëŗ´ė—†ė´ ėž‘ė—…ëŗ¸(working copy) 또는 ė €ėžĨė†Œ ë‚´ëŗ´ë‚´ę¸°ë‚´ëŗ´ë‚´ę¸°...확ėžĨ뙏ëļ€ í”„ëĄœęˇ¸ëž¨ëĒ¨ë“  ė›ę˛Šė €ėžĨė†Œė—ė„œ 氀렏 ė˜¤ę¸°ę°€ė ¸ė˜¤ę¸°(Fetch/Pull)파ėŧė´ ë˛„ė „ ė œė–´ëĨŧ ë°›ė§€ ė•ŠėŠĩ니다.ė™„ëŖŒ ë¨ę°•ė œę°•ė œëĄœ invalidate_extension_info() 호ėļœ%(changed)d ę°œė˜ ëŗ€ę˛Ŋ된 항ëĒŠ 및 %(unversioned)d ę°œė˜ ë˛„ė „ ė—†ëŠ” 항ëĒŠė„ ė°žė•˜ėŠĩ니다%d ę°œė˜ 항ëĒŠė„ ė°žė•˜ėŠĩ니다.ėŧë°˜ėž ę¸ˆėž ę¸ˆ 氀렏 똤揰 ...ęˇ¸ëž˜í”„ë„ė›€ë§ė–¸ė–´ ëŦ¸ë˛•뗐 따ëŧ ė†ŒėŠ¤ ėŊ”드 í•˜ė´ëŧė´íŒ…ė†ŒėŠ¤ėŊ”드 í•˜ė´ëŧė´íŠ¸í˜¸ėŠ¤íŠ¸í˜¸ėŠ¤íŠ¸:ė œė™¸(Ignore)ė›ëŗ¸ ëŦ´ė‹œíŒŒėŧ ëŦ´ė‹œ:파ėŧ 확ėžĨėžëŗ„ëĄœ 항ëĒŠ ëŦ´ė‹œíŒŒėŧ ė´ëĻ„ėœŧ로 항ëĒŠ ëŦ´ė‹œę°€ė ¸ė˜¤ę¸°ę°€ė ¸ė˜¤ę¸° - %s항ëĒŠė„ ė €ėžĨė†ŒëĄœ 氀렏 ė˜¤ę¸°ė œė™¸(ignored)한 파ėŧ íŦí•¨í•˜ę¸°ė €ėžĨė†Œ ė´ˆę¸°í™”ëŦ´íš¨í™”ė¤„ëš„ęĩ ė˜ĩė…˜ ëĒŠëĄëļˆëŸŦ똤揰/ėƒˆëĄœęŗ ėš¨ëĄœë”Š ė¤‘ëĄœë”Š 뤑...로ėģŦ로 항ëĒŠ ėž ę¸ˆėž ę¸ˆ 파ėŧėž ęš€ëĄœęˇ¸ - %s로그 ëŠ”ė„¸ė§€ëĄœęˇ¸ 기록해결됨ėœŧ로 í‘œė‹œėļŠëŒ 항ëĒŠė„ 해결됨ėœŧ로 í‘œė‹œí•´ę˛°ë¨ėœŧ로 í‘œė‹œëŗ‘í•Š(Merge)ëŗ‘í•Š ë„ėš°ë¯¸ë‹¤ėˆ˜ė˜ ëĻŦëš„ė „(Revision) ëŗ‘í•ŠëĄœėģŦ ë¸Œëžœėš˜ëĄœ ëŗ‘í•Šë‘ ę°œė˜ 다ëĨ¸ 트ëĻŦ ëŗ‘í•Šëŗ‘í•Š(Merge)...ëŠ”ė„¸ė§€ëŠ”ė„¸ė§€:로그 ėĩœė†Œ ėˆ˜ė¤€ :ė´ë™...ė´ëĻ„ė´ëĻ„ęŗŧ ė´ëŠ”ėŧė´ëĻ„:냈 ėœ„ėš˜:냈 ė´ëĻ„:í™œė„ą ë¸Œëžœėš˜(Branch) ė—†ėŒė•ŒëĻŧ ëŠ”ė„¸ė§€ë˛ˆí˜¸ę¸°ė–ĩ할 URL 눘揰ė–ĩ할 ëŠ”ė‹œė§€ ėˆ˜ė™¸ëļ€ ėƒëžĩëŗ‘í•Š 만 ę¸°ëĄė—´ę¸°íŒŒė´ėŦ ėŊ˜ė†” ė—´ę¸°íŒŒėŧ 뗴揰ę˛Ŋ로ę˛Ŋ로:ė´ė „ ëŠ”ė„¸ė§€ė´ė „ ëŠ”ė„¸ė§€ ė§€ė›ŒėĄŒėŠĩë‹ˆë‹¤ė†ė„ąė†ė„ą - %sė†ė„ąė†ė„ą íŽ¸ė§‘ę¸°ė†ė„ą ėƒíƒœė†ė„ą ėƒíƒœ:ė†ė„ą:í‘¸ė‹œ(Push)RabbitVCS 똤ëĨ˜Git ė €ėžĨė†ŒHg ė €ėžĨė†ŒSVN ė €ėžĨė†ŒėžŦ掀렁ėœŧëĄœėƒˆëĄœęŗ ėš¨ė •ëŗ´ ėƒˆëĄœ ęŗ ėš¨ėƒíƒœ ėƒˆëĄœ ęŗ ėš¨ė†ė„ą ëĒŠëĄ ėƒˆëĄœ ęŗ ėš¨.ë¸Œëžœėš˜ ėžŦ í†ĩí•Šėž ę¸ˆ í•´ė œ ...항ëĒŠ ėž ę¸ˆ í•´ė œėžŦë°°ė§€(Relocate)ėž‘ė—…ëŗ¸(working copy) ėœ„ėš˜ ëŗ€ę˛Ŋėœ„ėš˜ ëŗ€ę˛Ŋ...ė›ę˛Š ė €ėžĨė†Œ 관ëĻŦėžė›ę˛Š(Remotes)폴더 ė œęą°ė œė™¸(ignored)한 파ėŧ도 ė œęą°ė œė™¸(ignored)한 파ėŧ만 ė œęą°ėž‘ė—… 트ëĻŦė—ė„œ ėļ”ė í•˜ė§€ ė•ŠëŠ” 파ėŧ ė‚­ė œė´ëĻ„ëŗ€ę˛Ŋė´ëĻ„ ëŗ€ę˛Ŋ ...ė €ėžĨė†Œ 브ëŧėš°ė €ė €ėžĨė†Œ URLė €ėžĨė†Œ ę˛Ŋ로가 ė§€ė›ŒėĄŒėŠĩë‹ˆë‹¤ė €ėžĨė†Œę°€ ė„ąęŗĩ렁ėœŧ로 ėƒė„ąë˜ė—ˆėŠĩ니다.ė €ėžĨė†Œ:똈ė•Ŋė´ˆę¸°í™”(Reset)현ėžŦ HEADëĨŧ ė§€ė •ëœ ėƒíƒœëĄœ ėžŦė„¤ė •í•Šë‹ˆë‹¤.해결검ė‚Ŧ기 ėžŦė‹œėž‘ëŗĩė›ëˆ„ëŊ 된 항ëĒŠ ëŗĩė›ë˜ëŒëĻŦ기항ëĒŠė„ ėˆ˜ė •ë˜ė§€ ė•Šė€ ėƒíƒœëĄœ 되돌ëĻŦę¸°ė´ ë˛„ė „ė˜ ëŗ€ę˛Ŋ ė‚Ŧ항 되돌ëĻŦę¸°ė†ė„ą 되돌ëĻŦę¸°ė†ė„ą 되돌ëĻŦ기 (ėžŦ귀)ė´ ė†ė„ąė„ ė›ëž˜ ėƒíƒœëĄœ 되돌ëĻŦę¸°ė´ ė†ė„ąė„ ė›ëž˜ ėƒíƒœëĄœ 되돌ëĻŦ기 (ėžŦ귀)ëŗ´ė´ëŠ” ëĒ¨ë“  ę˛ƒė„ 되돌ëĻŊ니다(Revert)ëĻŦëš„ė „(Revision)ëĻŦëš„ė „(Revision):ëĻŦëš„ė „(Revision) 되돌ëĻŦę¸°ė§€ė •í•œ ëĻŦëš„ė „ėœŧ로 되돌ëĻŦ기(Rollback)되돌ëĻŦ는 뤑...ėļ”ę°€(Add) ëĒ…ë š ė‹¤í–‰ 뤑...ëš„ėš°ę¸°(Clean) ëĒ…ë š ė‹¤í–‰ 뤑...ëŗĩ렜(Clone) ëĒ…ë š ė‹¤í–‰ 뤑...ėģ¤ë°‹(Commit) ëĒ…ë š ė‹¤í–‰ 뤑...ë‚´ëŗ´ë‚´ę¸°(Export) ëĒ…ë š ė‹¤í–‰ 뤑...ę°€ė ¸ė˜¤ę¸°(Import) ëĒ…ë š ė‹¤í–‰ 뤑...ėž ę¸ˆ(Lock) ëĒ…ë š ė‹¤í–‰ 뤑...ëŗ‘í•Š(Merge) ëĒ…ë š ė‹¤í–‰ ė¤‘ëŗ‘í•Š(Merge) ëĒ…ë š ė‹¤í–‰ 뤑...ëŗ‘í•Š(Merge) í…ŒėŠ¤íŠ¸ 뤑ėžŦë°°ėš˜(Relocate) ëĒ…ë š ė‹¤í–‰ 뤑...ė´ëĻ„ 바꾸기 ëĒ…ë š ė‹¤í–‰ 뤑 ...ëĻŦė…‹(Reset) ëĒ…ë š ė‹¤í–‰ 뤑...해결됨(Resolved) ëĒ…ë š ė‹¤í–‰ 뤑...되돌ëĻŦ기(Revert) ëĒ…ë š ė‹¤í–‰ 뤑...Stage ëĒ…ë š ė‹¤í–‰ 뤑...ėž ę¸ˆí•´ė œ(Unlock) ëĒ…ë š ė‹¤í–‰ 뤑...Unstage ëĒ…ë š ė‹¤í–‰ 뤑...SSL 클ëŧė´ė–¸íŠ¸ ė¸ėĻė €ėžĨ다ëĨ¸ ė´ëĻ„ėœŧ로 ė €ėžĨ...ė¸ėĻ ė •ëŗ´ ė €ėžĨ다ëĨ¸ ė´ëĻ„ėœŧ로 ė €ėžĨ(_A)ė €ėžĨ된 ë°ė´í„°ė €ėžĨė†Œė—ė„œ ė‚­ė œí•  항ëĒŠ 똈ė•Ŋė €ėžĨė†Œė—ė„œ ė´ëĻ„ė„ 바ęŋ€ 항ëĒŠ 똈ė•Ŋė €ėžĨė†Œė— ėļ”ę°€ 할 항ëĒŠ 똈ė•Ŋ렄랴 ė„ íƒ/í•´ė œíŒŒėŧ ė„ íƒí´ë” ė„ íƒí”„ëĄœęˇ¸ëž¨ ė„ íƒë™ėŧ한 ėģ¤ë°‹ė˜ ëŧė¸ ë°°ę˛Ŋėƒ‰ė„ ė„¤ė •í•Šë‹ˆë‹¤. 해당 ëŧė¸ ė €ėžė—ę˛Œë„ ė ėšŠė €ėžĨė†Œ 네렕 뤑...ė„¤ė •ëŗ€ę˛Ŋ ė‚Ŧ항 í‘œė‹œ ...로그 í‘œė‹œë””ë˛„ęš… 도ęĩŦ ëŗ´ę¸°íŒŒėŧė˜ 로그 ė •ëŗ´ í‘œė‹œė†ė„ą 넏ëļ€ ė •ëŗ´ í‘œė‹œ 및 íŽ¸ė§‘ė´ė „ ëĻŦëš„ė „ęŗŧ ė°¨ė´ė  ëŗ´ę¸°ę˛ŊëĄœė™€ ėˆ˜ė •ëŗ¸ ę°„ė˜ ëŗ€ę˛Ŋ ė‚Ŧ항 í‘œė‹œëĻŦëš„ė „ 간 ëŗ€ę˛Ŋ ëŗ´ę¸°ė œė™¸í•œ(ignored) 파ėŧ ëŗ´ę¸°ëĄœęˇ¸ í‘œė‹œė™ŧėĒŊ뗐 냈 ë˛„ė „ í‘œė‹œë‹¤ėŒ ëĻŦëš„ė „ ëŗ´ę¸°ė´ ëĻŦëš„ė „ ëŗ´ę¸°ë˛„ė „ ė •ëŗ´ ė—†ëŠ” 파ėŧ ëŗ´ę¸°ëĻŦëš„ė „ í‘œė‹œ:ėšŠëŸ‰ėŠ¤í…Œė´ė§€(Stage)ėƒíƒœėƒíƒœ 검ė‚Ŧ기1 ë‹¨ęŗ„ : ėœ í˜• ëŗ‘í•Š2 ë‹¨ęŗ„ : ë‹¤ėˆ˜ė˜ ëĻŦëš„ė „(Revision) ëŗ‘í•Š2 ë‹¨ęŗ„ : 두 ę°œė˜ 다ëĨ¸ 트ëĻŦ ëŗ‘í•Š2 ë‹¨ęŗ„ : ë¸Œëžœėš˜ ėžŦ í†ĩ합3 ë‹¨ęŗ„ : ėĩœėĸ… ė˜ĩė…˜ę˛€ė‚Ŧ기 뤑맀ëŗĩė‚Ŧ ė¤‘ë‹¨ė „í™˜(Switch)...태그(Tag)태그 관ëĻŦėžíƒœęˇ¸ ėž‘ė„ą:태그(Tags)ëŗ‘í•Š í…ŒėŠ¤íŠ¸ëŗ¸ëŦ¸ëŗ¸ëŦ¸ ėƒíƒœë””ë˛„ęˇ¸ 메뉴는 RabbitVCS ėžė˛´ė˜ ëŦ¸ė œëĨŧ ė§„ë‹¨í•˜ëŠ” 데 ė‚ŦėšŠëŠë‹ˆë‹¤from ęŗŧ url 필드는 í•„ėˆ˜ėž…ë‹ˆë‹¤.ė´ 항ëĒŠė€ íœ´ė§€í†ĩėœŧ로 ëŗ´ë‚´ė§‘ë‹ˆë‹¤.냈 ė´ëĻ„ 필드는 í•„ėˆ˜ėž…ë‹ˆë‹¤ė €ėžĨė†Œ URLęŗŧ ę˛Ŋ로는 í•„ėˆ˜ ėž…ë‹ˆë‹¤.ė €ėžĨė†Œ URL 필드는 í•„ėˆ˜ėž…ë‹ˆë‹¤.ėš”ė˛­í•œ 파ėŧ 또는 폴더가 ė—†ėŠĩ니다.ė†ė„ąė„ ė €ėžĨ하는 뤑뗐 ëŦ¸ė œę°€ ë°œėƒí–ˆėŠĩ니다.ėƒíƒœ 검ė‚Ŧ ė„œëš„ėŠ¤ė™€ í†ĩė‹ í•˜ëŠ” ë™ė•ˆ 똤ëĨ˜ę°€ ë°œėƒí–ˆėŠĩ니다.ė €ėžĨė†ŒëĨŧ 만드는 뤑뗐 똤ëĨ˜ę°€ ë°œėƒí–ˆėŠĩ니다. 폴더가 ëš„ė–´ ėžˆëŠ”ė§€ í™•ė¸í•˜ė‹­ė‹œė˜¤.ėœ í˜•:ė†ė„ą ëĒŠëĄė„ 氀렏ė˜Ŧ 눘 ė—†ėŠĩë‹ˆë‹¤ė†ė„ąė— 대한 냈 ę°’ė„ ė„¤ė •í•  눘 ė—†ėŠĩ니다.ė•Œ 눘 ė—†ëŠ”ėž ę¸ˆí•´ė œë¯¸í•´ę˛°ė–¸ėŠ¤í…Œė´ė§€(Unstage)ė—…ë°ė´íŠ¸(Update)ëĻŦëš„ė „(Revision) ė—…ë°ė´íŠ¸íŠšė • ë˛„ė „ėœŧ로 파ėŧ ė—…ë°ė´íŠ¸ėž‘ė—…ëŗ¸(working copy) ė—…ë°ė´íŠ¸(Update)ëŗ€ę˛Ŋ ė‚Ŧí•­ė„ ė—­ ëŗ‘í•Ší•˜ė—Ŧ ė„ íƒí•œ ę˛Ŋ로 ė—…ë°ė´íŠ¸ė„ íƒí•œ ę˛Ŋ로ëĨŧ ė´ ë˛„ė „ėœŧ로 ė—…ë°ė´íŠ¸ë˛„ė „ė´ë Ĩ ė—…ë°ė´íŠ¸ ...ė´ ëĻŦëš„ė „ ė—…ë°ė´íŠ¸ė—…ë°ė´íŠ¸ 뤑...ë‹¤ėŒ 매íŦ로ëĨŧ ė‚ŦėšŠí•˜ė—Ŧ ëŗ‘í•Š 도ęĩŦëĨŧ ęĩŦė„ąí•˜ė‹­ė‹œė˜¤. % base - ëŗ‘í•Š 할 두 파ėŧė˜ ęŗĩí†ĩ ėĄ°ėƒėž…ë‹ˆë‹¤. % mine - ėž‘ė—…ëŗ¸(working copy)ė—ė„œ ėˆ˜ė • 한 파ėŧėž…ë‹ˆë‹¤. % theirs - ėž‘ė—…ëŗ¸(working copy)뗐 ëŗ‘í•Šë˜ëŠ” 파ėŧėž…ë‹ˆë‹¤. % merged - ëŗ‘í•Š 된 결ęŗŧëĨŧ ė €ėžĨ할 파ėŧėž…ë‹ˆë‹¤.로그 대화 ėƒėžëĨŧ ė‚ŦėšŠí•˜ė—Ŧ ëŗ‘í•Ší•˜ë ¤ëŠ” ëĻŦëš„ė „ė„ ė„ íƒí•˜ęą°ë‚˜ 각 ëĻŦëš„ė „ė„ ė‰ŧ표로 ęĩŦëļ„하ė—Ŧ ėˆ˜ë™ėœŧ로 ėž‘ė„ąí•˜ė‹­ė‹œė˜¤. ë‹¤ėŒęŗŧ ę°™ė´ ëŒ€ė‹œëĄœ ę°œė • ë˛”ėœ„ëĨŧ ė§€ė •í•  눘 ėžˆėŠĩ니다. 똈 : 4-7,9,11,15-HEAD ëĒ¨ë“  ę°œė •ė„ ëŗ‘í•Ší•˜ë ¤ëŠ´ ėƒėžëĨŧ ëš„ė›Œ 둡니다.값값:ë˛ ė´ėŠ¤ė™€ ė°¨ė´ė  ëŗ´ę¸°ė´ė „ ë˛„ė „ęŗŧ ė°¨ė´ė  ëŗ´ę¸°ėž‘ė—…ëŗ¸ęŗŧ ė°¨ė´ė  ëŗ´ę¸°ë‚˜ëž€ížˆ 비ęĩí•˜ė—Ŧ ė°¨ė´ė  ëŗ´ę¸°íŒŒėŧ/폴더 간 ė°¨ė´ė  ëŗ´ę¸°ëĻŦëš„ė „ 간 ė°¨ė´ė  ëŗ´ę¸°ė„ íƒí•œ ëĻŦëš„ė „ 간 ė°¨ė´ė  ëŗ´ę¸°ë„ė›€ë§ ëŗ´ę¸°RabbitVCS 네렕 ëŗ´ę¸° 또는 ëŗ€ę˛Ŋ두 파ėŧė˜ ė°¨ė´ė  ëŗ´ę¸°íŒŒėŧ ėˆ˜ė • ė‚Ŧí•­ëŗ´ę¸°ë§ˆė§€ë§‰ ëŗ€ę˛Ŋ ė´í›„ 파ėŧ뗐 대한 ėˆ˜ė • ė‚Ŧí•­ëŗ´ę¸°í•­ëĒŠė˜ ė†ė„ąëŗ´ę¸°ė´ė „ ëĻŦëš„ė „ęŗŧ ė´ ëĻŦëš„ė „ ė°¨ė´ė  ëŗ´ę¸°ėž‘ė—…ëŗ¸ęŗŧ ė´ ëĻŦëš„ė „ė˜ ė°¨ė´ė  ëŗ´ę¸°ė–´ë–¤ ëĻŦëš„ė „/ë¸Œëžœėš˜ëĨŧ 랴íŦė•„ė›ƒ(checkout) í•˜ė‹œę˛ ėŠĩ니까?ė„ íƒí•œ ë‚´ėšŠė„ ė–´ë””ė— ëŗĩė‚Ŧí•˜ė‹œę˛ ėŠĩ니까?ė„ íƒí•œ ë‚´ėšŠė„ ė–´ë””ė— ė´ë™í•˜ė‹œę˛ ėŠĩ니까?ėž‘ė—…ëŗ¸(Working Copy)똈--vcs [svn|git] ė˜ĩė…˜ė„ ė‚ŦėšŠí•˜ė—Ŧ ë˛„ė „ 관ëĻŦ ė‹œėŠ¤í…œė„ ė§€ė •í•´ė•ŧ 합니다뒤로(_B)ėˇ¨ė†Œ(_C)ë‹Ģ기(_C)ė—Ŧ揰뗐 냈 폴더 ėƒė„ą(_C)ė‚­ė œ(_D)ėˆ˜ė •(_E)ė•žėœŧ로(_F)냈 ė†ė„ą(_N)냈 ė†ė„ą(_N)ė•„ë‹ˆė˜¤(_N)í™•ė¸(_O)뗴揰(_O)ėƒˆëĄœęŗ ėš¨(_R)ė €ėžĨ(_S)ė„ íƒ(_S)똈(_Y)ę¸°ëŗ¸ę°’ë°Šę¸ˆė‹ëŗ„ëœ ė–¸ė–´ė„ íƒëœ 항ëĒŠ(들)rabbitvcs-0.19/locale/nb/000077500000000000000000000000001445560650400152715ustar00rootroot00000000000000rabbitvcs-0.19/locale/nb/LC_MESSAGES/000077500000000000000000000000001445560650400170565ustar00rootroot00000000000000rabbitvcs-0.19/locale/nb/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000644421445560650400212040ustar00rootroot00000000000000Ū•~ ũüđņ  & 9 N _ p ~ ‚ ;• Ņ į 1!84!m!!œ!ą!Ä!Ų!(é!" ("5"I"`"€o"đ"-˙"6-#1d#–#$¯#Ô#ë#ü#$!$7$G$^$&q$˜$Ģ$Ä$ß$ô$7%H@%-‰%:ˇ%ō%&&(& 7&C&J& N&Y& m&{& Ž&’¯&B' K'Y' i'/u' Ĩ'ą'Í'Ü'÷'?(6N(5…("ģ(Ū("í()) ) +)9) R)\) w))†)ĸ)0Š)Ú)ė).*6*O* X* f*pr*Vã*:+P+_+2g+%š+Ā+Ķ+&Ú+,,),)>,h,4z,¯,AÎ,- *-8-M-`-r-ƒ-”-Ĩ-´-Ä-Ų-ė-ũ-. .1.B. S.`.o.‚.2˜. Ë.Ö. į.ô.//;/5L/‚/™/ž/ ¤/ą/¸/Ė/ę/ú/ 000 50gB0 Ē0ļ0Å0Ö0ę011141S1[1 b1Bn1 ą1 ģ1Å1"×1 ú12)2:2K2Q2Y2 b2n2s2x2~2Ž2Ŧ2Ä2 Ë2 ×2ø2 33 !3+32373 R3 _3j3 }3ˆ33“3 œ3¨3°3"ˇ3Ú3ā3đ3 4%4.4 64@4U4 e4p4t4 y4 ‡4‘4˜4›4ą4¸4Ķ4ō455 5 '535L5 f5p5ƒ5–5›5Ą5ŗ5 Í5Ø5č5ņ566 !6 +656E6 L6V6^6m666ĩ6ž6 Ų6å6 ė6ö6 7"7B7K7S7[7r7&y7 7°7*Ė76÷7.8I8 R8\8s8‘8­8Į8á8û89)9<9X9r99§9Á9Û9 ô9˙9 :2:0Q:,‚:¯: Å:Ķ:ã:ô:ũ: ;;5;(S;|;›;¤;ģ;Î;Ķ;Ú; ę;÷; ū; << < $<0<A8<-z<*¨<$Ķ<*ø<#=AB=%„=,Ē=+×=Q>U>Y> _>i>"n>%‘>ˇ>ŋ>Æ>Í>$ā>?? 1?ú=?8@?@E@L@#c@‡@$Ļ@Ë@ë@ A!A&3A%ZA;€AŧAÛA(íA(B ?BLB#PBtB‰BÄŒBQDaDrDˆDžD´D ÃDŅDāDäDCüD@EUE$oE@”EÕE ęE F$F5FIF.XF‡F œFĒFŋFÔFãFeGFyG7ĀG,øG%H0ISIsIŽIĸI3ĩIJéI-4J9bJœJ´J ˇJÄJØJéJōJûJ K!K4KNKrhK ÛKåKôK L0LCL"WLzL‘LĢLBČL: M1FM%xM žM%ŦM ŌM ŪM ęM õMNN$N?NNNSNrN.xN§N¸NĪNíNO O On(OZ—OōO P P7$P%\P‚P šP¨PČPßP"öP*QDQTZQ¯QaĪQ1RMRbRwR‰RŸR´RÆR×RéRüRS,S @SNSeSxSŠS  SŦSģSĪS3ëS T-T>TOTcTtT ŒT>™TØTōT÷TũTUU+UFUUUjUU‡US™UíU˙UV)VAV `VkVV ™VēV ÂVĖV@ÜV W *W7W(KWtW ƒW)WˇWÍWŌWÛW āWëWđWöWüW'X"6XYX `X nXX ¨X ŗXŊXÅXÍX!ĶX õX Y Y #Y.Y4Y 9Y CYOY WY&aYˆYŽYžYŧYØYáYéYōY Z Z-Z1Z 6Z DZOZUZYZlZsZ‹Z§Z!ˇZŲZ ßZ ëZøZ[,[5[F[][a[f[z[ ”[Ÿ[¯[¸[Į[Û[ ę[ ô[ū[ \\\(\8\ R\`\ z\„\ ž\ Ģ\ ļ\ Ä\Ī\â\ ü\] ] ] 8]2E]x]!Ž]9°]Eę]0^I^ R^\^{^š^´^Ķ^î^_!_8_ K_l_Š_Ŗ_Ã_Ũ_ú_ `` 0`0=`/n`4ž`Ķ` ã` ī`ũ` aa,a$5aZa(wa aĀaÉaäa öab bb$b*b 3b=b Cb Pb\bJbb*­b+Øb0c+5c!ac,ƒc°c'Ęc2ōcR%dxd}dƒdŒd‘d+°dÜdãd ėdúd*e;eTe me*{eĻfŽf´f%ģf/áf(g<:g#wg ›g ŧg'Ægîgh1,h^h}h(“h#ŧh āhėhīhiiÂļJtbßzõ<næ,¸FAų‰?hlĐEã>_UZ@A,NœžCĨRwIĒ×DxÛ`ŋ´y%T{2b4vé"ÅoÖvpņD4QŠ'.]Ę&*™_s‡%\ HGMՊoķ;{$‘ø?Rēxī $—|ŖyˆąÚš}Sރ^ĶāäįS/å (w9k7:ĩ†Ļ!Œ‹[>3c§ũaZ ĸ= W3ŧVÜ\ÁŽt#jÄsÉ7(Æk¤…~˛°E5cß);š ôōBģQ•Ū eT. ”0Ų}rfgVØWMzîK|úui÷ HXhq#0]Uū*Ôrüd+ lL5 ‚¯a:ˇP-q›mB)Ā'CJ€`PđĄĪFá<˒ĢiN O8ŗLŦâČ&–m^˜!YI6pd-=fėYXö~K+1Gj9/ëčg"Ũ˙ u@6ęOžĮĖ“û1Ņn¨8ÍeŊ[2έí„Ō%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished100Add MessageAffected File(s) (double-click to compare with base)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Commit to:Edit Property DetailsFiles to lockFolder NameFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. OptionsPlease add your authentication detailsPlease describe why you are locking these filesPlease provide your ssl certification filePrevious MessagesProgram used to compare filesProperties for:RabbitVCSRemote URI:RepositoryRevision RangeRevisionRevisions TableTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromVersion InformationWorking Copy:Working CopySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSRabbitVCS ErrorA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd a new property.Add an emblemAdd to ignore listAdded a folder to the repositoryAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sAnnotate a fileAnnotate...Applies a unified diff file to the working copyApply PatchApply Patch To Directory...Apply Patch...Apply property recursivelyApplying Patch File...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBranch/tag...Browse a repository treeBrowse toBrowse to a file or folderBrowse...BugsCannot annotate a directoryChangeChange the repository location of a working copyCheck CertificateCheck for Modifications...Check for modifications made to the repositoryCheck out a working copyCheckoutCheckout - %sCheckout...Choose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationClose this dialog.CommitCommit modifications to the repositoryCompare files/foldersCompare revisionsCompare side by sideCompare the differences between two itemsCompare with baseCompare with base using side-by-side comparison toolCompare with previous revisionCompare with previous revision using side-by-side comparison toolCompare with working copyCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationCopy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to...Create Folder...Create PatchCreate Patch...Create Repository hereCreate a repository in a folderCreate folder...Creates a unified diff file with all changes you madeCreating Patch File...DateDebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDelete propertyDelete this propertyDelete this property (recursive)DenyDiff Menu...Do you want to delete the selected properties from all files and subdirectories beneath this directory?Edit authorEdit author...Edit log messageEdit log message...Edit revision properties...Edit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternal ProgramsFile is not under version control.Fingerprint:FinishedForce an invalidate_extension_info() callFound %d item(s)From:GeneralGet LockGet Lock...HEADHelpHost:Ignore ancestryIgnore item by file extensionIgnore item by filenameImportImport - %sImport an item into a repositoryInclude ignored filesInvalidateIssuer:Language:Limit:LineList of comparison optionsLoad/RefreshLoading...Locally lock itemsLock FilesLockedLogLog - %sLog MessageLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MessageMime TypeMinimum level to logMore Actions...Move to...N/ANameNew Location:New Name:New...NoNotification MessagesNumberNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen ShellOpen a fileOpen from first revisionOpen from second revisionPassword:Patch File AppliedPatch File CreatedPathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty ChangeProperty EditorProperty StatusProperty:RabbitVCSRabbitVCS ErrorRealm:RecursiveRefreshRefresh StatusRefresh the list of properties.Release Lock...Release lock on an itemRelocateRelocate your working copyRelocate...RenameRename...Repository BrowserRepository paths clearedRepository successfully createdReservedResolveRestoreRestore a missing itemRevertRevert an item to its unmodified stateRevert propertyRevert property (recursive)Revert this property to its original stateRevert this property to its original state (recursive)Reverts everything it seesRevisionRevision:Running Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...SSL Client CertificationSave As...Save AuthenticationSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySchedule items to be added to the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow Changes...Show LogShow RabbitVCS debugging toolsShow a file's log informationShow changes between paths and revisionsShow changes between revisionsShow logShow unversioned filesShowing Revisions:SizeStatusSteal the locksStop on copySwitchSwitch...Test MergeTextText ChangeText StatusThanks:The debug menu is used to diagnose problems with RabbitVCS itselfThe from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There was a problem saving your properties.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:Unable to retrieve properties listUnable to set new value for property.UnknownUnlockUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...Updating...Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.Valid:ValueValue:View diff against baseView diff against previous revisionView diff against working copyView diff as side-by-side comparisonView diff between files/foldersView diff between revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemView unified diffWhere do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must supply a destination path.the selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-03-14 08:38+0000 Last-Translator: Arne Language-Team: Norwegian Bokmal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %i dag%i dager%i time%i timer%i minutt%i minutter%i mÃĨned%i mÃĨneder%i sekund%i sekunder%i uke%i uker%i ÃĨr%i ÃĨr%s - fullført100Legg til meldingBerørte fil(er) (dobbeltklikk for ÃĨ sammenlikne med basen)AutentiseringSertifikatdetaljerEndre arkiv for arbeidskopienEndrede filer (dobbeltklikk for ÃĨ sammenlikne med basen)Send inn til:Rediger egenskapsdetaljerFiler til lÃĨsingMappenavnFra revisjonFra URLFra: (URL og revisjon som skal flettes)ImportmeldingLenkerLoggmeldingerLoggeopsjonerMeldingMerknad: egenskapsendringer utføres umiddelbart. Du kan se over og angre endringer vha. snarveimenyen pÃĨ hvert element. AlternativerVennligst legg til dine autentiseringsdetaljer (identifikasjon)Vennligst beskriv hvorfor du lÃĨser disse fileneVennligst oppgi din ssl sertifikatfilForrige meldingProgram benyttet for ÃĨ sammenlikne filerEgenskaper for:RabbitVCSFjerntliggende URI:ArkivRevisjonsutvalgRevisjonRevisjonstabellTil revisjonTil: (URL og revisjon som skal flettes)URL historikkURL det skal flettes fraVersjonsinformasjonArbeidskopi:ArbeidskopiValgte egenskaper vil bli anvendt rekursivt.Er du sikker pÃĨ at du vil slette %item%?RabbitVCSRabbitVCS feilEn hjelper for flettingOmOm RabbitVCSAksepter for alltidAksepter en gangHandlingLegg tilLegg til emblemLegg til en egenskap.Legg til et emblemLegg til ignoreringslisteLa til en mappe i arkivetEn feil oppstod i RabbitVCS-utvidelsen. Vennligst kontakt RabbitVCS team med feildetaljene under:KommenterKommenter - %sKommenter en filKommenter...Anvend en samlet differansefil pÃĨ arbeidskopienAnvend lapp (patch)Anvend lapp (patch) pÃĨ katalog...Anvend lapp (patch)...Anvend egenskap rekursivtAnvender lappefil (patch)...Er du sikker pÃĨ at du vil nullstille autentiseringsinformasjonen?Er du sikker pÃĨ at du vil nullstille din forrige melding?Er du sikker pÃĨ at du vil nullstille arkivstien?Er du sikker pÃĨ at du vil fortsette?AutentiseringAutentiseringsinformasjonen nullstiltOpphavsmannForfattere:Gren/merkeGren/merke...Bla gjennom ett arkivtreBla tilBla til en fil eller mappeBla gjennom...FeilKan ikke kommentere en katalogEndreFlytt plasseringen av en arbeidskopi i arkivetSjekk sertifikatSjekk for endringer...Sjekk for endringer i arkivetSjekk ut en arbeidskopiSjekk utSjekk ut - %sSjekk ut...Velg denne metoden hvis du har gjort endringer i grenen og ønsker ÃĨ flette dine endringer med en annen gren.Velg denne metoden hvis du ønsker ÃĨ flette to forskjellige grener inn i din arbeidskopi.Rensk opp en arbeidskopiRensker opp...Rensk oppOpprensking forespurt... Start arbeidskopiopprensking?Fjern all autentiseringsinformasjonenLukk dette dialogvindu.RVCS Send innSend inn endringer til et arkivSammelikn filer/mapperSammenlikne revisjonerSammenlikne ved siden av hverandreSammenlikn differansen mellom to elementerSammenlikne med basenSammenlikne med basen ved bruk av verktøy for ÃĨ sammenlikne ved siden av hverandreSammenlikne med forrige versjonSammenlikne med tidligere revisjon ved bruk av verktøy for ÃĨ sammenlikne ved siden av hverandreSammenlikne med arbeidskopiFullført "legg til"Fullført gren/merkeUtsjekk fullførtOpprensking fullførtFullført innsendingFullført eksportImport fullførtFullført lÃĨsingFullført flettingFullført flettingstestFullført ommplasseringFullført omnavningFullfør løsFullført tilbakestillFullført flyttingFullfør lÃĨs oppFullført oppdateringBekreftelseKopier fra stiKopier fra revisjonKopier URL til utklippsbordKopier et element til en annen plassering i arkivetKopier til...Opprett mappe...Lag lapp (patch)Lag lapp (patch)...Lag et arkiv herLag et arkiv i en mappeLag mappe...Lager en forent differansefil med alle endringene du har gjortLager lappefil (patch)...DatoAvlusAvlus tilbakestillingSlettSlettebekreftelseSlett egenskaper rekursivtSlett egenskapSlett denne egenskapSlett denne egenskapenAvvisDifferansemeny...Ønsker du ÃĨ slette valgte egenskaper fra alle filer og mapper under denne mappen?Rediger forfatterRediger forfatter...Rediger loggemeldingRediger loggemelding...Rediger revisjonsegenskaper...Rediger...Muliggjør emblemerMuliggjør filattributterMuliggjør rekkursiv statussjekkEngelskEksporterEksportert - %sEksporter en arbeidskopi eller et arkiv uten versjonsinformasjonEksporter...FiletternavnEksterne programmerFila er ikke underlagt versjonskontroll.Fingeravtrykk:FullførtTving et invalidate_extension_info() kallFunnet %d element(er)Fra:GenereltLÃĨsTa lÃĨs...HODEHjelpVert:Ignorer stamfedreIgnorer element basert pÃĨ filetternavnIgnorer element basert pÃĨ filnavnImportImporter - %sImporter et element til et arkivInkluder ignorerte filerInnvaliderUtsteder:SprÃĨk:Grense:LinjeListe over sammenlikningsopsjonerLast/oppdaterLaster...LÃĨs elementer lokaltLÃĨs filerLÃĨstLoggLogg - %sLoggmeldingLoggingLogg inn:Marker et element i konflikt som løstFlettFletteassistentFlett et utvalg av revisjonerFlett to forskjellige trÃĻrFlett...MeldingMimetypeMinimumsnivÃĨ for loggingFlere handlinger...Flytt til...I/TNavnNy plasseringNytt navn:Ny...NeiVarslingsmeldingerNummerAntall URLer som huskesAntall meldinger som huskesUtelat eksterneKun marker fletting (ikke utfør)ÅpneÅpne skallÅpne en filÅpne fra første revisjonÅpne fra andre revisjonPassord:Lappefil anvendtLappefil (patch) lagetStiSti:Tidligere meldingerForrige melding nullstiltEgenskaperEgenskaper - %sEgenskapEndre egenskapEgenskpasredigeringEgenskapstatusEgenskap:RabbitVCSRabbitVCS feilOmrÃĨde:RekursivOppdaterOppfrisk statusOppdatert egenskapslistenFrigi lÃĨs...Frigi lÃĨs pÃĨ et elementOmplasserOmplasser din arbeidskopiOmplasser...Endre navnEndre navn...ArkivleserArkivsti nullstiltArkiv vellykket opprettetReservertLøsGjenopprettGjenopprett et manglende elementTilbakestillTilbakestill et element til dens uendrere tilstandTilbakestill egenskapTilbakestill egenskap (rekursivt)Tilbakestill denne egenskapen til dens originale tilstandTilbakestill denne egenskapen til dens originale tilstand (rekursivt)Tilbakestill alt den serRevisjonRevisjon:Kjører "legg til" kommando...Kjører gren/merke-kommando...Kjører utsjekkommando...Kjører innsendingskommando...Kjører eksportkommando...Kjører importkommando...Kjører lÃĨsekommando...Kjører flettekommandoKjører flettetestKjører omplasseringskommando...Kjører omnavningskommando...Kjører løs-kommando...Kjører tilbakestillkommando...Kjører flyttekommando...Kjører lÃĨs opp kommando...SSL klientsertifikatLagre som...Lagre autentiseringLagrede dataTidsplanlegg et element for sletting fra arkivetTidsplanlegg et element for omnavning i arkivetTidsplanlegg elementer som skal legges til i arkivetVelg/avvelg altVelg en filVelg en mappeVelg et programInnstillingerVis endringer...Vis loggVis RabbitVCS sine avlusingsverktøyVis en fils loggeinformasjonVis endringer mellom stier og revisjonerVis endringer mellom revisjonerVis loggVis ikke-versjonerte filerViser revisjoner:StørrelseStatusStjel lÃĨserStopp ved kopiFlyttFlytt...TestflettTekstTekstendringTekststatusTakk:Avlusingsmenyen benyttes for ÃĨ diangostisere problemer med RabbitVCS selvFra og til -URLfeltene er begge pÃĨkrevet."Fra revisjon" -feltet mÃĨ vÃĻre et heltallDen oppgitte stien peker ikke til en arbeidskopiElementene vil bli sendt til søppeldunken.Det nye navnefeltet er pÃĨkrevet.ArkivURL og mÃĨlsti er begge pÃĨkrevde felt.ArkivURLfelt er pÃĨkrevetArkivplasseringen er et pÃĨkrevet felt.Det oppstod et problem med lagring av egenskapene.En feil oppstod ved opprettelse av arkiv. Sørg for at den oppgitte mappen er tom.Til:Type:URL/Sti:URL:FÃĨr ikke tak i egenskapslisteKlarer ikke ÃĨ sette ny verdi for egenskap.UkjentLÃĨs oppRVCS OppdaterOppdater til revisjonOppdatert en fil til en spesifikk revisjonOppdatert en arbeidskopiOppdater til revisjon...Oppdaterer...Bruk loggknappen (til høyre for revisjonsutvalgsfeltet) til ÃĨ velge revisjonen du ønsker ÃĨ flette. Eller skriv revisjonene manuelt, hver separert med komma. Du kan spesifisere et revisjonsutvalg med en bindestrek. Eksempel: 4-7,9,11,15-HEAD La boksen vÃĻre tom for ÃĨ flette alle revisjoner.Gyldig:VerdiVerdi:Vis en differanse i forhold til basenVis differanse i forhold til tidligere revisjonVis differanse i forhold til arbeidskopiVis differanse som en "ved siden av hverandre" sammenlikningVis differansen mellom filer/mapperVis differanse mellom revisjonerVis hjelpVis eller endre RabbitVCS innstillingerVis differansen mellom to filerVis endringene gjort i en filVis endringene i en fil siden den ble sist lagretVis egenskapene til et elementVis samlet differanseHvor ønsker du ÃĨ kopiere utvalget til?Hvor ønsker du ÃĨ flytte utvalget?ArbeidskopiJaDu mÃĨ oppgi en mÃĨlsti.det/de valgte elementtilrabbitvcs-0.19/locale/nl/000077500000000000000000000000001445560650400153035ustar00rootroot00000000000000rabbitvcs-0.19/locale/nl/LC_MESSAGES/000077500000000000000000000000001445560650400170705ustar00rootroot00000000000000rabbitvcs-0.19/locale/nl/LC_MESSAGES/RabbitVCS.mo000066400000000000000000001000551445560650400212050ustar00rootroot00000000000000Ū•×ÔwŒh'i'z'‰'š'¯'Â'×'č' ų'(2 (>(P(c(;r(Ž(Ä(Ų(é(1)86)o)„)–)˛)#Ī)ķ)**0*(@*2i*œ* ˛*ŋ*Ķ*ę*+€++Ÿ+-¸+6æ+1,O,h,${, ,ˇ,Ī,ā,û,- -6-F-]- o-{-&Ž-ĩ-Č-á-ü-.7%.H].-Ļ.:Ô.///5/E/ T/ `/ l/z// …// ¤/ ˛/ŧ/ Ī/’đ/ƒ0 Œ0š0 Ē0/ļ0 æ0ō01181?O1615Æ1"ü1#2C2"R2u2|2„22”2 Ŗ2 Ž2ŧ2Ä2Í2 æ2đ2 333!3=30D3u3‡3.ĸ3Ņ3ę3ũ3 4 4p 4V‘4č4ū4 525%H5n5t5‡5&Ž5ĩ5Ë5Ũ5)ō564.6c6A‚6Ä6 Ū6ė677&767G7X7i7x7ˆ77Ŧ7ŋ7Đ7â7ķ788(8 98 F8S8p8€88ĸ82¸8 ë8ö8 99$9;9[95l9ĸ9š9ž9Ä9 Ę9×9Ū9ō9: :<: Q:r: w:g„: ė:ø: ;;%;9;U;];d;s;Š;Š;ą; ¸;BÄ; < << -<"8< [<h<)q<›<Ŧ<˛<ē< Ã<Ī<Ķ<Ų<Ū<ã<č<î<== %=2=P=h= o= {=œ=˛= Č=Ķ=Û= õ=˙=> > &> 3>>> Q>\>c>g> p>|>„>"‹>Ž>´>Ä>Ķ>î>?(?1?9? B?L?a? q?|?€?…?”? š? ¨?˛?š?ŧ?Ō?Ų?ô?@"@8@ =@ H@T@m@ ‡@‘@¤@ˇ@ŧ@Â@Ô@ î@ų@ AA"A2ABA SA]AbA gAqA A AA ¤AŽAļAĘAŲAųA B!B*B EBQBkB rB|BBžBˇB ×BãBėBôBC C#C&*CQCaC*}C6¨CßCúC D D%"DHDXDoDDŠDÂDÜDöDE(E>EQEiE…EŸEēEÔEîEF!F &F1F EF2PF0ƒF,´FáFčF ūF GG-GBGKG[GdGƒGĄG&ĀG(įGH/H!8HZHqH„H ‰H–HHŦH ŧH ÉHÖH ŨHįH ëH÷H˙H II I I,IA4I-vI*¤I$ĪI*ôIJA>J%€J,ĻJ,ĶJ+KA,KQnKĀKÄK ĘKÔK"ŲK%üK"L*L1L8LPL$cLˆL)žLČLŪL öLMMMMM#2MVM$uMšMēM ÖM!āM&N%)N;ON‹NĒN(ŧN(åN OOJO#jOŽO—OO˛OũĩOŗQËQ ÛQéQūQR)R:R JRUR;YR•R­RČREŨR#S8SLS\S2vSDŠSîSTT!4T%VT |TTŦTŋT,ÎT9ûT5UOUbUzUUŠU¨¸U aVoV4ˆV4ŊV4ōV'W@W*RW}W˜W´WÅWäWûW X"X1XEX VXbX-vX¤X&ŧXãXüXY>!YL`Y-­Y9ÛYZ5Z:ZNZeZxZŒZŸZ ĨZ¯ZÁZŪZ÷Z[!"[›D[ ā[ę[û[ \8\W\g\\”\ŗ\;Í\3 ]2=]$p]•] ą]ŋ]ß]æ]î]÷] ū] ^ ^$^,^ 5^ V^!d^ †^’^ ™^Ŗ^ ž^1Ę^ü^_>3_r_Œ_ Ą_Ŧ_ ž_|Ė_[I`Ĩ`ē`Í`@Ö`"a:aAa]a(daaĒaŋa,ØabJbfbN†bÕbđbcc(c:cJcZcjc{c‘cĻc ŊcËcŪcņcdd/dAdQddd yd…d ĨdŗdÅd#Ûd<˙d{§{­{ŗ{ŧ{,Á{:î{)| 2|?|G|a|#v|š|/ą|á|ų| }}#}+}2}$:}._})Ž}+¸}%ä} ~%~+4~-`~'Ž~Cļ~&ú~!&>(e Ž™Jœį€ €€(€\ ZÛVą­Z0ÍbNK()9§ŧ¯xSV~G{OS ‚'ũĢûĘõ;eTc¯ĪjŌįŒŊƒXá{ËŠ‡†¸<Š0%č–gœž8  ūFÆŖ ‹‡ €Ķo˜ĩžĸČ mĩJÍ^”3°JHa߲Ä´ņHO=Œl–ĖĄ?Q,#I‘3Ŧš}TĨ$?7ŋ†"Ųx›W.*Acř]“Öļŗƅ2v\Ž„69Ļōęļk+s sq/G•šīzŊÕäē¨AI€đ`4’nŠÁæpŖ_Ë^)ܨEÁí•~ķ˛ųéMn ԗa”-ƒ¤L˙Ÿ °>P÷=rdšÖü˜ĐĶt…ēâî—āŪp! mŗ]ĸŋøëĮ_QÉ@Ąy&$¤×6‹uC!å}fą|ÂU“i¸Y­7&ˆ uR;h4‰™ĪšĐ(2t[b`ŽBloN„ĀqÕŦģÂ1YĀ"#jg>ĮĘĢôˇkfŌŅK:Ã|C/ÔhÎ*‰wXÉŅ’e'‚ ÎD›ڊˆLģžœ8ŽėØöÄzŨĻŧiĒãÅPČ1WwvˇאFy5,[ÃE 5@Ÿ´B‘úĒd+:URŽD§ĨM<rž-.%Ė%d minute(s) ago%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished100A conflict was found in the following file:Add BranchAdd MessageAdd TagAffected File(s) (double-click to compare with base)AuthenticationBranch DetailBranchesCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Checker type:Commit to:Configuration EditorEdit Property DetailsEnter Name and Email DetailsFiles to lockFolder NameFrom RevisionFrom URLFrom: (URL and revision to merge)Ignore and exclude files from being trackedImport MessageLinksLog MessagesLogging OptionsMemory usage: MessageNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. OptionsOther InformationPlease add your authentication detailsPlease describe why you are locking these filesPlease provide your ssl certification filePrevious MessagesProcess ID:Program used to compare filesProperties for:Pull InformationRabbitVCSRemote RepositoriesRemote URI:RepositoryRevision RangeRevisionRevisions TableTag DetailTagsTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromVersion InformationWorking Copy:Working CopySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSRabbitVCS ErrorA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept MineAccept OnceAccept TheirsActionAddAdd EmblemAdd a new property.Add an emblemAdd line:Add to ignore listAdded a folder to the repositoryAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sAnnotate a fileAnnotate...Applies a unified diff file to the working copyApply PatchApply Patch To Directory...Apply Patch...Apply property recursivelyApplying Patch File...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?Are you sure you want to delete %s?AuthenticationAuthentication information clearedAuthorAuthor:Authors:BranchBranch ManagerBranch/tagBranch/tag...Branch:BranchesBrowse a repository treeBrowse toBrowse to a file or folderBrowse...BugsCancelCannot annotate a directoryChangeChange the repository location of a working copyCheck CertificateCheck for Modifications...Check for modifications made to the repositoryCheck out a working copyChecking out %s...CheckoutCheckout - %sCheckout...Choose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationCloneClose this dialog.CommitCommit modifications to the repositoryCompare files/foldersCompare revisionsCompare side by sideCompare the differences between two itemsCompare with baseCompare with base using side-by-side comparison toolCompare with previous revisionCompare with previous revision using side-by-side comparison toolCompare with working copyCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CloneCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted PushCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted RollbackCompleted SwitchCompleted UnlockCompleted UpdateConfig file:ConfirmationConflict Resolution DecisionContent status:Copy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to...Create Folder...Create PatchCreate Patch...Create Repository hereCreate a repository in a folderCreate folder...Creates a unified diff file with all changes you madeCreating Patch File...DateDate:DebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDelete propertyDelete property (recursive)Delete this propertyDelete this property (recursive)DenyDiff Menu...Do you want to delete the selected properties from all files and subdirectories beneath this directory?Edit authorEdit author...Edit detailsEdit log messageEdit log message...Edit revision properties...Edit...Email:Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternal ProgramsFetch/PullFile is not under version control.Fingerprint:FinishedForce an invalidate_extension_info() callFound %d item(s)From:GeneralGet LockGet Lock...GitGraphHEADHelpHostHost:How do you want to handle this?IgnoreIgnore ancestryIgnore file:Ignore item by file extensionIgnore item by filenameImportImport - %sImport an item into a repositoryInclude ignored filesInitialize RepositoryInvalidateIssuer:Keep old branch's historyLanguage:Limit:LineList of comparison optionsLoad/RefreshLoading...Locally lock itemsLock FilesLockedLogLog - %sLog MessageLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge ManuallyMerge a range of revisionsMerge changes into local branchMerge two different treesMerge...MessageMessage:Mime TypeMinimum level to logMore Actions...Move to...N/ANameName and EmailName:New Location:New Name:New...NoNotification MessagesNumberNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen ShellOpen a fileOpen from first revisionOpen from second revisionPassword:Patch File AppliedPatch File CreatedPathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty ChangeProperty EditorProperty StatusProperty status:Property:PullPushRabbitVCSRabbitVCS ErrorRabbitVCS GitRabbitVCS SVNRealm:RecursiveRefreshRefresh InformationRefresh StatusRefresh the list of properties.Release Lock...Release lock on an itemRelocateRelocate your working copyRelocate...Remote Repository ManagerRenameRename...Repository BrowserRepository URLRepository paths clearedRepository successfully createdRepository:ReservedResolveRestart CheckerRestoreRestore a missing itemRevertRevert an item to its unmodified stateRevert propertyRevert property (recursive)Revert this property to its original stateRevert this property to its original state (recursive)Reverts everything it seesRevisionRevision:Rollback To RevisionRollback to specified revision numberRolling Back...Running Add Command...Running Branch/tag Command...Running Checkout Command...Running Clone Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Push Command...Running Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...SSL Client CertificationSaveSave As...Save AuthenticationSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySchedule items to be added to the repositorySelectSelect / Deselect allSelect a FileSelect a FolderSelect a programSet as active branchSettingsShow Changes...Show LogShow RabbitVCS debugging toolsShow a file's log informationShow and edit property detailsShow changes against previous revisionShow changes between paths and revisionsShow changes between revisionsShow logShow new version on the left sideShow unversioned filesShowing Revisions:SizeStart Point:StatusStatus CheckerSteal the locksStop CheckerStop on copySwitchSwitch...TagTag ManagerTagger:TagsTest MergeTextText ChangeText StatusThanks:The debug menu is used to diagnose problems with RabbitVCS itselfThe from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.The requested file or folder does not exist.There was a problem saving your properties.There was an error communicating with the status checker service.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:Unable to retrieve properties listUnable to set new value for property.UnknownUnlockUpdateUpdate Local RepositoryUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate the selected path to this revisionUpdate to revision...Update to this revisionUpdating...VCS:Valid:ValueValue:View diff against baseView diff against previous revisionView diff against working copyView diff as side-by-side comparisonView diff between files/foldersView diff between revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemView unified diffWhere do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must specify a version control system using the --vcs [svn|git] optionYou must supply a destination path.just nowlabelthe selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-12-09 15:20+0000 Last-Translator: Reinout van Schouwen Language-Team: Dutch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) X-Poedit-Language: Dutch %d minu(u)t(en) geleden%i dag%i dagen%i uur%i uur%i minuut%i minuten%i maand%i maanden%i seconde%i seconden%i week%i weken%i jaar%i jaar%s - klaar100Er is een conflict gevonden in het volgende bestand:Branch toevoegenBoodschap ToevoegenTag toevoegenBetrokken bestand(en) (dubbelklik om te vergelijken met basis)AuthenticatieBranchdetailBranchesCertificaatdetailsHet repository van uw werkversie veranderenGewijzigde bestanden (dubbelklik om met basis te vergelijken)Checkertype:Committen naar:Configuratie-editorEigenschapdetails bewerkenVoer naam- en e-maildetails inTe vergrendelen bestandenMapnaamVan RevisieVan URLVan: (Samen te voegen URL en revisie)Bestanden negeren en uitsluiten van gevolgd wordenBericht importerenKoppelingenLogboekberichtenLogboek-optiesGeheugengebruik: BerichtMerk op: veranderingen aan eigenschappen worden direct doorgevoerd. U kunt veranderingen herzien en ongedaan maken met behulp van het contextmenu voor elk item. OptiesAndere informatieGelieve uw authenticatiedetails toe te voegenBeschrijf waarom u deze bestanden vergrendeltGeef alstublieft uw ssl certification-bestandEerdere berichtenProces-ID:Programma voor bestandsvergelijkingEigenschappen voor:Informatie over pullRabbitVCSRepository's op afstandURI op afstand:RepositoryRevisiebereikRevisieRevisietabelTagdetailTagsNaar RevisieNaar: (samen te voegen URL en revisie)URL-geschiedenisURL waarvandaan samen te voegenVersie InformatieWerkversie:WerkversieGeselecteerde eigenschappen worden recursief toegepast.Weet u zeker dat u %item% wilt verwijderen?RabbitVCSRabbitVCS-foutEen wizard met samenvoegstappenOverInfo over RabbitVCSVoor altijd accepterenVan mij accepterenEenmalig accpeterenVan hen accepterenActieToevoegenEmbleem toevoegenNieuwe eigenschap toevoegen.Een embleem toevoegenâ€ĻRegel toevoegen:Voeg toe aan negeer lijstMap toegevoegd aan het repositoryEr is een fout opgetreden in de RabbitVCS Nautilus-extensie. Neem contact op met het RabbitVCS-team met de hieronder vermelde foutdetails:AnnoterenAnnoteren — %sEen bestand annoterenAnnoterenâ€ĻPast een geÃŧnificeerd diff-bestand toe op de werkversiePatch toepassenPatch op map toepassen...Patch toepassenâ€ĻEigenschap recursief toepassenPatchbestand toepassen...Weet u zeker dat u uw authenticatie-informatie wilt wissen?Weet u zeker dat u uw vorige berichten wilt wissen?Weet u zeker dat u uw repositorypaden wilt wissen?Weet je zeker dat je wil verdergaan?Wilt u %s echt verwijderen?AuthenticatieAuthenticatie-informatie gewistAuteurAuteur:Auteurs:BranchBranchbeheerBranch/tagBranch/tagâ€ĻBranch:BranchesEen repository-boom doorbladerenBladeren naarNaar een bestand of map navigerenBladerenâ€ĻFoutenAnnulerenKan een map niet annoterenVeranderingDe repository-locatie van een werkversie wijzigenCertificaat controlerenControleren op aanpassingenâ€ĻControleren op wijzigingen die aan het repository zijn gemaaktEen werkversie uitcheckenUitchecken van %sâ€ĻUitcheckenUitchecken — %sUitcheckenâ€ĻGebruik deze methode als u wijzigingen hebt gemaakt aan een branch en uw wijzigingen wilt samenvoegen met een andere branch.Gebruik deze methode als u twee verschillende branches wilt samenvoegen naar uw werkversie.Werkversie opschonenWordt opgeruimd...OpruimenOpschonen aangevraagdâ€Ļ Beginnen met opschonen van werkversie?Uw authenticatie-informatie wissenKlonenDit dialoogvenster sluiten.CommitAanpassingen committen in het repositoryBestanden/mappen vergelijkenRevisies vergelijkenNaast elkaar vergelijkenDe verschillen tussen twee items vergelijkenVergelijken met basisMet basisversie vergelijken met behulp van naast-elkaar-vergelijkprogrammaVergelijken met eerdere revisieVergelijken met eerdere revisie met behulp van naast-elkaar-vergelijkprogrammaVergelijken met werkversieToevoegen klaarBranch/tag is klaarUitchecken voltooidOpruimen voltooidKlonen voltooidCommit voltooidExport is klaarImporteren klaarVergrendelen is klaarSamenvoegen voltooidSamenvoegtest voltooidPush voltooidVerhuizen voltooidHernoemen voltooidOplossen voltooidTerugdraaien voltooidTerugdraaien voltooidWisselen voltooidUnlock voltooidUpdate is voltooidConfiguratiebestand:BevestigingBeslissing op conflictoplossingInhoudstatus:KopiÃĢren van padKopiÃĢren van revisieLocatie naar het klembord kopiÃĢrenEen item kopiÃĢren naar een andere locatie in het repositoryKopiÃĢren naar...Map aanmakenâ€ĻPatch aanmakenPatch aanmakenâ€ĻHier een repository aanmakenRepository in een map aanmakenMap maken...Maakt een geÃŧnificeerd diff-bestand met al de wijzigingen die u gemaakt heeftBezig met maken van patch-bestandâ€ĻDatumDatum:DebuggenDebug-terugdraaienVerwijderenVerwijderen bevestigenEigenschappen recursief verwijderenEigenschap verwijderenEigenschap verwijderen (recursief)Deze eigenschap verwijderenDeze eigenschap verwijderen (recursief)WeigerenDiff-menuâ€ĻWilt u de geselecteerde eigenschappen van alle bestanden en submappen onder deze map verwijderen?Auteur bewerkenAuteur bewerkenâ€ĻDetails bewerkenLogboekmelding bewerkenLogboekmelding bewerkenâ€ĻRevisie-eigenschappen bewerkenâ€ĻBewerken...E-mail:Emblemen inschakelenâ€ĻBestandskenmerken inschakelenRecursieve statuscontroles inschakelenEngelsExporterenExporteren — %sEen werkversie of repository exporteren zonder versiebeheer-informatieExporterenâ€ĻExtensieExterne programma'sFetch/PullBestand is niet onder versiebeheerVingerafdruk:KlaarAanroep van invalidate_extension_info() afdwingen%d item(s) gevondenVan:AlgemeenVergrendelenBlokkering verkrijgenâ€ĻGitGrafiekHEADHulpHostHostcomputer:Hoe wilt u dit afhandelen?NegerenVoorgeschiedenis negerenBestand negeren:Item negeren per extensieItem negeren per bestandsnaamImporterenImporteren — %sItem importeren in een repositoryGenegeerde bestanden meenemenRepository initialiserenOngeldig makenUitgever:Geschiedenis van oude branch behoudenTaal:Limiet:RegelLijst van vergelijkingsoptiesLaden/verversenLaden...Items lokaal blokkerenBestanden vergrendelenVergrendeldLogboekLogboek — %sLogboekmeldingLogboekAanmeldnaam:Een item in conflict markeren als opgelostSamenvoegenSamenvoeg-assistentHandmatig samenvoegenEen reeks revisies samenvoegenWijzigingen samenvoegen in lokale branchTwee verschillende bomen samenvoegenSamenvoegenâ€ĻBoodschapMessage:Mime typeMinimumniveau voor loggenMeer acties...Verplaatsen naar...N.v.t.NaamNaam en e-mailName:Nieuwe locatie:Nieuwe naam:Nieuwâ€ĻNeeMeldingenNummerHet aantal te onthouden URLsHet aantal te onthouden berichtenExternen overslaanAlleen het samvoegen opnemenOpenShell openenBestand openenOpenen vanaf eerste revisieOpenen vanaf tweede revisieWachtwoord:Patchbestand toegepastPatch-bestand aangemaaktPadPad:Vorige boodschappenVorige berichten gewistEigenschappenEigenschappen — %sEigenschapEigenschap-wijzigingEigenschappen-editorEigenschapsstatusEigenschapsstatus:Eigenschap:PullPushRabbitVCSRabbitVCS-foutRabbitVCS GitRabbitVCS SVNOmgeving:RecursiefVerversenInformatie verversenVerversingsstatusDe eigenschappenlijst verversenBlokkering vrijgevenâ€ĻBlokkering op een item vrijgevenVerhuizenUw werkversie verhuizenVerhuizenâ€ĻAfstandrepository-beheerHernoemenHernoemenâ€ĻBladeren door repositoryRepository-URLRepository paden gewistRepository succesvol aangemaaktRepository:GereserveerdOplossenChecker herstartenTerugzettenEen ontbrekend item herstellenTerugdraaienEen item terugzetten naar zijn ongemodificeerde staatEigenschap terugdraaienEigenschap terugdraaien (recursief)Deze eigenschap terugdraaien naar haar oorspronkelijke staatDeze eigenschap terugdraaien naar haar oorspronkelijke staat (recursief)Alles in zicht terugdraaienRevisieRevisie:Terugdraaien naar revisieTerugdraaien naar opgegeven revisienummerTerugdraaienâ€ĻWordt toegevoegd...Branch/tag wordt uitgevoerd...Uitvoeren checkout-opdrachtâ€ĻUitvoeren van kloon-opdrachtâ€ĻCommit-opdracht uitvoerenâ€ĻWordt geÃĢxporteerd...Wordt geïmporteerd...Wordt vergrendeld...Bezig met uitvoeren van merge-opdrachtSamenvoegtest draaienUitvoeren Push-opdrachtâ€ĻUitvoeren relocate-opdrachtâ€ĻUitvoeren rename-opdrachtâ€ĻBezig met uitvoeren resolve-opdrachtâ€ĻBezig met uitvoeren revert-opdrachtâ€ĻBezig met uitvoeren switch-opdrachtâ€ĻBezig met uitvoeren unlock-opdrachtâ€ĻSSL-gebruikerscertificaatOpslaanOpslaan alsâ€ĻAuthenticatie opslaanOpgeslagen dataEen item klaarzetten om verwijderd te worden uit het repositoryEen item klaarzetten om hernoemd te worden in het repositoryItems klaarzetten om toegevoegd te worden aan het repositorySelecterenAlles (de)selecterenSelecteer een bestandSelecteer een mapSelecteer een programmaAls actieve branch instellenInstellingenWijzigingen weergevenâ€ĻLogboek tonenRabbitVCS-debughulpprogramma's tonenDe logboekinformatie over een bestand tonenEigenschapdetails tonen en bewerkenWijzigingen tonen ten opzichte van vorige revisieWijzigingen tussen paden en revisies tonenWijzigingen tussen revisies tonenToon logNieuwe versie tonen aan de linkerkantBestanden buiten versiebeheer tonenGetoonde revisies:GrootteStartpunt:StatusStatuscheckerDe blokkeringen stelenStopcheckerOp kopie stoppenWisselenWisselenâ€ĻTagTagbeheerTagger:TagsTest-samenvoegenTekstTekstwijzigingTekst-statusMet dank aan:Het debugmenu is bedoeld om problemen met RabbitVCS zelf te diagnosticerenDe 'vanaf' en 'tot' url velden zijn beide verplicht.De 'vanaf' revisie moet een integer zijn.Het gegeven pad is geen werk kopieDe item(s) worden in de prullenbak gegooid.Het veld 'nieuwe naam' is verplicht.De repository URL en doel pad velden zijn beide verplicht.Het repository URL veld is verplicht.De repository-locatie is een vereist veld.Het bestand of de map die werd gevraagd bestaat niet.Er trad een probleem op bij het opslaan van uw eigenschappen.Er is een fout opgetreden bij het communiceren met de statuscontroledienst.Er is een fout opgetreden bij het aanmaken van het repository. Zorg ervoor dat de opgegeven map leeg is.Naar:Type:URL/Pad:URL:Niet in staat eigenschappenlijst op te halenNiet in staat nieuwe waarde voor eigenschap in te stellen.OnbekendOntgrendelenUpdatenLokale repository updatenUpdaten naar revisieUpdaten naar een specifieke revisieEen werkversie updatenHet geselecteerde pad updaten naar deze revisieUpdaten naar revisieâ€ĻUpdaten naar deze revisieUpdaten...VCS:Geldig:WaardeWaarde:Diff ten opzichte van basis bekijkenDiff ten opzichte van eerdere revisie bekijkenDiff ten opzichte van werkversie bekijkenDiff als naast-elkaar-vergelijking bekijkenDiff tussen bestanden/mappen bekijkenDiff tussen revisies tonenHulp weergevenRabbitVCS-instellingen bekijken of wijzigenDe verschillen tussen twee bestanden bekijkenDe wijzigingen aan een bestand bekijkenDe aanpassingen aan een bestand sinds de laatste wijziging bekijkenDe eigenschappen van een item bekijkenGeÃŧnificeerde diff bekijkenWaarheen wilt u de selectie kopiÃĢren?Waarheen wilt u de selectie verplaatsen?WerkversieJaU dient een versiecontrolesysteem op te geven met de optie --vcs [svn|git]Een doel pad is verplicht.nu netlabelde geselecteerde item(s)naarrabbitvcs-0.19/locale/oc/000077500000000000000000000000001445560650400152735ustar00rootroot00000000000000rabbitvcs-0.19/locale/oc/LC_MESSAGES/000077500000000000000000000000001445560650400170605ustar00rootroot00000000000000rabbitvcs-0.19/locale/oc/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000121361445560650400211770ustar00rootroot00000000000000Ū•m„•ė@ A P a v ‰ ž ¯ Ā Ä Ú é ø    & * 3 B Q X a k p w  † “ Š ´ Å Õ Ú ā į ė ô ü   ) 2 8 @ E K R ^ h o t  † Š – ž Ĩ Ģ ´ ŧ Æ Ö á å ę ô û ū   , 6 ; A L \ e o y € Š ’ ™ Ŗ Ŧ ´ ģ Ä Î Ų į đ õ ü      " ) 0 < B I M čP 9JYn~•ŦÁÅÜėû  &-5<Td j t‚ ‡‘™ Ą#ŽŌâ÷  & .;C L Xbv}ƒ‹‘šŖ´ŊÆĖ áëō % .: CM^rv z ˆ’–°¸ŋ ŌÜâ ë÷    *4 =GVh q {… Žš­ ÆŌØ Ūëōû   "/IOX\K[2XH Ne!6E4WI"\Cgmk/'BQ9D?:)U*>,O=-Ld@$8#AMPGl&]Tf`R<7cV ;iFY jZS5+aJ_%3 10b(h^.%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years100AuthenticationMessageOptionsRabbitVCSRevisionAboutActionAddAnnotateApply Patch...AuthenticationAuthorAuthors:Browse...BugsChangeCleanupCommitConfirmationCopy URL to clipboardCopy to...Create Folder...Create Patch...DateDebugDeleteDenyEdit...EnglishExportExport...ExtensionExternal ProgramsFinishedFrom:GeneralHelpHost:ImportImport - %sLanguage:Limit:LineLoading...LockedLogLog MessageLoggingLogin:MergeMerge...MessageMime TypeMore Actions...Move to...N/ANameNew Name:New...NoNotification MessagesNumberOpenOpen a filePassword:PathPath:PropertiesProperties - %sPropertyProperty:RabbitVCSRealm:RecursiveRefreshRenameRename...ReservedRestoreRevertRevisionRevision:Save As...Select a FileSettingsSizeStatusSwitch...TextTo:Type:URL:UnknownUnlockUpdateUpdating...ValueValue:YestoProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-05-06 06:27+0000 Last-Translator: CÊdric VALMARY (Tot en Ã˛c) Language-Team: Occitan (post 1500) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n > 1; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %i jorn%i jorns%i ora%i oras%i minuta%i minutas%i mes%i meses%i segonda%i segondas%i setmana%i setmanas%i annada%i annadas100AutentificacionMessatgeOpcionsRabbitVCSRevisionA prepausAccionApondreAnotarAplicar lo correctiu...AutentificacionAutorAutors :PercÃŗrrer...BugsModificarNetejarValidarConfirmacionCopiar l'URL dins lo quichapapièrsCopiar cap a...Crear un dorsièr...Crear un correctiu...DataDesbugatgeSuprimirRefusarModificar...AnglÊsExportarExportar...ExtensionProgramas extèrnesAcabatDe :GeneralAjudaÒste :ImportarImportacion - %sLenga :Limit :LinhaCargament en cors...VarrolhatJornalMessatge del jornalArchivatgeNom d'utilizaire :FusionarFusionar...MessatgeTipe MIMED'accions mai...Desplaçar cap a...N/ANomNom novèl :Novèl...NonMessatges de notificacionNumèroDobrirDobrir un fichièrSenhal :CaminCamin :ProprietatsProprietats - %sProprietatProprietat :RabbitVCSDomeni :RecursiuRefrescarTornar nomenarTornar nomenar...ReservatRestablirRestablirRevisionRevision :Enregistrar jos...Seleccionatz un fichièrParamètresTalhaEstatBascuolar...TèxteCap a :Tipe :URL :DesconegutDesvarrolharMetre a jornEn cors de mesa a jorn...ValorValor :Òcarabbitvcs-0.19/locale/pl/000077500000000000000000000000001445560650400153055ustar00rootroot00000000000000rabbitvcs-0.19/locale/pl/LC_MESSAGES/000077500000000000000000000000001445560650400170725ustar00rootroot00000000000000rabbitvcs-0.19/locale/pl/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000520731445560650400212150ustar00rootroot00000000000000Ū•:ė ŖŧHIXi~‘ώ ČÖÚ;í)?1Z8ŒÅ×ô 1(Aj €Ą¸€ĮH-W6…1ŧî$,CTgyŸļ&Éđ37GH-Č:ö1 7 G V b i m x Œ š ­ ’Î a! j! x!„! !ģ!?Ō!6"5I"""ĸ""ą"Ô"Û" ä"ī" ###3#:#L# U#pc#VÔ#+$:$2B$%u$›$Ž$&ĩ$Ü$î$%"% <%J%_%r%„%•%Ļ%ˇ%Æ%Ö%é%ú% &&.&?& P&]&l&& •& & ą&ž&Ī&æ&ë&ņ&ø& '*':' O'p'gu' Ũ'é'ø' ((9(A(P(g(†(Ž( •( Ą( Ģ(ĩ("Į( ę(÷())))()-)2)8) ?)K)a) i)s)z) ) Œ) —)ĸ)Š)­) ļ)Â)Ę)Ņ)×)į)** $*.*C* S*^*b* g* u**†*‰*Ÿ*Ļ*Á*ā*ī*+ + +!+:+ T+^+q+„+‰++Ą+ ģ+Æ+Ö+ß+ī+ ˙+ ,,#, *,4,<,K,k,t, {,…,˜,ą,Ņ,Ų,á,č,ø,*-?- H-R-i-‡-Ŗ-Ŋ-×-ņ- ..;.U.p.Š.¤. ž.É. Ũ.č. ū. //-/6/F/e/„//¤/ˇ/ŧ/Ã/Ķ/ Ú/ ä/ī/ ô/ 0 0A0-V0*„0$¯0*Ô0˙0A1%`1,†1+ŗ1Qß11252 ;2E2"J2%m2“2›2ĸ2Š2ŧ2Ō2 č2ô2û23#3,3K3k3&‡3%Ž3(Ô3(ũ3 &434#74[4p4üs4p6ˆ6§6%Ã6é6!7*7A7R7V7Bo7˛7Ã70â7B8V8l8‰8Ļ8ŧ8 Í8)Ú89 9*9$C9h9—{9 :0 :)Q:*{:Ļ:0Ä:õ:;!;4;H; ];k;;)’;ŧ;Ų;ô; <;<E[<-Ą<;Ī< = =#=3=N=T= Z=g= ƒ=‘=§=œÆ=c> s>€>>#¯>Ķ>8į>6 ?;W?!“?ĩ?+Æ?ō?ø?@@5@D@L@k@r@†@ Ž@j›@`AgAwAA€AÂAâA ëA öAB(B>B^BzBŽBĢBÂBÛBôB C!C8CNCgCxCCŠCÂC ŲC įCõC DD 0D>DQD`DpD‰DŽD–DœD ĩDÖDëD&E+Ek3E ŸE­EžEĐEåE F FF(5F ^F hFrF F ŽF›F&°F×F æFōFGGG,G5G;GAG JGXG qG{GƒGŠGG ĨGŗG ÂGÎGŌGÛGęGH HH"H6H NHZH+cHH H ¯HģHÁH ĶHßHįHëH II$/ITIgI~I†I ˜IĨIÁIÛIãIūI J %J0J,GJtJƒJ—JĻJŧJŌJ âJėJ ũJ K KK /K PK ZKhKyK0”K!ÅK įK ņK üKL'!L0ILzLL‰L LžLØLôL M!M8MNMcM|MšMŗMĪMéMųM NN 9NFNVN fNqN'‚N ĒN ËN×NôNOOO &O 1O ?OMO SOaOqOLOÎO-įO0P"FPiPA‡P#ÉP-íP4Q_PQ°Q´QŧQËQ,ĐQ'ũQ%R.R 7RCRXRtRR žR ¨R ˛R-ŊR)ëR,S"BS(eSŽS$¤S%ÉS īSũS#T%T8T_„‡l1‘āä6Pž,ÎNŊ´BŧOú éHĖ@Į/WĀå°“("–ö^ŨÛUxō*…D0Ö`i9FŖÚ¨ŪS{ÉaČR€)tŽņķ5¯C Л%[ |ĸģ3 û]×\Ęâ)æ<ũø7’ÂTÔG  įpąŲ0Ō6!,¤# ūĢĻė˙(Á îÄŅÅ35jo˛ĩZ7á8..4Ąwܧ2+K>:ĨVęšL” č$ē -ļ/‰8hôJž1ãË 'M?eëƒ~¸˜•!dŒÍEkų‚‹í-&ŋQ#:&gī+=÷}Y™—9Õ4'ÆˇšzqÃsXmđ­;*ŠŽ b%rŠIĶvŦAu$ØfõĒü†œŸ ŗˆß"Ī2ycn%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished100Add MessageAffected File(s) (double-click to compare with base)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Commit to:Edit Property DetailsFiles to lockFolder NameFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. OptionsPlease add your authentication detailsPlease describe why you are locking these filesPlease provide your ssl certification filePrevious MessagesProgram used to compare filesProperties for:RabbitVCSRemote URI:RepositoryRevision RangeRevisionRevisions TableTo RevisionTo: (URL and revision to merge)URL HistoryVersion InformationWorking Copy:Working CopySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSRabbitVCS ErrorAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd a new property.Add an emblemAdd to ignore listAdded a folder to the repositoryAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sApply PatchApply Patch To Directory...Apply property recursivelyApplying Patch File...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBrowse a repository treeBrowse...BugsCannot annotate a directoryChangeCheck CertificateCheckoutCheckout - %sChoose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Cleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationClose this dialog.CommitCommit modifications to the repositoryCompare revisionsCompare side by sideCompare with previous revisionCompare with working copyCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationCopy From PathCopy From RevisionCopy URL to clipboardCopy to...Create Folder...Create PatchCreate folder...Creating Patch File...DateDebugDeleteDelete ConfirmationDelete properties recursivelyDelete propertyDelete this propertyDelete this property (recursive)DenyDo you want to delete the selected properties from all files and subdirectories beneath this directory?Edit authorEdit author...Edit log messageEdit log message...Edit revision properties...Edit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport...ExtensionExternal ProgramsFile is not under version control.Fingerprint:FinishedFound %d item(s)From:GeneralGet LockHEADHelpHost:ImportImport - %sInclude ignored filesIssuer:Language:Limit:LineLoad/RefreshLoading...Lock FilesLockedLogLog - %sLog MessageLoggingLogin:MergeMerge AssistantMerge a range of revisionsMerge two different treesMessageMime TypeMinimum level to logMore Actions...Move to...N/ANameNew Location:New Name:New...NoNotification MessagesNumberNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen ShellOpen a fileOpen from first revisionOpen from second revisionPassword:Patch File AppliedPatch File CreatedPathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty ChangeProperty EditorProperty:RabbitVCSRabbitVCS ErrorRealm:RecursiveRefreshRefresh StatusRefresh the list of properties.RelocateRenameRename...Repository BrowserRepository paths clearedRepository successfully createdResolveRestoreRevertRevert propertyRevert property (recursive)Revert this property to its original stateRevisionRevision:Running Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...Save As...Save AuthenticationSaved DataSelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow Changes...Show RabbitVCS debugging toolsShow changes between revisionsShow logShow unversioned filesShowing Revisions:SizeStatusSteal the locksSwitchSwitch...Test MergeTextText ChangeText StatusThanks:The debug menu is used to diagnose problems with RabbitVCS itselfThe from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There was a problem saving your properties.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:Unable to retrieve properties listUnable to set new value for property.UnknownUnlockUpdateUpdate To RevisionUpdate a working copyUpdate to revision...Updating...Valid:ValueValue:View diff against previous revisionView diff against working copyView diff between files/foldersView diff between revisionsView the differences between two filesView the modifications made to a fileWhere do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must supply a destination path.the selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-11-18 22:00+0000 Last-Translator: Mateusz Boś Language-Team: Polish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %i dzień%i dni%i dni%i godzina%i godzin%i godzin%i minuta%i minut%i minut%i miesiąc%i miesięcy%i miesięcy%i sekundy%i sekund%i sekund%i tydzień%i tygodni%i tygodni%i rok%i lata%i lata%s - Zakończono100Dodaj wiadomośćDotknięte pliki (kliknij dwukrotnie by porÃŗwnać z bazą)UwierzytelnianieSzczegÃŗÅ‚y certyfikatuZmiana repozytorium twojej kopii roboczejZmienione pliki (kliknij dwukrotnie, by porÃŗwnać z bazą)ZatwierdÅē do:Zmień właściwośćPliki do zablokowaniaNazwa kataloguOd wersjiZ URLOd: (URL i rewizja do złączenia)Wpisz WiadomośćLinkiZapis WiadomościOpcje zapisywania wiadomościWiadomośćUwaga: zmiany właściwości są stosowane natychmiast. MoÅŧesz przejrzeć i cofnąć zmiany uÅŧywając menu kontekstowego dla kaÅŧdego obiektu OpcjeProszę dodaj swoje dane uwierzytelnianiaOpisz, dlaczego blokujesz te plikiProszę podać plik certyfikatu SSLPoprzednie wiadomościProgram uÅŧywany do porÃŗwnywania plikÃŗwWłaściwości dla:RabbitVCSZdalny URI:RepozytoriumZakres wersjiWersjaTablica wersjiDo wersjiDo: (URL i rewizja do złączenia)Historia AdresÃŗw URLInformacje o wersjiKopia robocza:Kopia roboczaWybrane właściwości będą stosowana rekursywnie.Czy na pewno chcesz usunąć %item%?RabbitVCSBłąd RabbitVCSO programieO RabbitVCSZawsze akceptujZaakceptuj tylko tym razemAkcjaDodajDodaj SymbolDodaj nową właściwość.Dodaj SymboleDodaj do ignorowanychDodano katalog do repozytoriumWystąpił błąd w rozszerzeniu RabbitVCS. Proszę skontaktować się z autorami RabbitVCS podając szczegÃŗÅ‚y błędu widoczne poniÅŧej:Dodaj komentarzAdnotuj - %sZastosuj łatęZastosuj łatę do katalogu...Zastosuj właściwość rekursywnieStosowanie łaty...Czy na pewno chcesz wyczyścić swoje dane autentykacji?Czy na pewno chcesz wyczyścić poprzednie wiadomościCzy na pewno chcesz wyczyścić ścieÅŧki do repozytoriÃŗw?Czy na pewno chcesz kontynuować?UwierzytelnianieDane uwierzytelniania zostały wyczyszczoneAutorAutorzy:UtwÃŗrz gałąÅē/etykietęPrzeglądaj repozytoriumPrzeglądaj...BłędyNie moÅŧna adnotować kataloguZmieńSprawdÅē certyfikatPobierzPobierz - %sWybierz tą metodę, jeÅŧeli dokonałeś zmian w gałęzi i chciałbyś połączyć je z inną gałęzią.Wybierz tą metodę, jeÅŧeli chcesz połączyć dwie rÃŗÅŧne gałęzie do twojej kopii roboczej.Oczyszczanie...OczyśćZaÅŧądano oczyszczania Rozpocząć oczyszczanie kopii roboczej?Wyczyść dane uwierzytelnianiaZamknij.ZatwierdÅēZatwierdÅē zmiany w repozytoriumPorÃŗwnaj wersjePorÃŗwnaj obok siebiePorÃŗwnaj z poprzednią wersjąPorÃŗwnaj z kopią robocząZakończono "dodaj"Utworzono gałąÅē/etykietęZakończono pobieranieZakończono oczyszczanieZakończono "zatwierdÅē"Zakończono "eksport"Zakończono "importuj"Zakończono "zablokuj"Zakończono 'Złącz'Przenoszenie zakończoneZmieniono nazwęZakończono "rozwiąÅŧ"Zakończono "przywrÃŗÄ‡"Zakończono "przełącz"Zakończono "odblokuj"Uaktualniono.PotwierdzenieKopiuj ze ścieÅŧkiKopiuj z wersjiSkopiuj URL do schowkaSkopiuj do...UtwÃŗrz katalog...UtwÃŗrz łatęUtwÃŗrz katalogTworzenie pliku łaty...DataDebugujUsuńPotwierdzenie usunięciaUsuń właściwości rekursywnieUsuń właściwośćUsuń tą właściwośćUsuń tą właściwość (rekursywnie)OdrzućCzy chcesz usunąć wskazane właściwości ze wszystkich plikÃŗw i podkatalogÃŗw zawartych w tym katalogu?Edytuj autoraEdytuj autora...Edytuj opis zmianEdytuj opis zmian...Edytuj właściwości wersjiZmień...Włącz symboleWłącz atrybuty plikÃŗwWłącz rekursywne sprawdzanie statusÃŗwangielskiEksportujEksportuj - %sEksportuj...RozszerzenieZewnętrzne programyPlik nie jest objęty kontrolą wersjiOdcisk klucza:ZakończonoZnaleziono %d obiekt(y/Ãŗw)Z:GÅ‚ÃŗwneZaÅ‚ÃŗÅŧ blokadęGŁÓWNAPomocHost:ImportujImportuj - %sWłącz pliki ignorowaneWystawca:Język:Limit:LiniaZaładuj / OdświeÅŧŁadowanie...Zablokuj plikiZablokowanyLogLog - %sWpis dziennikaZapisywanie WiadomościLogin:ScalAsystent łączeniaScal zakres rewizjiScal dwa rÃŗÅŧne drzewaWiadomośćTyp MIMEMinimalny poziom do zapisywania wiadomościWięcej akcji...Przenieś do..Nie dotyczyNazwaNowe połoÅŧenie:Nowa nazwa:Nowa...NiePowiadomienie o wiadomościachNumerIlość URL-i do zapamiętaniaIlość wiadomości do zapamiętaniaPomiń zewnętrzneTylko zanotuj scalenieOtwÃŗrzOtwÃŗrz PowłokęOtwÃŗrz plikOtwÃŗrz z pierwszej rewizjiOtwÃŗrz z drugiej rewizjiHasło:Łata została zastosowanaPlik łaty został utworzonyŚcieÅŧkaŚcieÅŧka:Poprzednie wiadomościPoprzednie wiadomości zostały wyczyszczoneWłaściwościWłaściwości - %sWłaściwośćZmiana właściwościEdytor właściwościWłaściwość:RabbitVCSBłąd RabbitVCSDziedzina:RekursywnieOdświeÅŧOdświeÅŧ StatusOdświeÅŧ listę właściwości.PrzenieśZmień nazwęZmień nazwę...Przeglądarka repozytoriumŚcieÅŧki do repozytoriÃŗw zostały wyczyszczonePomyślnie utworzono repozytoriumRozwiąÅŧPrzywrÃŗÄ‡PrzywrÃŗÄ‡PrzywrÃŗÄ‡ właściwośćPrzywrÃŗÄ‡ właściwość (rekursywnie)PrzywrÃŗÄ‡ właściwość do oryginalnej postaciWersjaWersja:Wykonywanie "dodaj"...Tworzę gałąÅē/etykietę...Wykonywanie 'Pobierz' ...Wykonywanie "zatwierdÅē"...Wykonywanie "eksport"Wykonywanie "importuj"Wykonywanie "zablokuj"Wykonywanie 'Złącz'Trwa przenoszenie...Trwa zmienianie nazwy...Wykonywanie komendy rozwiąÅŧWykonywanie "przywrÃŗÄ‡"Wykonywanie "przełącz"...Wykonywanie "odblokuj"...Zapisz jako....Zapisz dane logowaniaZapisane daneZaznacz / Odznacz wszystkieWybierz plikWybierz katalogWybierz programUstawieniaPokaÅŧ zmiany...Zobacz narzędzia debugowania RabbitVCSPokaÅŧ zmiany pomiędzy wersjamiPokaÅŧ logiPokaÅŧ pliki niewersjonowanePokazuję wersje:RozmiarStatusPrzejmij blokadyPrzełączPrzełącz...Test ScalaniaTekstZmiana TekstuStatus TekstowyPodziękowania:Menu debugowania jest uÅŧywane do diagnozowania problemÃŗw z samym RabbitVCSPola z i do są wymaganePole od rewizji musi być liczbą całkowitąPodana ścieÅŧka nie wskazuje na kopię robocząObiekty zostaną wysłane do koszaPole nowa nazwa jest wymaganeZarÃŗwno URL repozytorium, jak i ścieÅŧka docelowa są wymagane.Pole URL repozytorium jest wymaganePołoÅŧenie repozytorium jest polem wymaganymWystąpił błąd przy prÃŗbie zapisu właściwościWystąpił błąd w czasie tworzenia repozytorium. Upewnij się, Åŧe podany katalog jest pusty.Do:Rodzaj:URL/ŚcieÅŧka:URL:Nie udało się pobrać listy właściwościNie udało się zmienić właściwościNieznaneOdblokujZaktualizujUaktualnij do wersjiZaktualizuj kopię robocząZaktualizuj do wersji...Uaktualnianie...Poprawny:WartośćWartość:PokaÅŧ rÃŗÅŧnice względem poprzedniej wersjiPokaÅŧ rÃŗÅŧnice względem kopii roboczejZobacz rÃŗÅŧnice pomiędzy plikami/folderamiPokaÅŧ rÃŗÅŧnice pomiedzy wersjamiZobacz rÃŗÅŧnice pomiędzy dwoma plikamiZobacz zmiany w plikuGdzie chcesz skopiować zaznaczenie?Gdzie chcesz przenieść zaznaczenie?Kopia roboczaTakMusisz podać ścieÅŧkę docelową.zaznaczone obiektydorabbitvcs-0.19/locale/pt_BR/000077500000000000000000000000001445560650400157005ustar00rootroot00000000000000rabbitvcs-0.19/locale/pt_BR/LC_MESSAGES/000077500000000000000000000000001445560650400174655ustar00rootroot00000000000000rabbitvcs-0.19/locale/pt_BR/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000713301445560650400216050ustar00rootroot00000000000000Ū•˜Ü #œ(")":"I"Z"o"‚"—"¨" š"Į"Ë"Ū";í")#?#O#1j#8œ#Õ#į#$$,$A$(Q$z$ $$ą$Č$€×$X%-g%6•%1Ė%ū%$&<&S&d&w&‰&Ÿ&¯&Æ& Ø&ä&&÷&'1'J'e'z'7Ž'HÆ'-(:=(x(˜(ž(Ž( Ŋ(É(Đ( Ô(ß( ķ() )’5)Č) Ņ)ß) ī)/û) +*7*S*b*}*?”*6Ô*5 +"A+#d+ˆ+"—+ē+Á+Ę+Ņ+ ā+ ë+ų+, ,%, @,J,O,k,0r,Ŗ,ĩ,.Đ,˙,- !- /-p;-VŦ-..(.20.%c.‰..ĸ.&Š.Đ.æ.ø.) /7/4I/~/A/ß/ ų/00/0A0R0c0t0ƒ0“0¨0ģ0Ė0Ū0ī011 "1/1>1Q12g1 š1Ĩ1 ļ1Ã1Ķ1ę1 252Q2h2m2s2 y2†22Ą2ŋ2Ī2ë2 3!3 &3g33 ›3§3 ļ3Ã3Ô3č34 4424Q4Y4 `4Bl4 ¯4 š4Ã4"Õ4 ø45)585I5O5W5 `5l5q5v5|5 Œ5™5ˇ5Ī5 Ö5 â566 /6:6 B6L6S6X6 s6 €6‹6 ž6Š6°6´6 Ŋ6É6Ņ6"Ø6û677,7F7O7W7 `7j77 7š7ž7Ŗ7 Š7 ˇ7Á7Č7Ë7á7č78"818G8 L8 W8c8|8 –8 8ŗ8Æ8Ë8Ņ8ã8 ũ899!919A9 Q9 [9e9 u9 ƒ9‘9 ˜9ĸ9Ē9š9Ų9é9: : %:1:9: @:J:]:v:–:Ÿ:§:¯:Æ:&Í:ô:;* ;6K;‚;; Ļ;°;Į;å;<<5<O<g<}<<Ŧ<Æ<á<û<=/=H= M=X= l=2w=0Ē=,Û=> >,><>M>V>f>o>Ž>Ŧ>(Ë>ô>??3?F?K?R? b?o? v?€? „?? •? ? Ĩ? ą?Ŋ?AÅ?-@*5@$`@*…@°@AĪ@%A,7A+dAQAâAæA ėAöA"ûA%BDBLBSBZB$mB’B¨B žBúĘBÅCĖCŌCŲC#đCD$3DXDxD ”D!žD&ĀD%įD; EIEhE(zE(ŖE ĖEŲE#ŨEF FFđ"FH(H7HHH]HnH…HšHŠHšHŊH×HDöH;IQIgI7†IAžIJ%J:JXJmJ €J*ŽJšJ ŌJßJ÷JKŽKÍK:ŨKGL;`LœL0ĩLæLMM$M8MVMfMMĄMˇM,ĖMųM#N9NYNnNDˆNGÍN-O=CO%O§O­OŋOÎOŪO åOīOP P5P$UPzP Q Q"Q6QREQ˜Q$¨QÍQ"ŨQRA R4bR=—R!ÕR÷RS&&SMSSS \SjS ˆS “SĄS$°S ÕSâS TT(T ‰–Š čy´<gRœ˙ĢßppjUUļĸ¸l˜ €6Ōr;›d"X˜õįCG\ uŋvSˇĩũ5ŠĖjÆyT~)le5YÕäí’R’^/w1X\ôžķt30—˛Ų|€hdID)ū ĄîKEcr-S3 $B!9đåmÄģ‹ ?Ę[{§*Vą4ÁŒėfŨ†ĻžM,]#Đ.ĶNwAÃiæņĀãŽâ1'CÚNŦŊ$s sxcb÷7`É MŽ8‚ÂhĪ”Abt“ČĨ°ų E7¨ @==Zī‚e%k@×TqL,HĮ•úš`ęöPa}…•#_%;ÔDŗ*ŖY/Ë2ÎÖ4‡]‘Fa”F+WQ{_Í(ہā":Gx¤HOK2Œ“ŠomO0v}96W ­uŧØkz(Q™.Ņˆ>ûgƒën8^ēˆ[oB&Üŗø|qfV-Lō%d minute(s) ago%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished100Add MessageAdd TagAffected File(s) (double-click to compare with base)AuthenticationBranchesCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Commit to:Edit Property DetailsFiles to lockFolder NameFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. OptionsPlease add your authentication detailsPlease describe why you are locking these filesPlease provide your ssl certification filePrevious MessagesProgram used to compare filesProperties for:RabbitVCSRemote URI:RepositoryRevision RangeRevisionRevisions TableTag DetailTagsTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromVersion InformationWorking Copy:Working CopySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSRabbitVCS ErrorA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd a new property.Add an emblemAdd to ignore listAdded a folder to the repositoryAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sAnnotate a fileAnnotate...Applies a unified diff file to the working copyApply PatchApply Patch To Directory...Apply Patch...Apply property recursivelyApplying Patch File...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?Are you sure you want to delete %s?AuthenticationAuthentication information clearedAuthorAuthors:BranchBranch ManagerBranch/tagBranch/tag...BranchesBrowse a repository treeBrowse toBrowse to a file or folderBrowse...BugsCannot annotate a directoryChangeChange the repository location of a working copyCheck CertificateCheck for Modifications...Check for modifications made to the repositoryCheck out a working copyCheckoutCheckout - %sCheckout...Choose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationCloneClose this dialog.CommitCommit modifications to the repositoryCompare files/foldersCompare revisionsCompare side by sideCompare the differences between two itemsCompare with baseCompare with base using side-by-side comparison toolCompare with previous revisionCompare with previous revision using side-by-side comparison toolCompare with working copyCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationCopy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to...Create Folder...Create PatchCreate Patch...Create Repository hereCreate a repository in a folderCreate folder...Creates a unified diff file with all changes you madeCreating Patch File...DateDate:DebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDelete propertyDelete property (recursive)Delete this propertyDelete this property (recursive)DenyDiff Menu...Do you want to delete the selected properties from all files and subdirectories beneath this directory?Edit authorEdit author...Edit detailsEdit log messageEdit log message...Edit revision properties...Edit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternal ProgramsFile is not under version control.Fingerprint:FinishedForce an invalidate_extension_info() callFound %d item(s)From:GeneralGet LockGet Lock...HEADHelpHost:Ignore ancestryIgnore file:Ignore item by file extensionIgnore item by filenameImportImport - %sImport an item into a repositoryInclude ignored filesInitialize RepositoryInvalidateIssuer:Language:Limit:LineList of comparison optionsLoad/RefreshLoading...Locally lock itemsLock FilesLockedLogLog - %sLog MessageLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MessageMessage:Mime TypeMinimum level to logMore Actions...Move to...N/ANameName:New Location:New Name:New...NoNotification MessagesNumberNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen ShellOpen a fileOpen from first revisionOpen from second revisionPassword:Patch File AppliedPatch File CreatedPathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty ChangeProperty EditorProperty StatusProperty:RabbitVCSRabbitVCS ErrorRabbitVCS GitRabbitVCS SVNRealm:RecursiveRefreshRefresh StatusRefresh the list of properties.Release Lock...Release lock on an itemRelocateRelocate your working copyRelocate...RemotesRenameRename...Repository BrowserRepository paths clearedRepository successfully createdReservedResolveRestoreRestore a missing itemRevertRevert an item to its unmodified stateRevert propertyRevert property (recursive)Revert this property to its original stateRevert this property to its original state (recursive)Reverts everything it seesRevisionRevision:Running Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...SSL Client CertificationSaveSave As...Save AuthenticationSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySchedule items to be added to the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow Changes...Show LogShow RabbitVCS debugging toolsShow a file's log informationShow and edit property detailsShow changes between paths and revisionsShow changes between revisionsShow logShow unversioned filesShowing Revisions:SizeStatusSteal the locksStop on copySwitchSwitch...TagTag ManagerTagsTest MergeTextText ChangeText StatusThanks:The debug menu is used to diagnose problems with RabbitVCS itselfThe from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There was a problem saving your properties.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:Unable to retrieve properties listUnable to set new value for property.UnknownUnlockUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...Updating...Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.Valid:ValueValue:View diff against baseView diff against previous revisionView diff against working copyView diff as side-by-side comparisonView diff between files/foldersView diff between revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemView unified diffWhere do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must supply a destination path.just nowthe selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-12-06 05:15+0000 Last-Translator: Fernando P Silveira Language-Team: Brazilian Portuguese MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n > 1; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %d minutos(s) atrÃĄs%i dia%i dias%i hora%i horas%i minuto%i minutos%i mÃĒs%i meses%i segundo%i segundos%i semana%i semanas%i ano%i anos%s - Finalizado100Adicionar MensagemAdicionar palavra-chaveArquivo(s) afetado(s) (duplo clique para comparar com a base)AutenticaÃ§ÃŖoRamificaçÃĩesDetalhes do CertificadoAlterar o repositÃŗrio da sua cÃŗpia de trabalhoArquivos alterados (duplo clique para comparar com a base)Enviar para:Editar Detalhes da PropriedadeArquivos para bloquearNome da PastaDa RevisÃŖoDa URLDe: (URL e revisÃŖo para mesclagem)Importar MensagemLinksMensagens de LogOpçÃĩes de LogMensagemNota: AlteraçÃĩes das propriedades sÃŖo aplicadas instantÃĸneamente. VocÃĒ precisa rever e anular as alteraçÃĩes efetuadas usando o menu de contexto para cada item. OpçÃĩesPor favor, adicionar detalhes da sua autenticaÃ§ÃŖoPor favor, descreva porque vocÃĒ estÃĄ bloqueando esses arquivosPor favor forneça seu arquivo de certificaÃ§ÃŖo SSLMensagem AnteriorPrograma utilizado para comparar arquivosPropriedades para:RabbitVCSURI Remota:RepositÃŗrioIntervalo de RevisÃĩesRevisÃŖoTabela de RevisÃĩesDetalhe da palavra-chavePalavras-chavePara RevisÃŖoPara: (URL e revisÃŖo para mesclagem)HistÃŗrico de URL(s)URL de origem para mesclagemInformaçÃĩes da VersÃŖoCÃŗpia em usoCÃŗpia de TrabalhoAs propriedades selecionadas serÃŖo aplicadas recursivamente.Tem certeza que deseja deleter %item%?RabbitVCSErro do RRabbitVCSUm assistente com passos para mesclarSobreSobre o RabbitVCSAceitar SempreAceitar uma vezAÃ§ÃŖoAdicionarAdicionar EmblemaAdicione uma nova propriedade.Adicionar um emblemaAdicionar à lista de ignoradosAdicionado uma pasta ao repositÃŗrioOcorreu um erro na extensÃŖo do RabbitVCS Nautilus.Por favor contate o Time RabbitVCS com os detalhes do erro listados abaixo:ComentarComentar - %sComentar um arquivoComentÃĄrio...Aplicar um arquivo com resultado de equalidade unificado para a cÃŗpia de trabalhoAplicar remendoAplicar remendo para o diretÃŗrio...Aplicar remendoAplicar propriedade recursivamenteAplicando a linha de remendo...Tem certeza que deseja apagar sua informaÃ§ÃŖo de autenticaÃ§ÃŖo?Tem certeza que deseja apagar sua mensagem anterior?Tem certeza de que deseja apagar seu caminho do repositÃŗrio?Tem certeza que deseja continuar?Tem certeza que quer apagar %s?AutenticaÃ§ÃŖoInformaÃ§ÃŖo de autenticaÃ§ÃŖo apagadaAutorAutores:RamificaÃ§ÃŖoGerenciador de ramificaçÃĩesBranch/tagBranch/tag...RamificaçÃĩesProcurar uma ÃĄrvore de repositÃŗrioNavegue paraProcurar em um arquivo ou pastaProcurar...BugsNÃŖo Ê possível comentar um diretÃŗrioAlteraÃ§ÃŖoMudar o lugar do repositÃŗrio de um cÃŗpia de trabalhoVerificar CertificadoVerificando se existem modificaçÃĩes...Verificando se existem modificaçÃĩes efetuados para o repositÃŗrioObter uma cÃŗpia de trabalhoObterCheckout - %sObter...Escolha este mÊtodo se vocÃĒ fez algumas alteraçÃĩes para um branch e deseja mesclar suas alteraçÃĩes com outro branch.Escolha este mÊtodo se vocÃĒ deseja mesclar dois diferentes branches em sua cÃŗpia de trabalho.Limpeza de cÃŗpia de trabalhoLimpando...LimpezaLimpeza Solicitada .... Começar a limpeza da cÃŗpia de trabalho?Apagar sua informaÃ§ÃŖo de autenticaÃ§ÃŖoClonarFechar esta janela.EnviarEnviar modificaçÃĩes para o repositÃŗrioComparar arquivos/pastasCompare revisÃĩesComparaÃ§ÃŖo lado a ladoComparar as diferenças entre dois itensComparar com a baseComparar com a base usando a ferramenta de comparaÃ§ÃŖo lado a ladoCompare com a revisÃŖo prÊviaComparar com prÊvia revisÃŖo usando a ferramenta de comparaÃ§ÃŖo lado a ladoCompare com a versÃŖo localAdicionar ConcluídoBranch/tag CompletadaObter ConcluídoLimpeza ConcluídaEnviar ConcluídoExportar ConcluídoImportar ConcluídoBloqueadoMerge ConcluídoTeste de Merge ConcluídoRelocar ConcluídoRenomear CompletadoResolver ConcluídoReverter ConcluídoTrocar ConcluídoDesbloquear CompletadoAtualizaÃ§ÃŖo CompletadaConfirmaÃ§ÃŖoCopiar do CaminhoCopiar da versÃŖoCopiar a URL para a ÃĄrea de transferÃĒnciaCopiar um item para outro lugar no repositÃŗrioCopiar para...Criar pasta...Criar PatchCriar Remendo...Criar RepositÃŗrio aquiCriar um repositÃŗrio no diretÃŗrioCriar pasta...Cria um arquivo diff unificado com todas as mudanças que vocáēŊ fezCriando arquivo de remendoDataData:DepurarReverter depuraÃ§ÃŖoApagarConfirmaÃ§ÃŖo de RemoÃ§ÃŖoApagar propriedades recursivamenteExcluir propriedadeApagar propriedade (recursivo)Excluir esta propriedadeExcluir esta propriedade (recursivo)NegarMenu do diferenciadorVocÃĒ deseja deletar as propriedades selecionadas para todos os arquivos e subdiretÃŗrios contidos neste diretÃŗrio?Edite o autorEdite o autor...Editar detalhesEdite a mensagem do relatÃŗrioEdite a mensagem do relatÃŗrio...Editar propriedades de revisÃŖoEditar...Ativar emblemasAtivar atributos de arquivoAtivar checagem recursiva de statusInglÃĒsExportarExportado - %sExportar uma cÃŗpia de trabalho ou repositÃŗrio sem informaçÃĩes de versionamentoExportar...ExtensÃŖoProgramas ExternosO arquivo nÃŖo estÃĄ sob o controle da versÃŖo.ImpressÃŖo digital:ConcluídoForçar uma chamada invalidate_extension_info()Encontrado(s) %d item(ns)De:GeralBloquearBloquear...HEADAjudaServidor:Ignorar ancestralIgnorar arquivo:Ignorar item por extensÃŖo de arquivoIgnorar item por nome de arquivoImportarImportado - %sImportar um item em um respositÃŗrioIncluir arquivos ignoradosIniciar repositÃŗrioInvalidarEmissor:Idioma:Limite:LinhaLista de opçÃĩes de comparaÃ§ÃŖoCarreage/RenovarCarregando...Itens bloqueados localmenteBloquear ArquivosBloqueadoLogLog - %sMensagem de logGravando LogLogin:Marcar um item conflitante como resolvidoMergeAssistente de MesclagemMesclar um intervalo de revisÃĩesMesclar duas ÃĄrvores diferentesMesclar...MensagemMensagem:Tipo MimeNível mÊdio para logMais açÃĩes...Mover para...N/DChaveNome:Nova LocalizaÃ§ÃŖoNovo Nome:Novo...NÃŖoMensagens de NotificaÃ§ÃŖoNÃēmeroNÃēmero de URLs para se lembrarNÃēmero de mensagens para se lembrarOmitir os ExternosSomente gravar a mesclagemAbrirAbrir ShellAbrir um arquivoAbrir da primeira versÃŖoAbrir da segunda versÃŖoSenha:Linha de remendo aplicadaArquivo de remendo criadoCaminhoCaminho:Mensagem AnteriorMensagem anterior apagadaPropriedadesPropriedades - %sPropriedadeAlteraÃ§ÃŖo de PropriedadeEditor de PropriedadePropriedades de StatusPropriedade:RabbitVCSErro do RabbitVCSRabbitVCS GitRabbitVCS SVNDomínio:RecursivoAtualizarAtualizar StatusAtualizar a lista de propriedades.Liberar Bloqueio...Liberar bloqueio de um itemRealocarRealocar sua cÃŗpia de trabalhoRealocar...RemotosRenomearRenomear...Navegador de RepositÃŗrioCaminho do repositÃŗrio apagadoRepositÃŗrio criado com sucessoReservadoResolverRestaurarRecuperar um item em faltaReverterReverter um item para seu estado inalteradoReverter propriedadeReverter propriedade (recursivo)Reverter esta propriedade ao seu estado originalReverter esta propriedade ao seu estado original (recursivo)Reverter tudo que veRevisÃŖoRevisÃŖo:Rodando Comando Adicionar...Rodando comando Branch/tag...Executando Checkout...Rodando Comando Enviar...Rodando Comando ExportarRodando Comando Importar...Bloqueando...Executando MergeExecutando Teste de MergeRodando Comando RealocarRodando Comando Renomear..Rodando Comando ResolverRodando Comando Reverter...Rodando Comando TrocarRodando Comando DesbloquearCertificaÃ§ÃŖo SSL do clienteSalvarSalvar como...Salvar AutenticaÃ§ÃŖoData SalvaAgendar um item para ser deletado do repositÃŗrioAgendar um item para ser renomeado no repositÃŗrioProgramar itens para serem adicionaos ao repositÃŗrioSelecionar / Deselecionar tudoSelecionar um arquivoSelecionar um diretÃŗrioSelecione um programaConfiguraçÃĩesMostrar AlteraçÃĩes...Mostrar LogMostrar ferramentas de debug do RabbitVCSMostrar as informaçÃĩes de um arquivo de logExibir e editar detalhes da propriedadeMostrar alteraçÃĩes entre caminhos e revisÃĩesMostrar mudanças entre as revisÃĩesMostrar LogMostrar arquivos nÃŖo versionadosMostrando RevisÃĩes:TamanhoEstadoRoubar os bloqueiosParar em cÃŗpiaTrocarMudar...Palavra-chaveGerenciador de palavras-chavePalavras-chaveTestar MesclagemTextoAlteraÃ§ÃŖo do textoTexto de StatusAgradecimentos:O menu de debug Ê usado para diagnosticar problemas com o prÃŗprio RabbitVCSAs URL origem e destino sÃŖo necessÃĄriasO campo revisÃŖo de origem deve um inteiroO caminho informado nÃŖo Ê de uma cÃŗpia de trabalhoO(s) item(ns) pode(m) ser enviado(s) para lixeira.O nome do novo campo Ê requeridoOs campos URL do repositÃŗrio e caminho de destino sÃŖo necessÃĄrios.O campo URL do repositÃŗrio Ê necessÃĄrio.O campo repositÃŗrio local Ê necessÃĄrioHouve um problema ao salvar suas propriedades.Ocorreu um erro criando o repositÃŗrio. Tenha certeza que o diretÃŗrio informando estÃĄ vazio.Para:Tipo:URL/Caminho:URL:Incapaz de recuperar a lista de propriedadesIncapaz de ajustar um novo valor à propriedade.DesconhecidoDesbloquearAtualizarAtualizando para RevisÃŖoAtualizar um arquivo para uma revisÃŖo específicaAtualizar uma cÃŗpia de trabalhoAtualizar para revisÃŖo...Atualizando...Utilize o diÃĄlogo de log para selecionar as revisÃĩes que vocÃĒ deseja mesclar. Ou, escreve manualmente as revisÃĩes, separando por vírgula. VocÃĒ pode especificar um intervalo de visÃĩes utilizando um traço. Examplo: 4-7,9,11,15-HEAD Para mesclar todas as revisÃĩes, deixa a caixa vazia.Validar:ValorValor:DiferenciaçÃĩes comparadas à baseVeja a diferenciaÃ§ÃŖo de encontro com a revisÃŖo prÊviaVeja a diferenciaÃ§ÃŖo de encontro com a cÃŗpia em usoVer diferenciaÃ§ÃŖo por comparaÃ§ÃŖo lado a ladoVer diferenciaçÃĩes entre arquivos/pastasVeja a diferenciaÃ§ÃŖo entre as revisÃĩesVisualizar ajudarVisualizar ou alterar as configuraçÃĩes do RabbitVCSVer as diferenças emtre dois arquivosVisualizar as alteraçÃĩes feitas em um arquivoVer as modificaçÃĩes realizadas em um arquivo desde a Ãēltima alteraÃ§ÃŖoVisualizar as propriedades de um itemVisÃŖo da unificaÃ§ÃŖo pelo diferenciadorOnde vocÃĒ quer copiar a seleÃ§ÃŖo?Onde vocÃĒ quer mover a seleÃ§ÃŖo?CÃŗpia em uso.SimVocÃĒ deve informar uma pasta de destino.hÃĄ poucoO(s) item(ns) selecionado(s)pararabbitvcs-0.19/locale/ro/000077500000000000000000000000001445560650400153125ustar00rootroot00000000000000rabbitvcs-0.19/locale/ro/LC_MESSAGES/000077500000000000000000000000001445560650400170775ustar00rootroot00000000000000rabbitvcs-0.19/locale/ro/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000225571445560650400212260ustar00rootroot00000000000000Ū•Ŗ4ßL Č É Ú ī )?Zj€”Ŗ˛Ëâķ7H>-‡ĩģ Ë×Ū â íû % 5?A65¸"î" CJ S ^ hrŽ ¯ ˇÅÚėũ0A R_djq…Š’Ą¸Ā Į ĶŨ īü$)/? FR hs {…Œ ‘œŖ§¯ļÆÎŌ ×áčū3 8BGY s~Ž— § ąģ ÂĖÔãė ķũ&-6Mk‡ ĄŦ ÂĐāņú"+2 9 CN S_-g•%´Úāåíôû !' .!8%Z€Ÿ#ŖĮĐé  #15J_yˆž ŗĀĐé:*Le-˛āįø ,> Zeu ‹6™7Đ>!G i$wœĸĒ ŧĮ×ö  #9Uk{‹žąĮ Ũč íø  ,?[d mzƒ ”Ÿ¨žÃËŌÚí ö  + 4 < E K [ b i p x ‹ ‘ • š ¤ Ģ ŋ Ų ų ! !!"! 8!F! X!d! u! ‚!Œ!•!ž!¯!Æ! Ė!×!į!" " "*"2""P"s"Š" Ļ"ŗ"Ī"æ"ū"# #$+# P#^#d# l#x#‡# Œ# —#4ĸ#%×##ũ#!$&$ +$ 6$ C$O$g$‚$‰$‘$š$0¯$.ā$*%:%1=%gv›NEœX32Q^SF@ &Gy–ƒe™‹;}I+UYš'_s RJ{>T—"bpl.t8•?!Œd5,cP€$’Ŗž„‚KmVh|1ak4f z O9r…“D)ŠH(7u/-M‰†i‘‡ŸAĄ]`ZC06#”ˆ:=% W  \ĸ[<nBow˜xj~Žq*L%i hour%i hours%i minute%i minutes%i second%i seconds%s - Finished100Add MessageAuthenticationCertificate DetailsFrom URLImport MessageLog MessagesMessageOptionsPrevious MessagesProperties for:RabbitVCSURL HistorySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSAboutAbout RabbitVCSAccept OnceActionAddAdd EmblemAdd an emblemAdd to ignore listAnnotateAnnotate - %sAnnotate a fileAnnotate...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBrowse toBrowse...Cannot annotate a directoryCheck CertificateCleaning Up...CleanupCompleted AddCompleted Branch/tagCompleted CleanupCompleted ExportCompleted ImportCompleted LockCompleted RelocateCompleted RenameCompleted UpdateConfirmationDateDebugDeleteDelete ConfirmationDenyEdit...Enable emblemsEnable file attributesEnglishExportExport - %sExtensionExternal ProgramsFingerprint:FinishedFound %d item(s)From:GeneralHelpHost:Ignore ancestryImportImport - %sInclude ignored filesInvalidateIssuer:Language:Limit:LineLoading...LockedLogLoggingLogin:Merge AssistantMessageN/ANameNew Name:New...Notification MessagesNumber of messages to rememberOnly record the mergeOpenPassword:PathPrevious MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty StatusProperty:RabbitVCSRealm:RecursiveRefreshRefresh StatusRelocateRenameRename...Repository paths clearedResolveRestoreRevertRevisionRunning Add Command...Running Branch/tag Command...Running Relocate Command...Running Rename Command...Saved DataSelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow LogShow RabbitVCS debugging toolsShow logStatusSwitchSwitch...Test MergeTextText StatusThanks:The from and to url fields are both required.The new name field is requiredThe repository URL field is required.Type:URL:UnknownUnlockUpdateUpdate To RevisionUpdating...Valid:ValueValue:View helpView or change RabbitVCS settingsView the modifications made to a fileView the properties of an itemYesYou must supply a destination path.Project-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-02-09 10:19+0000 Last-Translator: FULL NAME Language-Team: Romanian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 == 0) && (n != 0))) ? 2: 1)); X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %i oră%i ore%i de ore%i minut%i minute%i de minute%i secundă%i de secunde%s - Terminat100Adaugă MesajAutentificareDetalii CertificatDin URLImportă MesajMesaje JurnalMesajOpțiuniMesaje AnterioareProprietăți pentru:RabbitVCSIstorie URLProprietățile selectate vor fi aplicate recursiv.Ești sigur că vrei să ștergi %articol%?RabbitVCSDespreDespre RabbitVCSAcceptă O dataAcțiuneAdăugareAdaugă EmblemăAdauga o emblemăAdaugă la lista de ignoratAdnoteazăAdnotează - %sAdnotează un fișierAdnotează...Vrei să ÃŽČ›i ștergi informațiile de autentificare?Ești sigur că vrei sa ÃŽČ›i ștergi mesajul anterior?Ești sigur că vrei să ștergi căile tale către depozitar?Ești sigur că vrei sa continui?AutentificareInformații de autentificare șterseAutorAutori:Domeniu/etichetăCaută ÃŽnRăsfoiește...Nu se poate adnota un directorVerifică CertificatSe șterge...ȘtergereAdăugare FinalizatăDomeniu/etichetă finalizatȘtergere FinalizatăExport TerminatImport TerminatBlocare TerminatăMutare FinalizatăRedenumire efectuatăActualizare completăConfirmareDataDepaneazăȘtergeConfirmare ștergereInterziceEditează...Activează emblemeActivează atribute fișierEnglezăExportăExportă- %sExtensiePrograme ExterneAmprentă:TerminatGăsit %d articol(e)Din:GeneralAjutorGazdă:Ignoră antecedentImportăImportă - %sInclude fișiere ignorateInvalideazăEmitent:Limbă:Limită:LiniaSe ÃŽncarcă...BlocatJurnalLogareLogare:Asistent ĂmbinareMesajN/DNumeNume Nou:Nou...Mesaje de notifcareNumăr mesaje de reținutÎnregistrează doar ÃŽmbinareaDeschideParolă:CaleMesaje AnterioareMesaj anterior ștersProprietățiPropietăți + %sProprietateStare PropietateProprietate:RabbitVCSDomeniu:RecursivReÃŽmprospătareStare ReÃŽmprospătareMutăRedenumireRedenumește...Căile către depozitar șterseRezolvăRestaureazăRestaureazăReviziaRulează Comanda Adăugare...Rulează comanda Domeniu/etichetăRulează Comanda MutăRulează Comanda RedenumireDate SalvateSelecteză/Deselecteză totSelectează un fișierSelectează un DirectorSelectează un programSetăriArată JurnalArată uneltele de depanare RabitVCSArată jurnalStareComutăComutare...Test ÎmbinareTextStare TextMulțumiriCÃĸmpurile url de la și la sunt amÃĸndouă necesareEste necesar cÃĸmpul pentru noul numeCÃĸmpul URL depozitar este necesar.Tip:URL:NecunoscutDeblocheazăActualizareActualizați la reviziaÎn curs de actualizare...Valid:ValoareValoare:Vizualizează ajutorVizualizează sau modifică setaările RabbitVCSVizualizează modificările aduse unui fișierVizualizează proprietățile unui articolDaTrebuie să furnizați o cale pentru destinație.rabbitvcs-0.19/locale/ru/000077500000000000000000000000001445560650400153205ustar00rootroot00000000000000rabbitvcs-0.19/locale/ru/LC_MESSAGES/000077500000000000000000000000001445560650400171055ustar00rootroot00000000000000rabbitvcs-0.19/locale/ru/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000603311445560650400212240ustar00rootroot00000000000000Ū•)d Ŧāáō -;?Rh1ƒĩĮäų(G ]j~•¤-ŗ6á$1Vm~Ļļ&Íô ;7OH‡-Đū$4 COV Z es †’§: CQ a my•°?Į65>"t—"ĻÉĐ Ų ä ō ü  ' 0. _ q Š “ Ą p­ V!u!‹!š!2ĸ!%Õ!û!&")";"P" o"}"’"Ĩ"ˇ"Č"Ų"ę"ų" ##1#B#T#e#v#‡# ˜#Ĩ#´#Į#2Ũ# $ $($?$_$p$‡$Œ$ ’$Ÿ$Ļ$ē$Ø$Ũ$å$ô$ %*%2% 9%BE% ˆ%’% ¤%ą%ē%Ë%Ņ%Ų% â%î%ķ%ø%ū%& & !&B& X&b&i& n& y&„&‹&&˜& &"§&Ę&Đ&ā&û&'' &'0'E' U'`'d' i' w''ˆ'‹'Ą'ŧ'Û'ę'( (()( C(M(`(s(x(Š( ¤(¯(ŋ(Č(Ø( č(ō( ų() ))*)B)K) f)r) y)ƒ)œ)ŧ)Ä)Ė)&Ķ)ú)**5*S*o*‰*Ŗ*Ŋ*Õ*ë*ū*+4+O+i+ƒ+ +¨+ ŧ+Į+ Ũ+ë+û+ ,,,=,[,z,ƒ,š,­,˛,š, É,Ö, Ũ, į,ō, ÷,-A --M-*{-$Ļ-*Ë-ö-A.%W.,}.QĒ.ü./ ////#/$6/[/q/ ‡/ú“/Ž0•0›0ĸ0 ž0!Č0ę0(ü0(%1N1#R1v11”1—1ŗ3#Đ3-ô33"4V4n4*r4#4.Á4Sđ4%D54j5+Ÿ5Ë5æ58ö56/6f6"z6(6Æ6ā6cú6d^7.Ã7Yō7L8l8}8&›8Â8$Ø88ũ869%P9+v9 ĸ9^Ã9d":-‡:.ĩ:ä: ú:;';G;X;i;‡;Ĩ;3Ä;Íø;Æ<!ã<%=+=K=2g=8š=!Ķ=cõ=]Y>bˇ>B?]?Cz? ž? É?×?é?ū? @ #@:0@k@J~@'É@.ņ@ A/ACAšUAB, BÍBáB\ôBEQC—CG˛CúCD96DpD ƒD'¤D#ĖD#đDE4ERE!mE(E)¸EâEũE>F+XF„F'¤FĖFįFG/GXOG¨GÃG0ÛG3 H @H&aHˆH‘H. HĪH)ŪH4I=IPIpI0IIÁI J J/JŒCJĐJ!åJ KK$'KLK RK]KxKK ŸK ŦK'ļK ŪKëKCũK4AL vL€L •LĸL!ļLØLíL ôL M" M;0M lMwM*—M1ÂMôMN N6%N1\NŽNĢNąN¸NĪN âNđN'÷N,O6LO(ƒO<ŦOéOøO-P/FP vP„PžP´P'ŊP6åPQ-QCQ#TQxQ‹QQ­QÂQĶQņQ+R;R6PR‡RŸRēR4ØR2 S#@SdS#}S7ĄSCŲST,T'DT,lT™T!­TĪTīTU+#UOU#fU*ŠUEĩUûU$V9V/VV#†V8ĒVãVûVW5WHW8`W"™W=ŧWúW/X(BX kXxX!‹X4­XâXųXY 1Y!ÁŸEŒŠęĖ%Yž­uéĒDČ.†‡ #$ûN^ÃgˆāPÍ| 5¸úc<ÕáƒŌŋ…KŲ €¤‰ļ˛”üî×`]ų&؛yS_6[?Fąŗl‚Ŧ´q2);Ą Ū%œk+Ûf&dZēđ!ģQ ãmpJbņ ōŖaAĩ ÷¯Âġũø‹"URŊwĪ’=Įķ͘'ÅCL ¨ėå%d minute(s) ago%i hour%i hours%i minute%i minutes%i second%i seconds%s - Finished100Add MessageAuthenticationCertificate DetailsChange the repository of your working copyCommit to:Edit Property DetailsFiles to lockFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageOptionsPlease add your authentication detailsPlease describe why you are locking these filesPrevious MessagesProgram used to compare filesProperties for:RabbitVCSRepositoryRevision RangeRevisionRevisions TableTo: (URL and revision to merge)URL HistoryURL to merge fromVersion InformationWorking CopySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd an emblemAdd to ignore listAdded a folder to the repositoryAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sAnnotate a fileAnnotate...Apply PatchApply Patch To Directory...Apply property recursivelyApplying Patch File...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBranch/tag...Browse toBrowse...BugsCannot annotate a directoryChangeChange the repository location of a working copyCheck CertificateCheck out a working copyCheckoutCheckout - %sCheckout...Choose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationCommitCommit modifications to the repositoryCompare revisionsCompare side by sideCompare with previous revisionCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationCopy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to...Create PatchCreate Repository hereCreate a repository in a folderCreate folder...Creating Patch File...DateDebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDenyEdit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExtensionExternal ProgramsFingerprint:FinishedFound %d item(s)From:GeneralGet LockGet Lock...HEADHelpHost:Ignore ancestryImportImport - %sImport an item into a repositoryInclude ignored filesLanguage:Limit:LineLoading...Lock FilesLockedLogLog - %sLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MessageMime TypeMinimum level to logMore Actions...Move to...N/ANameNew Location:New Name:New...NoNotification MessagesNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen ShellOpen from first revisionOpen from second revisionPassword:Patch File AppliedPatch File CreatedPathPrevious MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty ChangeProperty StatusProperty:Realm:RecursiveRefreshRefresh StatusRelease Lock...Release lock on an itemRelocateRelocate your working copyRelocate...RenameRename...Repository paths clearedRepository successfully createdResolveRestoreRevertRevert an item to its unmodified stateReverts everything it seesRevisionRunning Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...Save As...Save AuthenticationSaved DataSelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow LogShow RabbitVCS debugging toolsShow a file's log informationShow changes between revisionsShow logShow unversioned filesShowing Revisions:SizeStatusSteal the locksStop on copySwitchSwitch...Test MergeTextText StatusThanks:The debug menu is used to diagnose problems with RabbitVCS itselfThe from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:UnlockUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...Updating...Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.Valid:ValueValue:View diff between revisionsView helpView or change RabbitVCS settingsView unified diffWhere do you want to copy the selection?Where do you want to move the selection?YesYou must supply a destination path.just nowthe selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-12-03 19:19+0000 Last-Translator: Sergey Sedov Language-Team: Russian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %d ĐŧиĐŊŅƒŅ‚(Ņ‹) ĐŊаСад%i Ņ‡Đ°Ņ%i Ņ‡Đ°ŅĐ°%i Ņ‡Đ°ŅĐžĐ˛%i ĐŧиĐŊŅƒŅ‚Đ°%i ĐŧиĐŊŅƒŅ‚Ņ‹%i ĐŧиĐŊŅƒŅ‚%i ҁĐĩĐē҃ĐŊда%i ҁĐĩĐē҃ĐŊĐ´Ņ‹%i ҁĐĩĐē҃ĐŊĐ´%s - ЗавĐĩŅ€ŅˆĐĩĐŊĐž100Đ”ĐžĐąĐ°Đ˛Đ¸Ņ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩĐŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸ŅĐĄĐ˛ĐžĐšŅŅ‚Đ˛Đ° ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ°Đ˜ĐˇĐŧĐĩĐŊĐ¸Ņ‚ŅŒ Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đš Đ˛Đ°ŅˆĐĩĐš Ņ€Đ°ĐąĐžŅ‡ĐĩĐš ĐēĐžĐŋĐ¸Đ¸Đ—Đ°Ņ„Đ¸ĐēŅĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ в:Đ ĐĩдаĐēŅ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ŅĐ˛ĐžĐšŅŅ‚Đ˛Đ°Đ¤Đ°ĐšĐģŅ‹ ĐŊа ĐąĐģĐžĐēĐ¸Ņ€ĐžĐ˛ĐēиИС Ņ€ĐĩвиСииИС URLИС: (URL и Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸Ņ Đ´ĐģŅ ҁĐģĐ¸Ņ‚Đ¸Ņ)ĐĄĐžĐžĐąŅ‰ĐĩĐŊиĐĩ ИĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊĐ¸ŅĐĄŅŅ‹ĐģĐēĐ¸ĐĄĐžĐžĐąŅ‰ĐĩĐŊĐ¸Ņ ĐģĐžĐŗĐ°ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēи ĐļŅƒŅ€ĐŊаĐģĐ°ĐĄĐžĐžĐąŅ‰ĐĩĐŊиĐĩĐĐ°ŅŅ‚Ņ€ĐžĐšĐēиПоĐļаĐģŅƒĐšŅŅ‚Đ° Đ´ĐžĐąĐ°Đ˛ŅŒŅ‚Đĩ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ŅŽ Ой Đ°ŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸Đ¸ĐŸĐžĐļаĐģŅƒĐšŅŅ‚Đ° ĐžĐŋĐ¸ŅˆĐ¸Ņ‚Đĩ ĐŋŅ€Đ¸Ņ‡Đ¸ĐŊ҃ ĐąĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēи ŅŅ‚Đ¸Ņ… Ņ„Đ°ĐšĐģĐžĐ˛ĐŸŅ€ĐĩĐ´Ņ‹Đ´ŅƒŅ‰Đ¸Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊĐ¸ŅĐŸŅ€ĐžĐŗŅ€Đ°ĐŧĐŧа Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧĐ°Ņ Đ´ĐģŅ ŅŅ€Đ°Đ˛ĐŊĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģĐžĐ˛ĐĄĐ˛ĐžĐšŅŅ‚Đ˛Đ° Đ´ĐģŅ:RabbitVCSĐ ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸ĐšĐ”Đ¸Đ°ĐŋОСОĐŊ Ņ€ĐĩвиСиКРĐĩĐ˛Đ¸ĐˇĐ¸ŅĐĸайĐģĐ¸Ņ†Đ° Ņ€ĐĩвизийВ: (URL и Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸Ņ Đ´ĐģŅ ҁĐģĐ¸ŅĐŊĐ¸Ņ)Đ˜ŅŅ‚ĐžŅ€Đ¸Ņ URLURL Đ´ĐģŅ ҁĐģĐ¸ŅĐŊĐ¸Ņ иСИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ Đž вĐĩŅ€ŅĐ¸Đ¸Đ Đ°ĐąĐžŅ‡Đ°Ņ ĐēĐžĐŋĐ¸ŅĐ’Ņ‹ĐąŅ€Đ°ĐŊĐŊŅ‹Đĩ ŅĐ˛ĐžĐšŅŅ‚Đ˛Đ° ĐąŅƒĐ´ŅƒŅ‚ ĐŋŅ€Đ¸ĐŧĐĩĐŊĐĩĐŊŅ‹ Ņ€ĐĩĐēŅƒŅ€ŅĐ¸Đ˛ĐŊĐž.Đ’Ņ‹ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ‚ĐĩĐģҌĐŊĐž Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ŅƒĐ´Đ°ĐģĐ¸Ņ‚ŅŒ %item%?RabbitVCSĐŸĐžŅˆĐ°ĐŗĐžĐ˛Ņ‹Đš ĐŧĐ°ŅŅ‚ĐĩŅ€ ҁĐģĐ¸ŅĐŊĐ¸ŅĐž ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧĐĩО RabbitVCSĐŸŅ€Đ¸ĐŊŅŅ‚ŅŒ ĐŊĐ°Đ˛ŅĐĩĐŗĐ´Đ°ĐŸŅ€Đ¸ĐŊŅŅ‚ŅŒ ĐĩдиĐŊĐžĐļĐ´Ņ‹Đ”ĐĩĐšŅŅ‚Đ˛Đ¸ĐĩĐ”ĐžĐąĐ°Đ˛Đ¸Ņ‚ŅŒĐ”ĐžĐąĐ°Đ˛Đ¸Ņ‚ŅŒ ИĐēĐžĐŊĐēŅƒĐ”ĐžĐąĐ°Đ˛Đ¸Ņ‚ŅŒ иĐēĐžĐŊĐēŅƒĐ”ĐžĐąĐ°Đ˛Đ¸Ņ‚ŅŒ в Đ¸ĐŗĐŊĐžŅ€Đ´ĐžĐąĐ°Đ˛Đ¸Ņ‚ŅŒ ĐŋаĐŋĐē҃ в Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đ’ Ņ€Đ°ŅŅˆĐ¸Ņ€ĐĩĐŊии RabbitVCS Đ´ĐģŅ Nautilus ĐŋŅ€ĐžĐ¸ĐˇĐžŅˆĐģа ĐžŅˆĐ¸ĐąĐēа. ĐĄĐ˛ŅĐļĐ¸Ņ‚ĐĩҁҌ ҁ ĐēĐžĐŧаĐŊдОК RabbitVCS и ĐŋĐĩŅ€ĐĩĐ´Đ°ĐšŅ‚Đĩ Đ´ĐĩŅ‚Đ°Đģи ĐžŅˆĐ¸ĐąĐēи ĐŊиĐļĐĩКоĐŧĐŧĐĩĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒĐšĐžĐŧĐŧĐĩĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ - %sКоĐŧĐŧĐĩĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ„Đ°ĐšĐģКоĐŧĐŧĐĩĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ...ĐŸŅ€Đ¸ĐŧĐĩĐŊĐ¸Ņ‚ŅŒ ĐŋĐ°Ņ‚Ņ‡ĐŸŅ€Đ¸ĐŧĐĩĐŊĐ¸Ņ‚ŅŒ ĐŋĐ°Ņ‚Ņ‡ Đē ĐēĐ°Ņ‚Đ°ĐģĐžĐŗŅƒ...ĐŸŅ€Đ¸ĐŧĐĩĐŊŅŅ‚ŅŒ ŅĐ˛ĐžĐšŅŅ‚Đ˛Đ° Ņ€ĐĩĐēŅƒŅ€ŅĐ¸Đ˛ĐŊĐžĐŸŅ€Đ¸ĐŧĐĩĐŊĐĩĐŊиĐĩ ĐŋĐ°Ņ‚Ņ‡Đ°..Đ’Ņ‹ Ņ‚ĐžŅ‡ĐŊĐž Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ŅƒĐ´Đ°ĐģĐ¸Ņ‚ŅŒ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ŅŽ Ой Đ°ŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸Đ¸?Đ’Ņ‹ Ņ‚ĐžŅ‡ĐŊĐž Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ŅƒĐ´Đ°ĐģĐ¸Ņ‚ŅŒ Đ˛Đ°ŅˆĐ¸ ĐŋŅ€ĐĩĐ´Ņ‹Đ´ŅƒŅ‰Đ¸Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊĐ¸Ņ?Đ’Ņ‹ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ‚ĐĩĐģҌĐŊĐž Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ŅƒĐ´Đ°ĐģĐ¸Ņ‚ŅŒ Đ°Đ´Ņ€ĐĩŅĐ° Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đĩв?Đ’Ņ‹ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ‚ĐĩĐģҌĐŊĐž Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ĐŋŅ€ĐžĐ´ĐžĐģĐļĐ¸Ņ‚ŅŒ?ĐŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸ŅĐ˜ĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ Đž Đ°ŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸Đ¸ ŅƒĐ´Đ°ĐģĐĩĐŊĐ°ĐĐ˛Ņ‚ĐžŅ€ĐĐ˛Ņ‚ĐžŅ€Ņ‹:ВĐĩŅ‚Đēа/Ņ‚ŅĐŗĐ’ĐĩŅ‚Đēа/Ņ‚ŅĐŗ...ĐŸŅ€ĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒĐžĐąĐˇĐžŅ€...ĐžŅˆĐ¸ĐąĐēиНĐĩĐģŅŒĐˇŅ ĐēĐžĐŧĐŧĐĩĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐēĐ°Ņ‚Đ°ĐģĐžĐŗĐ¸Đ¸ĐˇĐŧĐĩĐŊĐĩĐŊиĐĩĐĄĐŧĐĩĐŊĐ¸Ņ‚ŅŒ Đ°Đ´Ņ€Đĩҁ Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Ņ Ņ€Đ°ĐąĐžŅ‡ĐĩĐš ĐēĐžĐŋĐ¸Đ¸ĐŸŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ˜ĐˇĐ˛ĐģĐĩ҇ĐĩĐŊиĐĩ Ņ€Đ°ĐąĐžŅ‡ĐĩĐš ĐēĐžĐŋииИСвĐģĐĩŅ‡ŅŒĐ˜ĐˇĐ˛ĐģĐĩŅ‡ŅŒ - %sИСвĐģĐĩŅ‡ŅŒ...Đ’Ņ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ŅŅ‚ĐžŅ‚ ĐŧĐĩŅ‚ĐžĐ´ ĐĩҁĐģи Đ˛Ņ‹ вĐŊĐžŅĐ¸Đģи иСĐŧĐĩĐŊĐĩĐŊĐ¸Ņ в вĐĩŅ‚Đē҃ и ĐļĐĩĐģаĐĩŅ‚Đĩ ҁĐģĐ¸Ņ‚ŅŒ ŅĐ˛ĐžĐ¸ иСĐŧĐĩĐŊĐĩĐŊĐ¸Ņ ҁ Đ´Ņ€ŅƒĐŗĐžĐš вĐĩŅ‚ĐēОК.Đ’Ņ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ŅŅ‚ĐžŅ‚ ĐŧĐĩŅ‚ĐžĐ´ ĐĩҁĐģи Đ˛Ņ‹ Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ҁĐģĐ¸Ņ‚ŅŒ двĐĩ Ņ€Đ°ĐˇĐŊҋ҅ вĐĩŅ‚Đēи в ŅĐ˛ĐžŅŽ Ņ€Đ°ĐąĐžŅ‡ŅƒŅŽ ĐēĐžĐŋĐ¸ŅŽ.Đ—Đ°Ņ‡Đ¸ŅŅ‚Đ¸Ņ‚ŅŒ Ņ€Đ°ĐąĐžŅ‡ŅƒŅŽ ĐēĐžĐŋĐ¸ŅŽĐ—Đ°Ņ‡Đ¸ŅŅ‚Đēа...Đ—Đ°Ņ‡Đ¸ŅŅ‚Đ¸Ņ‚ŅŒĐ’Ņ‹ĐˇĐ˛Đ°ĐŊа ĐˇĐ°Ņ‡Đ¸ŅŅ‚Đēа... ĐĐ°Ņ‡Đ°Ņ‚ŅŒ ĐˇĐ°Ņ‡Đ¸ŅŅ‚Đē҃ Ņ€Đ°ĐąĐžŅ‡ĐĩĐš ĐēĐžĐŋии?ĐŖĐ´Đ°ĐģĐ¸Ņ‚ŅŒ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ŅŽ Ой Đ°ŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸Đ¸Đ—Đ°Ņ„Đ¸ĐēŅĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒĐ—Đ°Ņ„Đ¸ĐēŅĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ иСĐŧĐĩĐŊĐĩĐŊĐ¸Ņ в Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đ¸ĐĄŅ€Đ°Đ˛ĐŊĐ¸Ņ‚ŅŒ Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸Đ¸ĐĄŅ€Đ°Đ˛ĐŊĐ¸Ņ‚ŅŒ Ņ€ŅĐ´ĐžĐŧĐĄŅ€Đ°Đ˛ĐŊĐ¸Ņ‚ŅŒ ҁ ĐŋŅ€ĐĩĐ´ŅƒĐ´Ņ‹Ņ‰ĐĩĐš Ņ€ĐĩвиСиĐĩйДобавĐģĐĩĐŊоВĐĩŅ‚Đēа/Ņ‚ŅĐŗ ŅĐžĐˇĐ´Đ°ĐŊаИСвĐģĐĩ҇ĐĩĐŊиĐĩ СавĐĩŅ€ŅˆĐĩĐŊĐžĐ—Đ°Ņ‡Đ¸ŅŅ‚Đēа СавĐĩŅ€ŅˆĐĩĐŊаФиĐēŅĐ°Ņ†Đ¸Ņ СавĐĩŅ€ŅˆĐĩĐŊаЭĐēҁĐŋĐžŅ€Ņ‚ СавĐĩŅ€ŅˆĐĩĐŊИĐŧĐŋĐžŅ€Ņ‚ СавĐĩŅ€ŅˆĐĩĐŊЗабĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°ĐŊОХĐģĐ¸ŅĐŊиĐĩ СавĐĩŅ€ŅˆĐĩĐŊĐžĐĸĐĩҁ҂ ҁĐģĐ¸ŅĐŊĐ¸Ņ СавĐĩŅ€ŅˆĐĩĐŊПĐĩŅ€ĐĩҁĐĩĐģĐĩĐŊиĐĩ СавĐĩŅ€ŅˆĐĩĐŊоПĐĩŅ€ĐĩиĐŧĐĩĐŊОваĐŊоКоĐŊŅ„ĐģиĐēŅ‚ Ņ€Đĩ҈ĐĩĐŊĐ˜ŅŅ…ĐžĐ´ĐŊĐžĐĩ ŅĐžŅŅ‚ĐžŅĐŊиĐĩ Đ˛ĐžŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊоПĐĩŅ€ĐĩĐēĐģŅŽŅ‡ĐĩĐŊиĐĩ СавĐĩŅ€ŅˆĐĩĐŊоБĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēа ҁĐŊŅŅ‚Đ°ĐžĐąĐŊОвĐģĐĩĐŊиĐĩ СавĐĩŅ€ŅˆĐĩĐŊĐžĐŸĐžĐ´Ņ‚Đ˛ĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩКоĐŋĐ¸Ņ иС ĐŋŅƒŅ‚Đ¸ĐšĐžĐŋĐ¸Ņ иС Ņ€ĐĩвиСииХĐēĐžĐŋĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Đ°Đ´Ņ€Đĩҁ в ĐąŅƒŅ„ĐĩŅ€ĐšĐžĐŋĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅĐģĐĩĐŧĐĩĐŊŅ‚ в Đ´Ņ€ŅƒĐŗĐžĐĩ ĐŧĐĩŅŅ‚Đž в Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đ¸ĐšĐžĐŋĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ в...ĐĄĐžĐˇĐ´Đ°Ņ‚ŅŒ ĐŋĐ°Ņ‚Ņ‡ĐĄĐžĐˇĐ´Đ°Ņ‚ŅŒ Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đš СдĐĩŅŅŒĐĄĐžĐˇĐ´Đ°Ņ‚ŅŒ Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đš в ĐŋаĐŋĐēĐĩĐĄĐžĐˇĐ´Đ°Ņ‚ŅŒ ĐēĐ°Ņ‚Đ°ĐģĐžĐŗ...ХОСдаĐŊĐ¸Ņ Ņ„Đ°ĐšĐģа ĐŋĐ°Ņ‚Ņ‡Đ°Đ”Đ°Ņ‚Đ°ĐžŅ‚ĐģадĐēĐ°ĐžŅ‚ĐģадĐēа ĐžŅ‚ĐŧĐĩĐŊŅ‹ иСĐŧĐĩĐŊĐĩĐŊĐ¸ĐšĐŖĐ´Đ°ĐģĐ¸Ņ‚ŅŒĐŖĐ´Đ°ĐģĐ¸Ņ‚ŅŒ ĐŋĐžĐ´Ņ‚Đ˛ĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩĐŖĐ´Đ°ĐģŅŅ‚ŅŒ ŅĐ˛ĐžĐšŅŅ‚Đ˛Đ° Ņ€ĐĩĐēŅƒŅ€ŅĐ¸Đ˛ĐŊоЗаĐŋŅ€ĐĩŅ‚Đ¸Ņ‚ŅŒĐ ĐĩдаĐēŅ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ...Đ Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ иĐēĐžĐŊĐēĐ¸Đ Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ Đ°Ņ‚Ņ€Đ¸ĐąŅƒŅ‚Ņ‹ Ņ„Đ°ĐšĐģĐžĐ˛Đ Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ Ņ€ĐĩĐēŅƒŅ€ŅĐ¸Đ˛ĐŊŅƒŅŽ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đē҃ ŅŅ‚Đ°Ņ‚ŅƒŅĐ°ĐĐŊĐŗĐģĐ¸ĐšŅĐēиКЭĐēҁĐŋĐžŅ€Ņ‚Đ­ĐēҁĐŋĐžŅ€Ņ‚ - %sĐ­ĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ€Đ°ĐąĐžŅ‡ŅƒŅŽ ĐēĐžĐŋĐ¸ŅŽ иĐģи Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đš ĐąĐĩС иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Đ¸ Đž вĐĩŅ€ŅĐ¸ĐžĐŊĐŊĐžŅŅ‚Đ¸Đ Đ°ŅŅˆĐ¸Ņ€ĐĩĐŊиĐĩВĐŊĐĩ҈ĐŊиĐĩ ĐŸŅ€ĐžĐŗŅ€Đ°ĐŧĐŧŅ‹Fingerprint:ЗавĐĩŅ€ŅˆĐĩĐŊоНайдĐĩĐŊĐž %d ŅĐģĐĩĐŧĐĩĐŊŅ‚ĐžĐ˛Đ˜Đˇ:ĐžĐąŅ‰Đ¸ĐĩЗабĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒĐ‘ĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēа...ВĐĩĐ´ŅƒŅ‰Đ°ŅĐŸĐžĐŧĐžŅ‰ŅŒĐĨĐžŅŅ‚:Đ˜ĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐŋŅ€ĐĩĐ´ĐēОвИĐŧĐŋĐžŅ€Ņ‚Đ˜ĐŧĐŋĐžŅ€Ņ‚ - %sИĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅĐģĐĩĐŧĐĩĐŊŅ‚ в Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸ĐšĐ’ĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ Đ¸ĐŗĐŊĐžŅ€Đ¸Ņ€ŅƒĐĩĐŧŅ‹Đĩ Ņ„Đ°ĐšĐģŅ‹Đ¯ĐˇŅ‹Đē:ĐžĐŗŅ€ĐŊĐ¸Ņ‡ĐĩĐŊиĐĩĐĄŅ‚Ņ€ĐžĐēĐ°Đ—Đ°ĐŗŅ€ŅƒĐˇĐēа...БĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ„Đ°ĐšĐģŅ‹Đ‘ĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°ĐŊĐ›ĐžĐŗĐ›ĐžĐŗ - %sĐ–ŅƒŅ€ĐŊаĐģИĐŧŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ˛Đ°Ņ‚ĐĩĐģŅ:ПоĐŧĐĩŅ‚Đ¸Ņ‚ŅŒ ĐēĐžĐŊŅ„ĐģиĐēŅ‚ ĐēаĐē ҃ĐģаĐļĐĩĐŊĐŊŅ‹ĐšĐĄĐģĐ¸Ņ‚ŅŒĐŸĐžĐŧĐžŅ‰ĐŊиĐē ĐĄĐģĐ¸ŅĐŊĐ¸ŅĐĄĐģĐ¸Ņ‚ŅŒ диаĐŋОСОĐŊ Ņ€ĐĩвиСиКХĐģĐ¸Ņ‚ŅŒ два Ņ€Đ°ĐˇĐģĐ¸Ņ‡ĐŊҋ҅ Đ´ĐĩŅ€ĐĩваХĐģĐ¸ŅĐŊиĐĩ...ĐĄĐžĐžĐąŅ‰ĐĩĐŊиĐĩĐĸиĐŋ mimeМаĐēŅĐ¸ĐŧаĐģҌĐŊŅ‹Đš ŅƒŅ€ĐžĐ˛ĐĩĐŊҌ ĐļŅƒŅ€ĐŊаĐģаДоĐŋĐžĐģĐŊĐ¸Ņ‚ĐĩĐģҌĐŊŅ‹Đĩ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ ...ПĐĩŅ€ĐĩĐŧĐĩŅŅ‚Đ¸Ņ‚ŅŒ в...Н/ДИĐŧŅĐĐžĐ˛ĐžĐĩ ĐŧĐĩŅŅ‚Đž:НовоĐĩ иĐŧŅ:ĐĐžĐ˛Ņ‹Đš...НĐĩŅ‚ĐĄĐžĐžĐąŅ‰ĐĩĐŊĐ¸Ņ ĐžĐŋОвĐĩ҉ĐĩĐŊиКХĐēĐžĐģҌĐēĐž URL'Ов СаĐŋĐžĐŧиĐŊĐ°Ņ‚ŅŒĐĄĐēĐžĐģҌĐēĐž ŅĐžĐžĐąŅ‰ĐĩĐŊиК СаĐŋĐžĐŧиĐŊĐ°Ņ‚ŅŒĐ‘ĐĩС вĐŊĐĩ҈ĐŊĐ¸Ņ… вĐēĐģŅŽŅ‡ĐĩĐŊиКĐĸĐžĐģҌĐēĐž ĐˇĐ°Ņ€ĐĩĐŗĐ¸ŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ҁĐģĐ¸ŅĐŊиĐĩĐžŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒĐžŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒ Ņ‚ĐĩŅ€ĐŧиĐŊаĐģĐžŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒ ҁ ĐŋĐĩŅ€Đ˛ĐžĐš Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸Đ¸ĐžŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒ ŅĐž Đ˛Ņ‚ĐžŅ€ĐžĐš Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸Đ¸ĐŸĐ°Ņ€ĐžĐģҌ:ĐŸĐ°Ņ‚Ņ‡ ĐŋŅ€Đ¸ĐŧĐĩĐŊĐĩĐŊĐŸĐ°Ņ‚Ņ‡ ŅĐžĐˇĐ´Đ°ĐŊĐŸŅƒŅ‚ŅŒĐŸŅ€ĐĩĐ´Ņ‹Đ´ŅƒŅ‰Đ¸Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊĐ¸ŅĐŸŅ€ĐĩĐ´Ņ‹Đ´ŅƒŅ‰Đ¸Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊĐ¸Ņ ŅƒĐ´Đ°ĐģĐĩĐŊŅ‹ĐĄĐ˛ĐžĐšŅŅ‚Đ˛Đ°ĐĄĐ˛ĐžĐšŅŅ‚Đ˛Đ° - %sĐĄĐ˛ĐžĐšŅŅ‚Đ˛ĐžĐ˜ĐˇĐŧĐĩĐŊĐĩĐŊиĐĩ ŅĐ˛ĐžĐšŅŅ‚Đ˛Đ°ĐĄĐžŅŅ‚ĐžŅĐŊиĐĩĐĄĐ˛ĐžĐšŅŅ‚Đ˛Đž:ОбĐģĐ°ŅŅ‚ŅŒ:Đ ĐĩĐēŅƒŅ€ŅĐ¸Đ˛ĐŊоОбĐŊĐžĐ˛Đ¸Ņ‚ŅŒĐžĐąĐŊĐžĐ˛Đ¸Ņ‚ŅŒ ŅŅ‚Đ°Ņ‚ŅƒŅĐ Đ°ĐˇĐąĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēа...РаСйĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅĐģĐĩĐŧĐĩĐŊŅ‚ĐŸĐĩŅ€ĐĩҁĐĩĐģĐ¸Ņ‚ŅŒĐŸĐĩŅ€ĐĩĐąĐ°ĐˇĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ€Đ°ĐąĐžŅ‡ŅƒŅŽ ĐēĐžĐŋĐ¸ŅŽĐŸĐĩŅ€ĐĩҁĐĩĐģĐ¸Ņ‚ŅŒ...ПĐĩŅ€ĐĩиĐŧĐĩĐŊĐžĐ˛Đ°Ņ‚ŅŒĐŸĐĩŅ€ĐĩиĐŧĐĩĐŊĐžĐ˛Đ°Ņ‚ŅŒ...ĐĐ´Ņ€ĐĩŅĐ° Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đĩв ŅƒĐ´Đ°ĐģĐĩĐŊŅ‹Đ ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đš ҃ҁĐŋĐĩ҈ĐŊĐž ŅĐžĐˇĐ´Đ°ĐŊĐ Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ ĐēĐžĐŊŅ„ĐģиĐēŅ‚Đ’ĐžŅŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒĐžŅ‚ĐēĐ°Ņ‚Đ¸Ņ‚ŅŒ иСĐŧĐĩĐŊĐĩĐŊĐ¸ŅĐ’ĐĩŅ€ĐŊŅƒŅ‚ŅŒ Đē Đ¸ŅŅ…ĐžĐ´ĐŊĐžĐŧ҃ ŅĐžŅŅ‚ĐžŅĐŊĐ¸ŅŽĐžŅ‚ĐŧĐĩĐŊŅĐĩŅ‚ иСĐŧĐĩĐŊĐĩĐŊĐ¸Ņ вО Đ˛ŅĐĩĐŧ Ņ‡Ņ‚Đž Đ˛Đ¸Đ´Đ¸Ņ‚Đ ĐĩĐ˛Đ¸ĐˇĐ¸ŅĐ”ĐžĐąĐ°Đ˛ĐģĐĩĐŊиĐĩ...ХОСдаĐŊиĐĩ вĐĩŅ‚Đēи/Ņ‚ŅĐŗĐ°...ИСвĐģĐĩ҇ĐĩĐŊиĐĩ Đ¸ŅŅ…ĐžĐ´ĐŊиĐēОв...ФиĐēŅĐ°Ņ†Đ¸Ņ...Đ­ĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ...ИĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ...БĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēа...ЗаĐŋ҃ҁĐē ҁĐģĐ¸ŅĐŊĐ¸ŅĐ—Đ°Đŋ҃ҁĐē Ņ‚ĐĩŅŅ‚Đ° ĐŊа ҁĐģĐ¸ŅĐŊиĐĩПĐĩŅ€ĐĩҁĐĩĐģĐĩĐŊиĐĩПĐĩŅ€ĐĩиĐŧĐĩĐŊĐžĐ˛Ņ‹Đ˛Đ°ĐŊиĐĩ...Đ Đ°ĐˇŅ€Đĩ҈ĐĩĐŊиĐĩ ĐēĐžĐŊŅ„ĐģиĐēŅ‚Đ°...Đ’ĐžŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиĐĩ Đ¸ŅŅ…ĐžĐ´ĐŊĐžĐŗĐž ŅĐžŅŅ‚ĐžŅĐŊĐ¸Ņ...ПĐĩŅ€ĐĩĐēĐģŅŽŅ‡ĐĩĐŊиĐĩĐĄĐŊĐ°Ņ‚Đ¸Đĩ ĐąĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēи...ĐĄĐžŅ…Ņ€Đ°ĐŊĐ¸Ņ‚ŅŒ ĐēаĐē...ĐĄĐžŅ…Ņ€Đ°ĐŊĐ¸Ņ‚ŅŒ Đ°ŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸ŅŽĐĄĐžŅ…Ņ€Đ°ĐŊĐĩĐŊĐŊŅ‹Đĩ даĐŊŅ‹ĐŊĐĩĐ’Ņ‹ĐąŅ€Đ°Ņ‚ŅŒ / ĐĄĐŊŅŅ‚ŅŒ Đ˛Ņ‹ĐąĐžŅ€ Đ´ĐģŅ Đ˛ŅĐĩĐŗĐžĐ’Ņ‹ĐąŅ€Đ°Ņ‚ŅŒ Ņ„Đ°ĐšĐģĐ’Ņ‹ĐąĐžŅ€ ĐēĐ°Ņ‚Đ°ĐģĐžĐŗĐ°Đ’Ņ‹ĐąĐžŅ€ ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧŅ‹ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēиПоĐēĐ°ĐˇĐ°Ņ‚ŅŒ ĐģĐžĐŗĐŸĐžĐēĐ°ĐˇĐ°Ņ‚ŅŒ ŅƒŅ‚Đ¸ĐģĐ¸Ņ‚Ņ‹ ĐžŅ‚ĐģадĐēи RabbitVCSПоĐēĐ°ĐˇĐ°Ņ‚ŅŒ ĐģĐžĐŗ Ņ„Đ°ĐšĐģаПоĐēĐ°ĐˇĐ°Ņ‚ŅŒ ĐžŅ‚ĐģĐ¸Ņ‡Đ¸Ņ ĐŧĐĩĐļĐ´Ņƒ Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸ŅĐŧиПоĐēĐ°ĐˇĐ°Ņ‚ŅŒ ĐģĐžĐŗĐŸĐžĐēĐ°ĐˇĐ°Ņ‚ŅŒ Ņ„Đ°ĐšĐģŅ‹ ĐąĐĩС вĐĩŅ€ŅĐ¸Đ¸ĐžŅ‚ĐžĐąŅ€Đ°ĐļĐĩĐŊĐŊŅ‹Đĩ Ņ€ĐĩвиСии:РаСĐŧĐĩŅ€ĐĄĐžŅŅ‚ĐžŅĐŊиĐĩĐĄĐēŅ€Ņ‹Ņ‚ŅŒ ĐąĐģĐžĐēĐ¸Ņ€ĐžĐ˛ĐēĐ¸ĐžŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒŅŅ ĐŊа ĐēĐžĐŋĐ¸Ņ€ĐžĐ˛Đ°ĐŊииПĐĩŅ€ĐĩĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒĐŸĐĩŅ€ĐĩĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ...ĐŸŅ€ĐžĐąĐŊĐžĐĩ ҁĐģĐ¸ŅĐŊиĐĩĐĸĐĩĐēŅŅ‚ĐĄĐžŅŅ‚ĐžŅĐŊиĐĩ Ņ‚ĐĩĐēŅŅ‚Đ°ĐĄĐŋĐ°ŅĐ¸ĐąĐž:МĐĩĐŊŅŽ ĐžŅ‚ĐģадĐēи Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚ŅŅ Đ´ĐģŅ Đ´Đ¸Đ°ĐŗĐŊĐžŅŅ‚Đ¸Đēи ĐŊĐĩĐŋĐžĐģадОĐē RabbitVCSПоĐģŅ URL и ĐžŅ‚ - ĐžĐąŅĐˇĐ°Ņ‚ĐĩĐģҌĐŊŅ‹ĐĐ°Ņ‡Đ°ĐģҌĐŊĐ°Ņ Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸Ņ Đ´ĐžĐģĐļĐŊĐž ĐąŅ‹Ņ‚ŅŒ ҆ĐĩĐģĐžĐĩ Ņ‡Đ¸ŅĐģоЗадаĐŊĐŊŅ‹Đš ĐŋŅƒŅ‚ŅŒ ĐŊĐĩ ŅĐ˛ĐģŅĐĩŅ‚ŅŅ Ņ€Đ°ĐąĐžŅ‡ĐĩĐš ĐēĐžĐŋиĐĩКЭĐģĐĩĐŧĐĩĐŊ҂ҋ ĐąŅƒĐ´ŅƒŅ‚ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊŅ‹ в ĐēĐžŅ€ĐˇĐ¸ĐŊŅƒĐĐžĐ˛ĐžĐĩ иĐŧŅ ĐžĐąĐ°ĐˇŅŅ‚ĐĩĐģҌĐŊĐž!ПоĐģŅ URL Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Ņ и ĐŋŅƒŅ‚ŅŒ ĐŊаСĐŊĐ°Ņ‡ĐĩĐŊĐ¸Ņ - ĐžĐąŅĐˇĐ°Ņ‚ĐĩĐģҌĐŊŅ‹.ПоĐģĐĩ URL - ĐžĐąŅĐˇĐ°Ņ‚ĐĩĐģҌĐŊĐžĐŖĐēаĐļĐ¸Ņ‚Đĩ Đ°Đ´Ņ€Đĩҁ Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸ŅĐžŅˆĐ¸ĐąĐēа ĐŋŅ€Đ¸ ŅĐžĐˇĐ´Đ°ĐŊии Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Ņ. ĐŖĐąĐĩĐ´Đ¸Ņ‚ĐĩҁҌ Ņ‡Ņ‚Đž ĐŋаĐŋĐēа ĐŋŅƒŅŅ‚Đ°.В:ĐĸиĐŋ:URL/ĐŸŅƒŅ‚ŅŒ:URL:РаСйĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒĐžĐąĐŊĐžĐ˛Đ¸Ņ‚ŅŒĐžĐąĐŊĐžĐ˛Đ¸Ņ‚ŅŒ Đ´Đž Ņ€ĐĩвизииОбĐŊĐžĐ˛Đ¸Ņ‚ŅŒ Ņ„Đ°ĐšĐģ Đ´Đž ĐžĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊĐŊОК Ņ€ĐĩвизииОбĐŊĐžĐ˛Đ¸Ņ‚ŅŒ Ņ€Đ°ĐąĐžŅ‡ŅƒŅŽ ĐēĐžĐŋĐ¸ŅŽĐžĐąĐŊĐžĐ˛Đ¸Ņ‚ŅŒ Đ´Đž Ņ€ĐĩвиСии...ОбĐŊОвĐģĐĩĐŊиĐĩ...Đ˜ŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ диаĐģĐžĐŗ ĐģĐžĐŗĐ° Đ´ĐģŅ Đ˛Ņ‹ĐąĐžŅ€Đ° Ņ€ĐĩвиСиК Đ´ĐģŅ ҁĐģĐ¸ŅĐŊĐ¸Ņ. ИĐģи вĐŋĐ¸ŅˆĐ¸Ņ‚Đĩ Ņ€ĐĩвиСии Đ˛Ņ€ŅƒŅ‡ĐŊŅƒŅŽ ҇ĐĩŅ€ĐĩС СаĐŋŅŅ‚ŅƒŅŽ. Đ’Ņ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ҃ĐēĐ°ĐˇĐ°Ņ‚ŅŒ диаĐŋаСОĐŊ ҇ĐĩŅ€ĐĩС Ņ‚Đ¸Ņ€Đĩ ĐŸŅ€Đ¸ĐŧĐĩŅ€: 4-7,9,11,15-HEAD ĐžŅŅ‚Đ°Đ˛ŅŒŅ‚Đĩ ĐŋŅƒŅŅ‚Ņ‹Đŧ Đ´ĐģŅ ҁĐģĐ¸ŅĐŊĐ¸Ņ Đ˛ŅĐĩŅ… Ņ€ĐĩвиСиК.ДĐĩĐšŅŅ‚Đ˛Đ¸Ņ‚ĐĩĐģĐĩĐŊ:ЗĐŊĐ°Ņ‡ĐĩĐŊиĐĩЗĐŊĐ°Ņ‡ĐĩĐŊиĐĩ:ПоĐēĐ°ĐˇĐ°Ņ‚ŅŒ ĐžŅ‚ĐģĐ¸Ņ‡Đ¸Ņ ĐŧĐĩĐļĐ´Ņƒ Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸ŅĐŧĐ¸ĐŸĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ ĐŋĐžĐŧĐžŅ‰ŅŒĐŸŅ€ĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ иĐģи иСĐŧĐĩĐŊĐ¸Ņ‚ŅŒ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи RabbitVCSĐŸŅ€ĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ diffĐšŅƒĐ´Đ° Đ˛Ņ‹ Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ҁĐēĐžĐŋĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Đ˛Ņ‹Đ´ĐĩĐģĐĩĐŊĐŊĐžĐĩ?ĐšŅƒĐ´Đ° Đ˛Ņ‹ Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ĐŋĐĩŅ€ĐĩĐŧĐĩŅŅ‚Đ¸Ņ‚ŅŒ Đ˛Ņ‹Đ´ĐĩĐģĐĩĐŊĐŊĐžĐĩ?Đ”Đ°Đ’Ņ‹ Đ´ĐžĐģĐļĐŊŅ‹ ĐˇĐ°Đ´Đ°Ņ‚ŅŒ ĐŋŅƒŅ‚ŅŒ ĐŊаСĐŊĐ°Ņ‡ĐĩĐŊĐ¸Ņ.ĐŋŅ€ŅĐŧĐž ҁĐĩĐšŅ‡Đ°ŅĐ˛Ņ‹ĐąŅ€Đ°ĐŊĐŊŅ‹Đĩ ŅĐģĐĩĐŧĐĩĐŊŅ‚Ņ‹Đ´Đžrabbitvcs-0.19/locale/sk/000077500000000000000000000000001445560650400153075ustar00rootroot00000000000000rabbitvcs-0.19/locale/sk/LC_MESSAGES/000077500000000000000000000000001445560650400170745ustar00rootroot00000000000000rabbitvcs-0.19/locale/sk/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000376061445560650400212240ustar00rootroot00000000000000Ū•úėQŧ &<1W‰›¸Íâ(ō 1>Rix-‡6ĩė$*ARdzŠĄ&´Ûî"76Hn-ˇå  *6= A LZm v„ ”? 6ā5"Mp"ĸŠ ˛ Ā ĘÔŲ0õ&8Q ZphVŲ0FU2]%ļ&Ŋ äō(9JYi~‘ĸ´ÅÖį ø2'Zq‘–œŖˇÕÚâņ'/ 6BB … ĄŽˇČÎÖßäéī˙   3 I T \ f m r }  › ĸ Ļ ¯ ˇ "ž á į ÷ !,!5!=!A! F!P!W!m!ˆ!§!Ŋ! Â! Í!×!Ü!î! ""#"," <" F"P" W"a"i"x"ˆ" "Š" Ä"Đ" ×"á"ú"#"#*#&1#X#s#|#“#¯#É#ã#ũ#$+$>$Z$t$$Š$Ã$Ũ$ ņ$ü$ % %0%A%J%S%\%s%†%% %Ē% ą% ģ%Æ% Ë%×%*ß% &Q)&{&& …&&”&œ&Ŗ&Ē&$Ŋ&â&ø& ''!''' .'!8'%Z'€'Ÿ'#Ŗ'Į'Ü'âß'Â)Ķ)×)î)*1#*U*'j*’*Ž* Ā*%Í*ķ* ++ ,+M+ \+4j+7Ÿ+×+5÷+-,D,U,h,,,¨,%ģ,á,ö,-*-7A-By--ŧ-$ę-. ..-.?.E. M.Z. o. .œ.Ŧ.ŋ.>Î.A /=O/%/ ŗ/Á/á/į/ ī/ũ/ 00$00B0s0Œ0 Ģ0¸0oĘ0Y:1”1°1 ŋ1AÉ1% 2 12;2[2o2‡2œ2˛2Ä2Ö2ë23353N3c3v3Œ3Ŗ3 Ŋ3Č3ā31÷3)4"B4e4l4 ~4Š4"Ÿ4 Â4 Í4Ú4ė4%5.575 >5GJ5 ’5Ÿ5ą5 Â5Î5į5 ė5ø56 6 66*6 16#=6a66‡66—6ž6Ĩ6´6Í6 ß6é6 ņ6 ū6 7,7 L7W7l7!Š7 Ŧ7š7Â7Æ7 Í7Ú7ã7 ÷7858L8U8d8k8q8"Š8 ­8¸8 Č8 Ķ8 ā8 ė8ö8 ˙8 9 9"959 P9#]99 ‘9 9Š9Č9 č9ō9û9+:.:I:R:q: ‘:˛:"Ī:ō: ;3;&N;%u;›;ģ;×; ÷;<*<;< V<c<t< „<<Ą<˛<Ō<æ<ë<ü< = ==/= 4= ?=#L="p=^“=ō=ö= ú=> > > >,>*C>n>>¤>ĩ>ž>Æ>Ī>+ã>?+?H?!L?n?ƒ?†ˆ!Áo/GŪ^ īĶ?€ļy9ĪNđ›O‚`FîÄV•Ÿŗ8&Åtģan+RįĘ÷™"é1ŽõqãŖW23ßHž,wĒBQ@g}zúͨ­T5Ųˇ‰Š_ÃE“ ëĢĐ×-6œę‹Æ°ÕÉ{æōĖ’čÎmąu¯ķrĀ 4š…”öˊÚ*.„‡ĩŦ˛iÔeIsÛ hcĸY7–>M%xjUb#ŌĄ= ¤S˜Į]ᎧŅ[DÜŋ:ŨņŊē$ĻkôŒK|(JÖP<‘Cƒ´L āXd⸗\0Ĩ vøíäŧ~šėAlž'p;ZČ)åfų؍%s - Finished100Add MessageAuthenticationCertificate DetailsChange the repository of your working copyCommit to:Edit Property DetailsFiles to lockFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageOptionsPlease add your authentication detailsPlease describe why you are locking these filesPrevious MessagesProgram used to compare filesProperties for:RabbitVCSRepositoryRevision RangeRevisionRevisions TableTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromVersion InformationWorking CopySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd an emblemAdd to ignore listAnnotateAnnotate - %sAnnotate a fileAnnotate...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tag...Browse toBrowse...BugsCannot annotate a directoryChange the repository location of a working copyCheck CertificateCheck out a working copyCheckoutCheckout - %sChoose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationCommitCommit modifications to the repositoryCompleted AddCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationCopy From PathCopy From RevisionCopy an item to another location in the repositoryCreate Repository hereCreate a repository in a folderDateDebugDeleteDelete ConfirmationDelete properties recursivelyDenyEdit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExtensionExternal ProgramsFingerprint:FinishedFound %d item(s)From:GeneralGet LockHEADHelpHost:Ignore ancestryImportImport - %sImport an item into a repositoryInclude ignored filesInvalidateIssuer:Language:Limit:LineLoading...Locally lock itemsLock FilesLockedLogLog - %sLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MessageN/ANameNew Name:New...Notification MessagesNumber of URLs to rememberNumber of messages to rememberOnly record the mergeOpenOpen ShellPassword:PathPrevious MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty StatusProperty:RabbitVCSRealm:RecursiveRefreshRefresh StatusRelease Lock...Release lock on an itemRelocateRelocate your working copyRelocate...RenameRename...Repository paths clearedRepository successfully createdResolveRestoreRevertRevert an item to its unmodified stateReverts everything it seesRevisionRunning Add Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...Save AuthenticationSaved DataSelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow LogShow logShow unversioned filesShowing Revisions:StatusSteal the locksStop on copySwitchSwitch...Test MergeTextText StatusThanks:The item(s) will be sent to the trash can.The new name field is requiredThere was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:UnknownUnlockUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...Updating...Valid:ValueValue:View helpView or change RabbitVCS settingsView the modifications made to a fileView the properties of an itemYesYou must supply a destination path.the selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-02-09 10:19+0000 Last-Translator: FULL NAME Language-Team: Slovak MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %s - DokončenÊ100PridaÅĨ sprÃĄvuAutentizÃĄciaPodrobnosti certifikÃĄtuZmeniÅĨ repozitÃĄr vaÅĄej pracovnej kÃŗpieOdovzdaÅĨ do:UpraviÅĨ vlastnosÅĨ podrobnostíSÃēbory na zamknutieZ Revíziez URLOd: (URL a revíziu zlÃēčiÅĨ)Import sprÃĄvyLinkyZÃĄznam sprÃĄvMoÅžnosti zaznamenÃĄvaniaSprÃĄvaVoÄžbyProsím pridajte vaÅĄe podrobnosti o overeníOpÃ­ÅĄte prosím, prečo tieto sÃēbory zamykÃĄtePredchÃĄdzajÃēce sprÃĄvyProgram pouŞívanÃŊ na porovnÃĄvanie sÃēborovVlastnosti pre:RabbitVCSRepozitÃĄreRozsah revízieRevíziaRevízna tabuÄžkaDo RevízieDo: (URL a revíziu zlÃēčiÅĨ)URL HistÃŗriaURL zlÃēčiÅĨ odInformÃĄcie o verziiPracovnÃĄ kopiaVybranÊ vlastnosti budÃē pouÅžitÊ rekurzívne.Naozaj chcete zmazaÅĨ %poloÅžku%?RabbitVCSA sprievodca s krokmi pre zlÃēčenieOO RabbitVCSPrijaÅĨ navÅždyPrijaÅĨ iba terazAkciaPridaÅĨPridaÅĨ znakPridaÅĨ nejakÃŊ znakPridaÅĨ do zoznamu ignorovanÃŊchKomentovaÅĨKomentovaÅĨ -%sKomentovaÅĨ sÃēborKomentovaÅĨ...Ste si istí, Åže chcete vymazaÅĨ vaÅĄe autentizačnÃŊ Ãēdaje?Ste si istÃŊ, Åže chcete vymazaÅĨ vaÅĄe predchÃĄdzajÃēce sprÃĄvy?Ste si istí, Åže chcete vymazaÅĨ vaÅĄu cestu k repozitÃĄrom?Ste si istÃŊ Åže chcete pokračovaÅĨ?AutentizÃĄciaAutentizačnÃŊ Ãēdaje vymazanÊAutorAutori:Branch/tag...PrehÄžadÃĄvaÅĨPrehÄžadÃĄvaÅĨ...ChybyNemoÅžno komentovaÅĨ adresÃĄrZmeniÅĨ umiestnenie repozitÃĄra pracovnej kÃŗpieSkontrolujte CertifikÃĄtPozrite sa na pracovnÃē kÃŗpiuVyskÃēÅĄanieVyskÃēÅĄanie - %sVyberte tÃēto moÅžnosÅĨ, ak ste urobili nejakÊ zmeny vo vetvÃĄch a chcete zlÃēčiÅĨ vaÅĄe zmeny s inou vetvou.Vyberte tÃēto moÅžnosÅĨ, ak chcete zlÃēčiÅĨ dve rôzne vetvy do vaÅĄej pracovnej kÃŗpie.VyčistiÅĨ pracovnÃē kÃŗpiuVyčistenÊ...ČisteniePoÅžadovanÊ čistenie.... Otvorenie pracovnej kÃŗpie čistenia?VymazaÅĨ vaÅĄe overovacie informÃĄcieOdovzdaÅĨReÅĄpektovaÅĨ zmeny repozitÃĄraPridanie ukončenÊVyskÃēÅĄanie ukončenÊČistenie ukončenÊOdovzdanie ukončenÊExport ukončenÃŊImport ukončenÃŊZamknutie ukončenÊZlÃēčenie ukončenÊTest zlÃēčenia ukončenÃŊPremiestnenie ukončenÊPremenovanie dokončenÊRieÅĄenie ukončenÊNÃĄvrat ukončenÃŊPrepnutie dokončenÊOdomknutie dokončenÊAktualizÃĄcia dokončenÃĄPotvrdenieKopírovaÅĨ zo zÃĄznamuKopírovaÅĨ z revízieKopírovaÅĨ poloÅžku na inÊ miesto v repozitÃĄriVytvoriÅĨ repozitÃĄre tuVytvoriÅĨ repozitÃĄre v priečinkuDÃĄtumSprÃĄva o ladeníOdstrÃĄniÅĨOdstrÃĄÅˆ potvrdenieOdstrÃĄniÅĨ vlastnosti rekurzívneOdmietnuÅĨEditovaÅĨ...PovoliÅĨ emblÊmyPovoliÅĨ atribÃēty sÃēborovPovoliÅĨ kontrolu rekurzívneho stavuAnglickyExportExport - %sExportovaÅĨ pracovnÃē kÃŗpiu alebo repozitÃĄre bez informÃĄcie o verziiRozÅĄÃ­renieExternÊ programyOdtlačok prsta:DokončenÊNÃĄjdenÃĄ %d poloÅžka(y)Z...VÅĄeobecnÊZamkniteHEADPomocníkHostiteÄž:IgnorovaÅĨ rodImportImport - %sImportovaÅĨ poloÅžky do repozitÃĄraZahrnÃēÅĨ ignorovanÊ sÃēboryZruÅĄÃ­Emitent:Jazyk:Limit:RiadokNačítavam...LokÃĄlny zÃĄmok poloÅžkyZamknÃēÅĨ sÃēboryZamknutÃŊZÃĄznamZÃĄznam - %sPrihlÃĄseniePrihlasovacie meno:OznačiÅĨ poloÅžku v rozpore ako vyrieÅĄenÃēZlÃēčenieZlÃēčiÅĨ pomocníkaZlÃēčiÅĨ niekoÄžko revíziíZlÃēčenie dvoch rôznych stromovZlÃēčiÅĨ...SprÃĄavaN/ANÃĄzovNovÃŊ nÃĄzovNovÃŊ...Oznamovacie SprÃĄvyPočet adries URL k zapamätaniuPočet sprÃĄv k zapamätaniuIba zÃĄznam zlÃēčeniaOtvoriÅĨOtvoriÅĨ shellHeslo:CestaPredchÃĄdzajÃēca sprÃĄvaPredchÃĄdzajÃēce sprÃĄvy vymazanÊVlastnostiVlastnosti - %sVlastnosÅĨStav objektuVlastnosÅĨ:RabbitVCSOblasÅĨ:RekurzívnyObnoviÅĨObnoviÅĨ stavVydanie zÃĄmku ...Vydanie zÃĄmku na poloÅžkuPremiestniÅĨPremiestniÅĨ vaÅĄu pracovnÃē kÃŗpiuPremiestniÅĨ...PremenovaÅĨPremenovaÅĨCesta k repozitÃĄrom vymazanÃĄRepozitÃĄr ÃēspeÅĄne vytvorenÃŊRieÅĄenieObnoviÅĨSpäÅĨVrÃĄtiÅĨ poloÅžku do jej nezmenenÊho stavuVrÃĄti vÅĄetko viditeÄžnÊRevíziaSpÃēÅĄÅĨam príkaz na pridanieSpÃēÅĄÅĨam test na vyskÃēÅĄanieSpÃēÅĄÅĨam príkaz na odovzdanieSpÃēÅĄÅĨam príkaz na exportSpÃēÅĄÅĨam príkaz na importovanieSpÃēÅĄÅĨam príkaz na zamknutieSpÃēÅĄÅĨam príkaz na zlÃēčenieSpÃēÅĄÅĨam test zlÃēčeniaSpÃēÅĄÅĨam príkaz na premiestnenie...SpÃēÅĄÅĨam príkaz na premenovanie...SpÃēÅĄÅĨam príkaz na rieÅĄenieSpÃēÅĄÅĨam spätnÃŊ príkazSpÃēÅĄÅĨam príkaz na prepnutieSpÃēÅĄÅĨam príkaz na odomknutieUloÅžiÅĨ overenieUloÅženÊ ÃēdajeVybraÅĨ / ZruÅĄiÅĨ vÅĄetkoVyber sÃēborVyber priečinokVyberte programNastaveniaZobraziÅĨ zÃĄznamUkÃĄzaÅĨ zÃĄznamZobraziÅĨ neverziovanÊ sÃēboryZobraziÅĨ revízie:StavPrevziaÅĨ zÃĄmkyStop na kÃŗpiuPrepnÃēÅĨPrepni...Test zlÃēčeniaTextStav textuPoďakovaniePoloÅžka(y) bude zaslanÃĄ do koÅĄa.VyÅžadovanÃŊ je novÃŊ nÃĄzov poÄžaDoÅĄlo ku chybe pri vytvÃĄraní repozitÃĄra. Uistite sa, či je prísluÅĄnÃĄ zloÅžka prÃĄzdna.Do:TypURL/Cesta:URL:NeznÃĄmeOdomknÃēÅĨAktualizÃĄciaAktualizovaÅĨ revíziuAktualizÃĄcia sÃēboru do určenej revízieAktualizovaÅĨ pracovnÃē kÃŗpiuAktualizÃĄcia revízieAktualizÃĄcia...PlatnÊ:HodnotaHodnota:PozrieÅĨ pomocníkaPozrieÅĨ alebo zmeniÅĨ nastavenia RabbitVCSZobrazenie zmien do sÃēboruPozrieÅĨ vlastnosti poloÅžkyAnoMusíte zadaÅĨ cieÄž umiestnenia.vybranÃĄ poloÅžka(y)dorabbitvcs-0.19/locale/sl/000077500000000000000000000000001445560650400153105ustar00rootroot00000000000000rabbitvcs-0.19/locale/sl/LC_MESSAGES/000077500000000000000000000000001445560650400170755ustar00rootroot00000000000000rabbitvcs-0.19/locale/sl/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000100701445560650400212070ustar00rootroot00000000000000Ū•FLa| 6-5d š Ĩ¯ ¸ÆÕŨ äō(9JYk| œŖ Ē ļĀÉÚāéî õ  " *48=B\l…Ĩ­ĩŧĶī  ' 8 A H M Y ] d k w } # Ĩ ū¨ § ¸ Ā Æ ?ß = ] l "s '– ž Í Ö Ũ 7ņ ) A V g w Ž Ļ ŧ Đ į đ ÷  04HM S ^ l w„ Š •  Ŧ˛ļÕæ$+2.Hw‡ ™Ĩ´ÄÍÖæęōû 6>%&:1.'87/,(? $B- # 9C56* 3< ;!0 2"DA+E@)=4F%s - FinishedActionAddAdd to ignore listAre you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Branch/tagBrowse toCheckoutCheckout - %sCleaning Up...CleanupCommitCompleted AddCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted ResolveCompleted UpdateCopy From RevisionCreate PatchDeleteExportExport - %sExtensionFinishedFound %d item(s)From:Get LockHEADImportImport - %sLoading...LockedLog - %sMergeMessageMime TypeN/ANamePathPrevious messages clearedProperty StatusRepository paths clearedRepository successfully createdResolveRestoreRevertRunning Add Command...Running Checkout Command...Running Commit Command...Select a FileSelect a FolderSelect a programShow logSwitchTextText StatusTo:UnlockUpdateUpdating...ValueYesYou must supply a destination path.toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-02-09 10:19+0000 Last-Translator: FULL NAME Language-Team: Slovenian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0); X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %s - ZaključenoDejanjeDodajDodaj na seznam 'ignore'Ali ste prepričani, da Åželite izbrisati prejÅĄnja sporočila?Ali ste prepričani, da Åželite izbrisati poti repozitorijev?Vejitev/oznakaBrskajPoveÅži in pridobi iz repozitorijaPoveÅži in pridobi iz repozitorija - %sČiÅĄÄenje...PočistiPotrdiKončano dodajanje.Povezovanje z repozitorijem in pridobivanje zaključenoČiÅĄÄenje zaključenoKončano potrjevanjeIzvoz zaključenUvoz zaključenZaklepanje zaključenoRazreÅĄitev zaključenaPosdabljanje končanoKopiraj iz revizijeIzdelaj obliÅž (patch)IzbriÅĄiIzvoziIzvozi - %sKončnicaZaključenoNajdeno %d element(ov)Od:Prevzami zaklepanjeHEADUvoziUvozi - %sNalaganje ...ZaklenjenoDnevnik - %sSpojiSporočiloVrsta MIMENi na voljoNazivPotPrejÅĄnja sporočila izbrisanaStanje lastnostiPoti repozitorijev izbrisane.Repozitorij je izdelanRazreÅĄiObnoviPovrniZaganjam dodajanje...Povezovanje z repozitorijem in pridobivanje...Zaganjam PotrdiIzberite datotekoIzberi mapoIzberi programPokaÅži dnevnikPreklopiBesediloStanje besedilaZa:OdkleniPosodobiPosodabljanje ...VrednostDaDoločiti morate ciljno pot.vrabbitvcs-0.19/locale/sr/000077500000000000000000000000001445560650400153165ustar00rootroot00000000000000rabbitvcs-0.19/locale/sr/LC_MESSAGES/000077500000000000000000000000001445560650400171035ustar00rootroot00000000000000rabbitvcs-0.19/locale/sr/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000023571445560650400212260ustar00rootroot00000000000000Ū•œxy€ „— œĻ¯ ´ ŋ ËÕÚãč í  & B MXkz• Š ĩÂĶ ä    ActionAddApply PatchAuthorDateExtensionFinishedLineLoading...Log MessageMime TypePathRevisionSizeTextProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-06-24 21:05+0000 Last-Translator: Đ˜ĐŗĐžŅ€ МиĐģОваĐŊĐžĐ˛Đ¸Ņ› Language-Team: Serbian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) АĐēŅ†Đ¸Ņ˜Đ°Đ”ĐžĐ´Đ°Ņ˜ĐŸŅ€Đ¸ĐŧĐĩĐŊи СаĐēŅ€ĐŋŅƒĐŅƒŅ‚ĐžŅ€Đ”Đ°Ņ‚ŅƒĐŧĐŸŅ€ĐžŅˆĐ¸Ņ€ĐĩҚĐĩĐ—Đ°Đ˛Ņ€ŅˆĐĩĐŊĐ ĐĩĐ´ĐŖŅ‡Đ¸Ņ‚Đ°Đ˛Đ°Đŧ...Đ›ĐžĐŗ ĐŋĐžŅ€ŅƒĐēаMIME Ņ‚Đ¸ĐŋĐŸŅƒŅ‚Đ°ŅšĐ°Đ ĐĩĐ˛Đ¸ĐˇĐ¸Ņ˜Đ°Đ’ĐĩĐģĐ¸Ņ‡Đ¸ĐŊаĐĸĐĩĐēҁ҂rabbitvcs-0.19/locale/sv/000077500000000000000000000000001445560650400153225ustar00rootroot00000000000000rabbitvcs-0.19/locale/sv/LC_MESSAGES/000077500000000000000000000000001445560650400171075ustar00rootroot00000000000000rabbitvcs-0.19/locale/sv/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000522011445560650400212230ustar00rootroot00000000000000Ū•GT ˇŒhix‰žąÆ× čöú; I_1z8Ŧå÷)<Q(aŠ  ­ÁØį-ö6$[$t™°ÁĶéų&#J]v‘ĻHē- 1 Q W g v ‚ ‰  ˜ Ļ š  Đ ā ė ?!6G!5~!"´!×!"æ! "" " $" 2" <"F"K"0g"˜"Ē"Ã" Ė"pÚ"VK#ĸ#¸#Į#2Ī#%$($&/$V$l$~$)“$Ŋ$Ī$î$ %%+%>%P%a%r%ƒ%’%ĸ%ˇ%Ę%Û%í%ū%& & 1&>&M&`&2v& Š&´&Å&Ü&ü& '' '%','@'^' c' p'|'‹'œ'°'Ė'Ô'ã'ú'(!( ((B4( w( (‹("( Ā(Í()Ö()))) ()4)9)>)D)T) [) g)ˆ) ž)Š) ą)ģ)Â) Į) Ô)ß) ō)ũ)** **%*",*O*U*e*€*š*Ŗ* Ģ*ĩ*Ę* Ú*å*é* î* ü*+ ++&+-+H+g+v+Œ+ ‘+ œ+Ļ+Ģ+ą+Ã+ Ũ+č+ø+,,!, 1, ;,E,U, \,f,n,},,Ĩ,Ž, É,Õ, Ü,æ,˙,-(-0-8-O-&V-}-˜- Ą-Ģ-Â-ā-ü-.0.J.b.x.‹.§.Á.Ü.ö./ */5/ I/2T/0‡/¸/ Î/Ü/ė/ũ/000>0\0{0„0›0Ž0ŗ0ē0 Ę0×0 Ū0 č0ķ0 ø01- 1*:1$e1*Š1ĩ1AÔ1%2,<2+i2Q•2į2ë2 ņ2û23333$)3N3d3 z3ú†34ˆ4Ž4•4#Ŧ4Đ4ī45 +5!55&W5%~5;¤5ā5 ˙5 6#646I6×L6$848G8[8q8‡8 š8 ¨8ļ8ē8EĐ89+9(E9n9„9!˜9ē9Ņ9á9÷9.:7:S:b:y::ĸ:(´:,Ũ: ;4*;_;w; ˆ;•;Ē;ē;Ņ;.æ;<)<I<d<x<N‹<-Ú<*=3= 6=C=Y=l= u=€=’=¨= Ä=Î=Ũ= ī=#ũ=B!>>d>;Ŗ>)ß> ? ? 8? D? Q? [? h? v?‚?'‰?*ą?Ü?ķ? @ @m@QŠ@Ü@ ō@A4A;A[AbAA—AĢA&ÂAéA"ūA!B:BNBcBrBƒB’B¤BļBĘBŨBøBC #C0CDCSCdC xC…CœC˛C/ËCûC DD*D DDRDXD`DrDzDŽDŽDŗDÄDĶDåDũD#E TfT|TŌ siĘWF+öL”%‹¨úņvDeo;%‡Æ5†+šj1?,2BŠ„ž-Y¤$V,4td‚šÄĪØwã6&K§=/M.æD } Eģn˙aė#>*kb\{ũŒ ÚŊ¯Eî]3*å3Á?Č|ƒō͉Gô(á'Ū<[¸_Ņr›;Ą pql×øĐ‘Ãļę^Q~!–—ÖZđTųĨ"f­HO2<īΟ4ŧēË'õ(5ĢCJ:œ÷hNäą Ô1˛8.:…ĸARgíÜ™0ūÂŗŨ $8˜ÕÉĮuF=A/0 ဎŖ S6• @ ü7@c9ķ)xI9ĩC’žÛĀĻ“X°âßé#Ŧ  ŽāˆŽ)-yUŠ´>z7Åč&BP`ŋĒĖŲĶ"ûëGm!%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished100Add MessageAffected File(s) (double-click to compare with base)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Commit to:Edit Property DetailsFiles to lockFolder NameFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageOptionsPlease add your authentication detailsPlease describe why you are locking these filesPrevious MessagesProgram used to compare filesProperties for:RabbitVCSRepositoryRevision RangeRevisionRevisions TableTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromVersion InformationWorking Copy:Working CopyAre you sure you want to delete %item%?RabbitVCSA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd an emblemAdd to ignore listAnnotateAnnotate - %sAnnotate a fileAnnotate...Apply property recursivelyAre you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBranch/tag...Browse toBrowse...BugsCannot annotate a directoryChange the repository location of a working copyCheck CertificateCheck out a working copyCheckoutCheckout - %sChoose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationCommitCommit modifications to the repositoryCompare files/foldersCompare revisionsCompare side by sideCompare the differences between two itemsCompare with baseCompare with previous revisionCompare with working copyCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationCopy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to...Create Folder...Create Repository hereCreate a repository in a folderCreate folder...DateDebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDenyDiff Menu...Edit authorEdit author...Edit log messageEdit log message...Edit revision properties...Edit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternal ProgramsFile is not under version control.Fingerprint:FinishedForce an invalidate_extension_info() callFound %d item(s)From:GeneralGet LockGet Lock...HEADHelpHost:Ignore ancestryImportImport - %sImport an item into a repositoryInclude ignored filesInvalidateIssuer:Language:Limit:LineLoad/RefreshLoading...Locally lock itemsLock FilesLockedLogLog - %sLog MessageLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MessageMime TypeMinimum level to logMore Actions...Move to...N/ANameNew Location:New Name:New...NoNotification MessagesNumberNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen ShellPassword:PathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty ChangeProperty EditorProperty StatusProperty:RabbitVCSRabbitVCS ErrorRealm:RecursiveRefreshRefresh StatusRelease Lock...Release lock on an itemRelocateRelocate your working copyRelocate...RenameRename...Repository paths clearedRepository successfully createdReservedResolveRestoreRestore a missing itemRevertRevert an item to its unmodified stateReverts everything it seesRevisionRevision:Running Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...Save As...Save AuthenticationSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow Changes...Show LogShow RabbitVCS debugging toolsShow a file's log informationShow changes between revisionsShow logShow unversioned filesShowing Revisions:SizeStatusSteal the locksStop on copySwitchSwitch...Test MergeTextText StatusThanks:The from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There was a problem saving your properties.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:UnknownUnlockUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...Updating...Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.Valid:ValueValue:View diff against baseView diff against previous revisionView diff against working copyView diff between files/foldersView diff between revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemWorking CopyYesYou must supply a destination path.the selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-04-13 19:52+0000 Last-Translator: Andreas Dahlberg Language-Team: Swedish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %i dag%i dagar%i timme%i timmar%i minut%i minuter%i mÃĨnad%i mÃĨnader%i sekund%i sekunder%i vecka%i veckor%i ÃĨr%i ÃĨr%s - Färdigt100Lägg till MeddelandePÃĨverkade filer (dubbelklicka fÃļr att jämfÃļra med grunden)AutentiseringCertifikatdetaljerÄndra arkiv till din arbetskopiaÄndrade filerSkicka till:Redigera egenskapsdetaljerFiler att lÃĨsaMappnamnFrÃĨn revisionFrÃĨn URLFrÃĨn: (URL och revision sammanfogning)Importera meddelandeLänkarLoggmeddelandenLogg alternativMeddelandeAlternativLägg till autentiseringsdetaljerBeskriv varfÃļr du lÃĨser dessa filerFÃļregÃĨende MeddelandenProgram som används fÃļr att jämfÃļra filerEgenskaper fÃļr:RabbitVCSArkivRevisionsspanRevisionRevisionstabellTill revisionTill: (URL och revision att sammanfoga)URL HistorikURL att sammanfoga frÃĨnVersionsinformationArbetskopia:ArbetskopiaÄr du säker pÃĨ att du vill ta bort %item%?RabbitVCSEn guide med ÃĨtgärder fÃļr sammanfogningOmOm RabbitVCSAcceptera fÃļr alltidAcceptera en gÃĨngÅtgärdLägg tillLägg till emblemLägg till ett emblemLägg till ignoreringslistaKommentarKommentar - %sKommentera en filKommentera...Verkställ inställningar rekursivtÄr du säker pÃĨ att du vill rensa din autentiseringsinformation?Är du säker pÃĨ att du vill rensa dina tidigare meddelanden?Är du säker pÃĨ att du vill rensa dina arkivs sÃļkvägar?Är du säker pÃĨ att du vill fortsätta?AutentiseringAutentiseringsinformation rensadFÃļrfattareUpphovsmän:Gren/taggGren/tagg...Bläddra tillBläddra...BuggarDet gÃĨr inte att kommentera en katalogÄndra arkivets plats fÃļr en arbets kopiaKontrollera certifikatHämta en arbetskopiaHämtaHämta - %sVälj denna metod om du har gjort ändringar i en gren och vill sammanfoga dina ändringar med en annan gren.Välj den här metoden om du vill sammanfoga tvÃĨ olika grenar i din arbetskopia.Rensa upp arbetskopiaRensar upp...RensaRensning begärd .... BÃļrja rensa i arbets kopian?Rensa autentiseringsinformationSkickaSkicka ändringar till arkivetJämfÃļr filer/mapparJämfÃļr revisionerJämfÃļr sida vid sidaJämfÃļr skillnaden mellan tvÃĨ objektJämfÃļr med grundenJämfÃļr med fÃļregÃĨende revisionJämfÃļr med arbetskopiaFärdig Lägga tillFärdig Gren/tagg...Färdig HämtaRensning färdigFärdig SkickaFärdig ExporteraFärdig ImporteraFärdig Hämta lÃĨsFärdig SammanfogaFärdig SammanfogningstestOmlokalisering färdigNamnbyte genomfÃļrtFärdig LÃļsFärdig ÅterställFärdig VäxlaFärdig LÃĨs uppUppdatering färdigBekräftelseKopiera frÃĨn sÃļkvägKopiera frÃĨn versionKopiera URL till urklippKopiera et objekt till en annan plats i arkivetKopiera till...Skapa mapp...Skapa arkiv härSkapa ett arkiv i en mappSkapa mapp...DatumFelsÃļkDebug ÃĨterställTa bortRadera BekräftelseRadera inställningar rekursivtNekaSkillnadsmeny...Ändra skapareÄndra skapare...Redigera loggmeddelandeRedigera loggmeddelande...Redigera revisionsinställningar...Redigera...Aktivera emblemAktivera filattributAktivera rekursiva statuskontrollerEngelskaExporteraExportera - %sExportera en fungerande kopia eller arkiv utan versionsinformationExportera...TilläggExterna programFilen är inte versionskontrolleradFingeravtryck:FärdigTvinga fram ett invalidate_extension_info() anropHittade %d objektFrÃĨn:AllmäntHämta lÃĨsHämta LÃĨs...HEADHjälpVärd:Ignorera anorImporteraImportera - %sImportera ett objekt till ett arkivInkludera ignorerade filerOgiltigfÃļrklaraUtgivare:SprÃĨk:Gräns:RadLadda/UppdateraLaddar...LÃĨs objekt lokaltLÃĨs filerLÃĨstLoggLogg - %sLoggmeddelandeLoggningAnvändarnamn:Markera ett tvistande objektet som lÃļstSammanfogaSammanfogningsassistentSammanfoga ett span av revisionerSammanfoga tvÃĨ olika trädSammanfoga...MeddelandeMime-typLägsta nivÃĨ att loggaMer ÃĨtgärder...Flytta till...Ej tillgängligNamnNy plats:Nytt namn:Ny...NejNotifieringsmeddelandenNummerAntal URLer att minnasAntal meddelande att minnasUteslut externaRegistrera endast sammanfogningenÖppnaÖppna SkalLÃļsenord:SÃļkvägSÃļkväg:FÃļregÃĨende meddelandeTidigare meddelanden rensadeEgenskaperEgenskaper - %sEgenskapEgenskapsändringEgenskapseditorEgenskap statusEgenskap:RabbitVCSRabbitVCS FelRike:RekursivUppdateraUppdatera StatusSläpp lÃĨs...Släpp lÃĨs pÃĨ ett objektOmlokaliseraFlytta din arbetskopiaFlytta...Byt namnByt namn...Arkivets sÃļkvägar rensadeArkivet skapadesReserveradLÃļsÅterställÅterställ ett saknat objektÅterställÅterställ ett objekt till dess omodifierade formÅterställer allt den serRevisionRevision:KÃļr Lägg till...KÃļr Gren/tagg kommando...KÃļr Hämta...KÃļr Skicka...KÃļr Exportera...KÃļr Importera...KÃļr Hämta lÃĨs...KÃļr Sammanfoga...KÃļr Sammanfogningstest...KÃļr omlokalisering...KÃļr Byt namn...KÃļr LÃļs...KÃļr Återställ...KÃļr Växla...KÃļr LÃĨs upp...Spara som...Spara autentiseringSparad dataSchemalägg ett objekt som ska tas bort frÃĨn arkivetSchemalägg ett objekt som ska byta namn i arkivetMarkera / Avmarkera allaVälj en filVälj en mappVälj ett programInställningarVisa ändringar...Visa LoggVisa RabbitsVCS felsÃļkningsverktygVisa en fils logginformationVisa ändringar mellan revisionerVisa loggVisa oversionerade filerVisar revisioner:StorlekStatusStjäl lÃĨsenStopp vid kopiaVäxlaVäxla...Test sammanfogaTextTextstatusTack:BÃĨde frÃĨn och till url-fälten krävs.FrÃĨn version fältet mÃĨste vara ett heltalDen angivna sÃļkvägen är inte en arbetskopiaDessa objekt kommer att skickas till papperskorgen.Det nya namnet är ett obligatoriskt fältArkivets URL och destination sÃļkvägen är obligatoriska fält.Arkivets URL fält krävs.Arkivets plats är ett obligatoriskt fält.Ett problem uppstod när dina inställningar skulle sparas.Det blev fel när arkivet skulle skapas. Kontrollera att den angivna mappen är tom.Till:Typ:URL/SÃļkväg:URL:OkändLÃĨs uppUppdateraUppdatera till revisionUppdatera till angiven versionUppdatera en arbetskopiaUppdatera till revision...Uppdaterar...Använd logg dialogrutan fÃļr att välja de revisioner som du vill sammanfoga. Eller skriv ut revisionerna manuellt, separerade med ett kommatecken. Du kan ange ett revisionsspan med ett bindestreck. Exempel: 4-7,9,11,15-HEAD FÃļr att sammanfoga alla revisioner, lämna rutan tom.Giltig:VärdeVärde:Se skillanden mot grundenVisa skillnaden mot tidigare revisionVisa skillnaden mot arbetskopianSe skillnaden mellan filer/mapparSe skillnaden mellan revisionerVisa HjälpVisa eller ändra RabbitVCS inställningarSe skillnaden mellan tvÃĨ filerVisa ändringar som gjorts i en filSe filändringar sedan senaste ändringVisa egenskaperna fÃļr ett objektArbetskopiaJaDu mÃĨste ange en destinationssÃļkväg.de markerade objektentillrabbitvcs-0.19/locale/th/000077500000000000000000000000001445560650400153055ustar00rootroot00000000000000rabbitvcs-0.19/locale/th/LC_MESSAGES/000077500000000000000000000000001445560650400170725ustar00rootroot00000000000000rabbitvcs-0.19/locale/th/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000007701445560650400212120ustar00rootroot00000000000000Ū•$,8ž9Project-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-02-09 10:19+0000 Last-Translator: FULL NAME Language-Team: Thai MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) rabbitvcs-0.19/locale/zh_CN/000077500000000000000000000000001445560650400156735ustar00rootroot00000000000000rabbitvcs-0.19/locale/zh_CN/LC_MESSAGES/000077500000000000000000000000001445560650400174605ustar00rootroot00000000000000rabbitvcs-0.19/locale/zh_CN/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000616511445560650400216050ustar00rootroot00000000000000Ū•} ũėāáđ  ) > O ` n r ;… Á × 1ō 8$!]!o!Œ!Ą!´!É!(Ų!" "%"9"P"€_"ā"-ī"6#1T#†#$Ÿ#Ä#Û#ė#˙#$'$7$N$&a$ˆ$›$´$Ī$ä$7ø$H0%-y%:§%â%&&& '&3&:& >&I& ]&k& ~&’Ÿ&2' ;'I' Y'/e' •'Ą'Ŋ'Ė'į'?ū'6>(5u("Ģ(Î("Ũ()) ) ))) B)L) g)q)v)’)0™)Ę)Ü).÷)&*?* H* V*pb*VĶ**+@+O+2W+%Š+°+Ã+&Ę+ņ+,,).,X,4j,Ÿ,Až,- -(-=-P-b-s-„-•-¤-´-É-Ü-í-˙-.!.2. C.P._.r.2ˆ. ģ.Æ. ×.ä.ô. /+/5>B> H>R>"W>%z> >¨>¯>ļ>$É>î>? ?ú&?!@(@.@5@#L@p@$@´@Ô@ đ@!ú@&A%CA;iAĨAÄA(ÖA(˙A (B5B#9B]BrB×uBMD TD ^DhDoDvD}D „DD”D0¨DŲDíD%E-'EUEiEƒEE´EÅE+ÖEF F$F8F LFuZF ĐF"ŪF.G'0GXG"oG’G¨GšGÎGßG ķGHH(#HLH^HvHŠHĄH.ĩHAäH-&I;TI*IģIÂI ĶI āIíIôI ûIJ$J7J!MJyoJéJ đJüJ K#K =KJKcKsK†K'ŸK'ĮK'īKL0L7LML TL ^LiLzL “L!L ŋLÉLÎLįL$îL M M0MLM_M fMrMo†M]öMTN gNqN0xNŠNÂNÛNâNûN O O,OKO-aOO6ŽOåO P P !P .P ;P HP VP dP pP}PP P°P ŋP ĖP ŲPæPöPũP QQ-3Q aQoQ ‚QQŸQ$¸QŨQ5íQ#R?RFR MRZR aRnR RŽRžRēRÁRKŅR S*S:SMScS yS ƒSSŖSŧSÃS ĘS?ÖS T T 'T4T MT WT(aTŠT›TĸT ŠT ĩTÂTĮT ÎTØTčTUU !U-ULU eU oU |U †UU—U ĒU ¸UÅU ØU åUīU öU VV V V?V FVSVoV ŽV˜V ŸVĢVžV ÎV ÛVåV ėV ųV WW WW4W JWWWgW nW{WŽW§W ĀWĘWāWöWũWXX+X 2X>X EXRX bX oX yXƒX”X›XĸX ŠXļX ÉXÖX éXöX Y Y )Y6YIY_Y xY‚Y‰YYŖY$ĒY ĪYÜYõY*Z?Z [Z eZoZ„ZŖZŧZØZđZ[[7[J[c[|[•[Ģ[Į[ã[ ÷[ \\'$\*L\w\–\ŗ\Æ\Ü\ī\ö\ ]]1]!J]l] ˆ]•]´] Ę]×]Ū]å]õ] ü] ^^ ^ '^ 4^2>^ q^$’^ˇ^Ö^õ^4 _@_Z_'s_K›_į_ î_ ø_` `&`B`I`P`W`j`†`™` Ŧ`Ũļ` ”ažaĸaŠa'Ča$đab%.bTb jb wb!˜bēb0Ķbc c3cLc ecrcyc•cĨcÂļJsaßyô<mæ,¸F@ø‰>glĐDã>_TZ@A+MœžCĨRvIĒ×DxÛ`ŋ´y%Tz2b3u"ÅoÖvpđC4QŠ&.\Ę%)™^r‡$[ GFMՊnō;{#‘÷?Qēwî $—|ŖxˆąÚš|Rރ]ĶāäįS.å 'w8k7˙:ĩ†Ļ!Œ‹[=3c§üaY ĸ< V2ŧUÜ\ÁŽt"iÄsÉ6(Æj¤…}˛°E4bß(:š ķņBģP•ŪdS- ”/ Ų}refVØWLzíJ{ųthö HWhp#0]Uũ*Ôqûd+ kL5‚¯`9ˇP,q›lA)Ā'BI€_OīĄĪEá;˒ĢiN O8ŗKŦâČ&–m^˜ XH6oc-=fëYXõ~K*1Gj9/ęčg!Ũū u?5éNžĮĖ“ú0Ņn¨7ÍeŊZ1έė„Ō%i day%i days%i hour%i hours%i minute%i minutes%i month%i months%i second%i seconds%i week%i weeks%i year%i years%s - Finished100Add MessageAffected File(s) (double-click to compare with base)AuthenticationCertificate DetailsChange the repository of your working copyChanged Files (double-click to compare with base)Commit to:Edit Property DetailsFiles to lockFolder NameFrom RevisionFrom URLFrom: (URL and revision to merge)Import MessageLinksLog MessagesLogging OptionsMessageNote: changes to properties are applied instantly. You may review and undo changes using the context menu for each item. OptionsPlease add your authentication detailsPlease describe why you are locking these filesPlease provide your ssl certification filePrevious MessagesProgram used to compare filesProperties for:RabbitVCSRemote URI:RepositoryRevision RangeRevisionRevisions TableTo RevisionTo: (URL and revision to merge)URL HistoryURL to merge fromVersion InformationWorking Copy:Working CopySelected properties will be applied recursively.Are you sure you want to delete %item%?RabbitVCSRabbitVCS ErrorA wizard with steps for mergingAboutAbout RabbitVCSAccept ForeverAccept OnceActionAddAdd EmblemAdd a new property.Add an emblemAdd to ignore listAdded a folder to the repositoryAn error has occurred in the RabbitVCS Nautilus extension. Please contact the RabbitVCS team with the error details listed below:AnnotateAnnotate - %sAnnotate a fileAnnotate...Applies a unified diff file to the working copyApply PatchApply Patch To Directory...Apply Patch...Apply property recursivelyApplying Patch File...Are you sure you want to clear your authentication information?Are you sure you want to clear your previous messages?Are you sure you want to clear your repository paths?Are you sure you want to continue?AuthenticationAuthentication information clearedAuthorAuthors:Branch/tagBranch/tag...Browse a repository treeBrowse toBrowse to a file or folderBrowse...BugsCannot annotate a directoryChangeChange the repository location of a working copyCheck CertificateCheck for Modifications...Check for modifications made to the repositoryCheck out a working copyCheckoutCheckout - %sCheckout...Choose this method if you have made some changes to a branch and wish to merge your changes with another branch.Choose this method if you wish to merge two different branches into your working copy.Clean up working copyCleaning Up...CleanupCleanup Requested.... Begin working copy cleanup?Clear your authentication informationClose this dialog.CommitCommit modifications to the repositoryCompare files/foldersCompare revisionsCompare side by sideCompare the differences between two itemsCompare with baseCompare with base using side-by-side comparison toolCompare with previous revisionCompare with previous revision using side-by-side comparison toolCompare with working copyCompleted AddCompleted Branch/tagCompleted CheckoutCompleted CleanupCompleted CommitCompleted ExportCompleted ImportCompleted LockCompleted MergeCompleted Merge TestCompleted RelocateCompleted RenameCompleted ResolveCompleted RevertCompleted SwitchCompleted UnlockCompleted UpdateConfirmationCopy From PathCopy From RevisionCopy URL to clipboardCopy an item to another location in the repositoryCopy to...Create Folder...Create PatchCreate Patch...Create Repository hereCreate a repository in a folderCreate folder...Creates a unified diff file with all changes you madeCreating Patch File...DateDebugDebug RevertDeleteDelete ConfirmationDelete properties recursivelyDelete propertyDelete this propertyDelete this property (recursive)DenyDiff Menu...Do you want to delete the selected properties from all files and subdirectories beneath this directory?Edit authorEdit author...Edit log messageEdit log message...Edit revision properties...Edit...Enable emblemsEnable file attributesEnable recursive status checksEnglishExportExport - %sExport a working copy or repository with no versioning informationExport...ExtensionExternal ProgramsFile is not under version control.Fingerprint:FinishedForce an invalidate_extension_info() callFound %d item(s)From:GeneralGet LockGet Lock...HEADHelpHost:Ignore ancestryIgnore item by file extensionIgnore item by filenameImportImport - %sImport an item into a repositoryInclude ignored filesInvalidateIssuer:Language:Limit:LineList of comparison optionsLoad/RefreshLoading...Locally lock itemsLock FilesLockedLogLog - %sLog MessageLoggingLogin:Mark a conflicted item as resolvedMergeMerge AssistantMerge a range of revisionsMerge two different treesMerge...MessageMime TypeMinimum level to logMore Actions...Move to...N/ANameNew Location:New Name:New...NoNotification MessagesNumber of URLs to rememberNumber of messages to rememberOmit ExternalsOnly record the mergeOpenOpen ShellOpen a fileOpen from first revisionOpen from second revisionPassword:Patch File AppliedPatch File CreatedPathPath:Previous MessagesPrevious messages clearedPropertiesProperties - %sPropertyProperty ChangeProperty EditorProperty StatusProperty:RabbitVCSRabbitVCS ErrorRealm:RecursiveRefreshRefresh StatusRefresh the list of properties.Release Lock...Release lock on an itemRelocateRelocate your working copyRelocate...RenameRename...Repository BrowserRepository paths clearedRepository successfully createdReservedResolveRestoreRestore a missing itemRevertRevert an item to its unmodified stateRevert propertyRevert property (recursive)Revert this property to its original stateRevert this property to its original state (recursive)Reverts everything it seesRevisionRevision:Running Add Command...Running Branch/tag Command...Running Checkout Command...Running Commit Command...Running Export Command...Running Import Command...Running Lock Command...Running Merge CommandRunning Merge TestRunning Relocate Command...Running Rename Command...Running Resolve Command...Running Revert Command...Running Switch Command...Running Unlock Command...SSL Client CertificationSave As...Save AuthenticationSaved DataSchedule an item to be deleted from the repositorySchedule an item to be renamed on the repositorySchedule items to be added to the repositorySelect / Deselect allSelect a FileSelect a FolderSelect a programSettingsShow Changes...Show LogShow RabbitVCS debugging toolsShow a file's log informationShow changes between paths and revisionsShow changes between revisionsShow logShow unversioned filesShowing Revisions:SizeStatusSteal the locksStop on copySwitchSwitch...Test MergeTextText ChangeText StatusThanks:The debug menu is used to diagnose problems with RabbitVCS itselfThe from and to url fields are both required.The from revision field must be an integerThe given path is not a working copyThe item(s) will be sent to the trash can.The new name field is requiredThe repository URL and destination path are both required fields.The repository URL field is required.The repository location is a required field.There was a problem saving your properties.There was an error creating the repository. Make sure the given folder is empty.To:Type:URL/Path:URL:Unable to retrieve properties listUnable to set new value for property.UnknownUnlockUpdateUpdate To RevisionUpdate a file to a specific revisionUpdate a working copyUpdate to revision...Updating...Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty.Valid:ValueValue:View diff against baseView diff against previous revisionView diff against working copyView diff as side-by-side comparisonView diff between files/foldersView diff between revisionsView helpView or change RabbitVCS settingsView the differences between two filesView the modifications made to a fileView the modifications made to a file since its last changeView the properties of an itemView unified diffWhere do you want to copy the selection?Where do you want to move the selection?Working CopyYesYou must supply a destination path.the selected item(s)toProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-08-14 14:07+0000 Last-Translator: Jiehan Zheng Language-Team: Chinese (Simplified) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %i 夊%i 小æ—ļ%i 分钟%i 月%i į§’%i 周%i åš´%s - 厌成100æˇģ加æļˆæ¯å—åŊąå“įš„æ–‡äģļ (双å‡ģäŧšæ¯”čžƒ Base)čēĢäģŊéĒŒč¯čŽ¤č¯įģ†čŠ‚æ”šå˜æ‚¨åˇĨäŊœå‰¯æœŦįš„åąžæ€§æ›´æ”šįš„æ–‡äģļ (双å‡ģäŧšæ¯”čžƒ Base)提äē¤įģ™īŧšįŧ–čž‘åąžæ€§įģ†čŠ‚čĻé”åŽšįš„æ–‡äģļæ–‡äģļå¤šåį§°äģŽį‰ˆæœŦæĨč‡ĒURLæĨč‡Ēīŧš(URL 和čρ合åšļįš„į‰ˆæœŦ)å¯ŧå…Ĩæļˆæ¯é“žæŽĨæ—Ĩåŋ—äŋĄæ¯æ—Ĩåŋ—选饚æļˆæ¯æŗ¨æ„īŧš åąžæ€§äŋŽæ”šäŧšįĢ‹åŗčĸĢåē”į”¨ã€‚æ‚¨å¯äģĨäŊŋį”¨æ¯éĄšįš„ä¸Šä¸‹æ–‡čœå•æĨå›žéĄžæˆ–æ’¤é”€äŋŽæ”šã€‚ é€‰éĄšč¯ˇæˇģåŠ æ‚¨įš„čŽ¤č¯įģ†čŠ‚č¯ˇæčŋ°æ‚¨é”åޚčŋ™ä盿–‡äģļįš„åŽŸå› č¯ˇæäž›æ‚¨įš„ SSL 蝁äšĻ文äģļ前一ä¸Ēæļˆæ¯į”¨äēŽæ¯”čžƒæ–‡äģļįš„į¨‹åēåąžæ€§åąžäēŽīŧšRabbitVCSčŋœį¨‹ URIīŧšį‰ˆæœŦåē“į‰ˆæœŦčŒƒå›´į‰ˆæœŦį‰ˆæœŦčĄ¨č‡ŗį‰ˆæœŦ臺īŧš(URL 和čρ合åšļįš„į‰ˆæœŦ)URL åŽ†å˛čρ合åšļč‡Ē URLį‰ˆæœŦäŋĄæ¯åˇĨäŊœå‰¯æœŦīŧšåˇĨäŊœå‰¯æœŦé€‰ä¸­įš„åąžæ€§å°†äŧščĸĢ递åŊ’åē”į”¨ã€‚æ‚¨įĄŽåŽžčĻåˆ é™¤ %item% 吗īŧŸRabbitVCSRabbitVCS 错蝝䏀ä¸Ēį”ąå‡ ä¸Ēæ­ĨéǤį섿ˆįš„合åšļ向å¯ŧå…ŗäēŽå…ŗäēŽ RabbitVCSæ€ģ是æŽĨ受æŽĨ受一æŦĄæ“äŊœæˇģ加æˇģ加åžŊįĢ æˇģ加一ä¸Ēæ–°įš„åąžæ€§ã€‚æˇģ加一ä¸ĒåžŊįĢ æˇģåŠ č‡ŗåŋŊį•Ĩåˆ—čĄ¨æˇģ加一ä¸Ē文äģļå¤šåˆ°į‰ˆæœŦåē“RabbitVCS Nautilus æ‰Šåą•å‘į”Ÿäē†ä¸€ä¸Ēé”™č¯¯ã€‚č¯ˇč”įŗģRabbitVCS å›ĸ队åšļæäž›ä¸‹åˆ—é”™č¯¯įģ†čŠ‚īŧšæŗ¨é‡Šæŗ¨é‡Š - %sæ‰šæŗ¨ä¸€ä¸Ē文äģ￉𿺍...åē”ᔍ unified diff 臺åˇĨäŊœå‰¯æœŦåē”ᔍčĄĨä¸å¯šį›ŽåŊ•åē”ᔍčĄĨ丁...åē”ᔍčĄĨ丁...递åŊ’åē”į”¨åąžæ€§äģŽæ–‡äģļåē”ᔍčĄĨ丁...æ‚¨įĄŽåŽščĻæ¸…įŠēæ‚¨įš„čŽ¤č¯äŋĄæ¯īŧŸæ‚¨įĄŽåޚčĻæ¸…įŠēæ‚¨äš‹å‰įš„æļˆæ¯īŧŸæ‚¨įĄŽåޚčĻæ¸…įŠēæ‚¨įš„äģ“åē“čˇ¯åž„īŧŸæ‚¨įĄŽåޚčρįģ§įģ­å—īŧŸčŽ¤č¯čŽ¤č¯äŋĄæ¯åˇ˛æ¸…įŠēäŊœč€…äŊœč€…īŧšåˆ†æ”¯/tag分支/æ ‡į­ž...æĩč§ˆæēį å瓿ēį æ ‘æĩč§ˆč‡ŗæĩč§ˆč‡ŗä¸€ä¸Ē文äģ￈–æ–‡äģļ多æĩč§ˆ...Bugs不čƒŊįģ™į›ŽåŊ•åŠ æŗ¨é‡Šæ›´æ”šæ”šå˜åˇĨäŊœå‰¯æœŦæēį åē“įš„äŊįŊŽæŖ€æŸĨ蝁äšĻæŖ€æŸĨäŋŽæ”š...æŖ€æŸĨ臺æēį åē“įš„äŋŽæ”šæŖ€å‡ēåˇĨäŊœį‰ˆæœŦæŖ€å‡ēį­žå‡ē - %sæŖ€å‡ē(Checkout)...åĻ‚æžœæ‚¨å¯šæŸä¸Ē分支čŋ›čĄŒäē†äŋŽæ”šīŧŒåšļä¸”æƒŗå°†čŋ™äē›äŋŽæ”šä¸ŽåĻ一分支合åšļīŧŒé€‰æ‹Ščŋ™į§æ–šæŗ•ã€‚åĻ‚æžœæ‚¨æƒŗåˆåšļ两ä¸Ēä¸åŒįš„åˆ†æ”¯åˆ°æ‚¨įš„åˇĨäŊœå‰¯æœŦįš„č¯īŧŒč¯ˇé€‰æ‹Ščŋ™ä¸Ēæ–šæŗ•ã€‚æ¸…į†åˇĨäŊœå‰¯æœŦæ­Ŗæ¸…į†æ¸…į†æ¸…į†č¯ˇæą‚.... åŧ€å§‹åˇĨäŊœå‰¯æœŦæ¸…į†äšˆīŧŸæ¸…除äŊ įš„čޤ蝁äŋĄæ¯å…ŗé—­čŋ™ä¸Ēå¯šč¯æĄ†ã€‚æä礿äē¤äŋŽæ”šč‡ŗæēį å瓿¯”čžƒæ–‡äģļ/文äģļå¤šæ¯”čžƒį‰ˆæœŦåšļæŽ’æ¯”čžƒæ¯”čžƒä¸¤ä¸ĒéĄšį›Žé—´įš„åˇŽåŧ‚与 Base čŋ›čĄŒæ¯”čžƒäŊŋᔍåšļæŽ’æ¯”čžƒåˇĨå…ˇä¸Ž Base čŋ›čĄŒæ¯”čžƒä¸Žå‰ä¸€ä¸Ēį‰ˆæœŦčŋ›čĄŒæ¯”čžƒäŊŋᔍåšļæŽ’æ¯”čžƒåˇĨå…ˇä¸Žå‰ä¸€ä¸Ēį‰ˆæœŦčŋ›čĄŒæ¯”čžƒä¸ŽåˇĨäŊœį‰ˆæœŦčŋ›čĄŒæ¯”čžƒAdd åŽŒæˆåŽŒæˆįš„ 分支/tagåŽŒæˆį­žå‡ēæ¸…į†åŽŒæˆæäē¤åŽŒæˆExport 厌成Import 厌成Lock 厌成合åšļ厌成厌成合åšļæĩ‹č¯•重分配厌毕重å‘Ŋ名厌成Resolve 厌成厌成čŋ˜åŽŸåˆ‡æĸåŽŒæˆč§Ŗé”åŽŒæˆåŽŒæˆįš„æ›´æ–°įĄŽčŽ¤å¤åˆļč‡Ēčˇ¯åž„å¤åˆļč‡Ēį‰ˆæœŦ复åˆļURL到å‰Ē切æŋ复åˆļ一ä¸ĒéĄšį›Žåˆ°æēį åē“中å…ļ厃äŊįŊŽå¤åˆļ到 ...创åģēæ–‡äģļ多...į”ŸæˆčĄĨä¸į”ŸæˆčĄĨ丁...在čŋ™é‡Œåˆ›åģēæēį åē“在文äģļ多中创åģē一ä¸Ēæēį åē“创åģēį›ŽåŊ•...å¯šæ‚¨æ‰€æœ‰įš„äŋŽæ”šåˆ›åģē一ä¸Ē unified diff 文äģļæ­Ŗåœ¨į”ŸæˆčĄĨ丁文äģļ...æ—ĨæœŸč°ƒč¯•č°ƒč¯•čŋ˜åŽŸåˆ é™¤åˆ é™¤įĄŽčޤ递åŊ’åˆ é™¤åąžæ€§åˆ é™¤åąžæ€§åˆ é™¤č¯Ĩåąžæ€§åˆ é™¤č¯Ĩåąžæ€§ (递åŊ’įš„)拒įģæ¯”čžƒčœå•...æ‚¨æƒŗäģŽč¯Ĩį›ŽåŊ•下所有文äģļå’Œå­į›ŽåŊ•ä¸­åˆ é™¤é€‰ä¸­įš„åąžæ€§äšˆīŧŸįŧ–čž‘äŊœč€…įŧ–čž‘äŊœč€…...įŧ–čž‘æ—Ĩåŋ—æļˆæ¯įŧ–čž‘æ—Ĩåŋ—æļˆæ¯...įŧ–čž‘į‰ˆæœŦåąžæ€§...įŧ–čž‘...吝ᔍåžŊįĢ å¯į”¨æ–‡äģļåąžæ€§å¯į”¨é€’åŊ’įŠļæ€æŖ€æŸĨč‹ąč¯­å¯ŧå‡ēå¯ŧå‡ē - %så¯ŧå‡ēåˇĨäŊœå‰¯æœŦ或æēį åē“īŧŒč€Œä¸åŒ…åĢäģģäŊ•į‰ˆæœŦäŋĄæ¯å¯ŧå‡ē...æ‰Šåą•å¤–éƒ¨į¨‹åēæ–‡äģļä¸å—į‰ˆæœŦ控åˆļ指įēšīŧšåˇ˛åŽŒæˆåŧēčĄŒč°ƒį”¨ invalidate_extension_info()åˇ˛æ‰žåˆ° %d 饚äģŽīŧšå¸¸č§„čŽˇåž— LockčŽˇåž—é”...HEAD帎劊ä¸ģæœēīŧšåŋŊį•Ĩæ—ŠæœŸįš„æŒ‰æ‰Šåą•ååŋŊį•ĨéĄšį›ŽæŒ‰æ–‡äģļ名åŋŊį•ĨéĄšį›Žå¯ŧå…Ĩå¯ŧå…Ĩ - %så¯ŧå…Ĩ一ä¸ĒéĄšį›Žč‡ŗæēį åē“包æ‹Ŧ厞åŋŊį•Ĩįš„æ–‡äģļäŊŋ无效éĸå‘者īŧšč¯­č¨€īŧšé™åˆļīŧšæ˜Žį솿¯”čžƒé€‰éĄšåˆ—čĄ¨åŠ čŊŊ/åˆˇæ–°åŠ čŊŊ中...æœŦåœ°é”åŽšéĄšį›Žé”åŽšæ–‡äģļåˇ˛é”åŽšæ—Ĩåŋ—æ—Ĩåŋ— - %sæ—Ĩåŋ—äŋĄæ¯æ—Ĩåŋ—į™ģåŊ•īŧšæ ‡čް冞įĒæĄį›Žä¸ēåˇ˛č§Ŗå†ŗåˆåšļ合åšļ劊手合åšļ一ä¸ĒčŒƒå›´įš„į‰ˆæœŦ合åšļ两ä¸Ēä¸åŒįš„æēį æ ‘合åšļ...æļˆæ¯MIME įąģ型最小æ—Ĩåŋ—įē§åˆĢ更多操äŊœ...į§ģ动到...ä¸å¯į”¨åį§°æ–°äŊįŊŽīŧšæ–°åå­—:新åģē...åĻ通įŸĨäŋĄæ¯čްäŊįš„ URL æ•°į›ŽčŽ°äŊįš„äŋĄæ¯æ•°é‡įœį•Ĩ外部äģ…čްåŊ•合åšļ打åŧ€æ‰“åŧ€ Shell打åŧ€ä¸€ä¸Ē文äģļäģŽįŦŦ一ä¸Ēį‰ˆæœŦ打åŧ€äģŽįŦŦäēŒä¸Ēį‰ˆæœŦ打åŧ€å¯†į īŧšåˇ˛åē”ᔍčĄĨ丁文äģļåˇ˛į”ŸæˆčĄĨ丁文äģļčˇ¯åž„čˇ¯åž„:前一ä¸Ēæļˆæ¯äģĨ垀æļˆæ¯åˇ˛æ¸…įŠēåąžæ€§åąžæ€§ - %såąžæ€§åąžæ€§æ”šå˜åąžæ€§įŧ–čž‘å™¨åąžæ€§įŠļæ€åąžæ€§īŧšRabbitVCSRabbitVCS é”™č¯¯åŸŸīŧšé€’åŊ’åˆˇæ–°åˆˇæ–°įŠļæ€åˆˇæ–°åąžæ€§åˆ—čĄ¨é‡Šæ”žé”...é‡Šæ”žéĄšį›Žįš„é”é‡æ–°åˆ†é…é‡åŽšäŊæ‚¨įš„åˇĨäŊœå‰¯æœŦ重厚äŊ...重å‘Ŋ名重å‘Ŋ名...į‰ˆæœŦå瓿ĩč§ˆå™¨äģ“åē“čˇ¯åž„åˇ˛æ¸…įŠēį‰ˆæœŦäģ“åē“创åģ翈åŠŸäŋį•™įš„觪冺æĸ复æĸ复ä¸ĸå¤ąéĄšį›Žæĸ复čŋ˜åŽŸéĄšį›Žåˆ°å…ļæœĒäŋŽæ”šįš„įŠļ态čŋ˜åŽŸåąžæ€§čŋ˜åŽŸåąžæ€§ (递åŊ’įš„)čŋ˜åŽŸč¯Ĩåąžæ€§č‡ŗå…ļ原įŠļ态čŋ˜åŽŸč¯Ĩåąžæ€§č‡ŗå…ļ原įŠļ态 (递åŊ’įš„)čŋ˜åŽŸįœ‹åˆ°įš„æ¯ä¸Ē文äģļäŋŽčŽĸį‰ˆį‰ˆæœŦīŧšæ­Ŗæ‰§čĄŒ Add å‘Ŋä줿­ŖčŋčĄŒ Branch/tag å‘Ŋäģ¤...æ­Ŗåœ¨čŋčĄŒį­žå‡ēå‘Ŋä줿­Ŗåœ¨čŋčĄŒæäē¤å‘Ŋäģ¤...æ­ŖčŋčĄŒ Export å‘Ŋä줿­ŖčŋčĄŒ Import å‘Ŋä줿­ŖčŋčĄŒ Lock å‘Ŋä줿­Ŗåœ¨čŋčĄŒåˆåšļå‘Ŋäģ¤čŋčĄŒåˆåšļæĩ‹č¯•æ­ŖčŋčĄŒé‡åˆ†é…å‘Ŋä줿­ŖčŋčĄŒé‡å‘Ŋ名å‘Ŋä줿­ŖčŋčĄŒ Resolve å‘Ŋäģ¤čŋčĄŒčŋ˜åŽŸå‘Ŋäģ¤...æ­Ŗåœ¨čŋčĄŒåˆ‡æĸå‘Ŋäģ¤...æ­Ŗåœ¨čŋčĄŒč§Ŗé”å‘Ŋäģ¤...SSL åŽĸæˆˇį̝蝁äšĻåĻ存ä¸ēâ€Ļäŋå­˜čޤ蝁厞äŋå­˜įš„æ•°æŽčŽĄåˆ’ä¸€ä¸ĒéĄšį›Žåœ¨æēį åē“čĸĢåˆ é™¤čŽĄåˆ’ä¸€ä¸ĒéĄšį›Žåœ¨æēį åē“čĸĢ重å‘ŊåčŽĄåˆ’čρæˇģåŠ č‡ŗäģ“åē“įš„éĄšé€‰æ‹Š / 取æļˆé€‰æ‹Š 全部选拊一ä¸Ē文äģļ选拊一ä¸Ē文äģļ多选拊一ä¸ĒፋåēčŽžįŊŽæ˜žį¤ēäŋŽæ”š...昞į¤ēæ—Ĩåŋ—昞į¤ē RabbitVCS č°ƒč¯•åˇĨå…ˇæ˜žį¤ē文äģļæ—Ĩåŋ—äŋĄæ¯æ˜žį¤ēčˇ¯åž„ä¸Žį‰ˆæœŦé—´įš„æ”šåŠ¨æ˜žį¤ēį‰ˆæœŦäš‹é—´įš„æ›´æ”šæ˜žį¤ēæ—Ĩåŋ—昞į¤ēéžį‰ˆæœŦ控åˆļįš„æ–‡äģļæ­Ŗåœ¨æ˜žį¤ēį‰ˆæœŦīŧšæ–‡äģļ大小įŠļæ€åˇé”į숿­ĸäēŽå¤åˆļ切æĸ切æĸ...æĩ‹č¯•合åšļ文æœŦ文æœŦ更攚文æœŦįŠļ态感č°ĸīŧšč°ƒč¯•čœå•į”¨äēŽč¯Šæ–­ RabbitVCS č‡ĒčēĢįš„é—Žéĸ˜æĨč‡Ē和到 URL 栏均ä¸ēåŋ…åĄĢæĨč‡ĒäŋŽčŽĸį‰ˆä¸€æ åŋ…éĄģä¸ēæ•´æ•°æŒ‡åŽščˇ¯åž„ä¸æ˜¯åˇĨäŊœå‰¯æœŦčŋ™äē›äŧščĸĢ发送到回æ”ļįĢ™æ–°åį§°ä¸€æ åŋ…åĄĢ“äģ“åē“ URLâ€å’Œâ€œį›Žįš„åœ°čˇ¯åž„â€å‡åŋ…åĄĢ。“äģ“åē“ URL”åŋ…åĄĢ。äģ“åē“地址栏åŋ…åĄĢ。äŋå­˜åąžæ€§æ—ļå‡ēįŽ°äē†ä¸€ä¸Ē问éĸ˜ã€‚į‰ˆæœŦåē“创åģēčŋ‡į¨‹ä¸­å‡ēįŽ°é”™č¯¯ã€‚č¯ˇįĄŽčŽ¤æ‰€æŒ‡åŽšį›ŽåŊ•是įŠēįš„ã€‚č‡ŗīŧšįąģ型īŧšURL/čˇ¯åž„īŧšURLīŧšæ— æŗ•čŽˇå–åąžæ€§åˆ—čĄ¨ä¸čƒŊä¸ēåąžæ€§čŽžįŊŽæ–°å€ŧæœĒįŸĨč§Ŗé”æ›´æ–°æ›´æ–°åˆ°äŋŽčŽĸį‰ˆæ›´æ–°æ–‡äģļč‡ŗæŒ‡åŽšį‰ˆæœŦ更新åˇĨäŊœį‰ˆæœŦæ›´æ–°åˆ°į‰ˆæœŦ...更新...äŊŋᔍæ—Ĩåŋ—å¯šč¯æĄ†æĨé€‰æ‹Šæ‚¨æƒŗåˆåšļįš„į‰ˆæœŦã€‚æˆ–č€…æ‰‹åŠ¨æŒ‡åŽšį‰ˆæœŦīŧŒį”¨é€—åˇåˆ†å‰˛ã€‚æ‚¨å¯äģĨ通čŋ‡å‡åˇ"-"æĨ指厚一ä¸Ēį‰ˆæœŦčŒƒå›´ã€‚ 例åĻ‚īŧš4-7,9,11,15-HEAD čρ合åšļæ‰€æœ‰åˆ†æ”¯č¯ˇäŋæŒįŠēį™Ŋ。有效īŧšå€ŧå€ŧīŧšæŸĨįœ‹į›¸å¯šäēŽ Base įš„åˇŽåŧ‚æŸĨįœ‹į›¸å¯šäēŽå‰ä¸€ä¸Ēį‰ˆæœŦįš„åˇŽåŧ‚æŸĨįœ‹į›¸å¯šäēŽåˇĨäŊœį‰ˆæœŦįš„åˇŽåŧ‚åšļæŽ’æ¯”čžƒæŸĨįœ‹åˇŽåŧ‚æŸĨįœ‹æ–‡äģļ/文äģļå¤šäš‹é—´įš„åˇŽåŧ‚æŸĨįœ‹į‰ˆæœŦé—´åˇŽåŧ‚æŸĨįœ‹å¸ŽåŠŠæŸĨįœ‹æˆ–æ›´æ”š RabbitVCS 莞įŊŽæŸĨįœ‹ä¸¤ä¸Ē文äģļäš‹é—´įš„åˇŽåŧ‚æŸĨįœ‹å¯šæ–‡äģļįš„äŋŽæ”šæŸĨįœ‹č‡ĒäģŽä¸Šä¸€æŦĄäŋŽæ”šåŽå¯šæ–‡äģļįš„æ”šåŠ¨æŸĨįœ‹ä¸€ä¸ĒéĄšį›Žįš„åąžæ€§æŸĨįœ‹įģŸä¸€åˇŽåŧ‚将选åŒē复åˆļ到å“ĒīŧŸå°†é€‰åŒēį§ģ动到å“ĒīŧŸåˇĨäŊœå‰¯æœŦįĄŽåŽšåŋ…éĄģæäž›į›Žæ ‡čˇ¯åž„ã€‚åˇ˛é€‰æ‹Šįš„éĄšåˆ°rabbitvcs-0.19/locale/zh_TW/000077500000000000000000000000001445560650400157255ustar00rootroot00000000000000rabbitvcs-0.19/locale/zh_TW/LC_MESSAGES/000077500000000000000000000000001445560650400175125ustar00rootroot00000000000000rabbitvcs-0.19/locale/zh_TW/LC_MESSAGES/RabbitVCS.mo000066400000000000000000000123271445560650400216330ustar00rootroot00000000000000Ū•s´LĀ Á Ō į õ ų   3 B H O S \ k r { … Š ‘ š ĸ Š ģ É Ú é ö   . 9 J [ ` f m  † Ž –  ¯ ŧ Å Ö Ü ä í ķ ú    " ) - 6 B J Q W _ i t x } ‡ Ž ‘ § Ž ¸ Ŋ Ã Õ ā đ ų   # * 4 < C M V ^ f m v € — ¯ ē Č Ø á ę ī ö ũ  !( /;AHLŌO " ,6E IWm –¤Ģ˛ š à ÍÚáčīö   )6=Mf ŒŸ¯ļŊ ÄŅ Øâé đũ #( /<D KW_ g t~ … ‘ž Ĩ¯ļ Ŋ ÉÖÚ á îø ü  !)9 @L S`p x‚ ˜ Ĩ˛ÂÉĐ× Ū ëø  (5K R_fmt{ƒ Š”™  ­ ´Á ÅĪĶpGS=X6!  bPh$TFRCk?<VDc2UY1`W/ A#HE%jO0Lra.78:-g\I@ i+^q)d"Mm &3nNef>Q*o 9;5B[J(,K'_ls]4Z%i hour%i hours%i minute%i minutes%s - Finished100AuthenticationFrom URLLog MessagesOptionsAboutActionAddAnnotateAuthenticationAuthorAuthors:Browse...BugsChangeCheckoutCleanupCommitCompare revisionsCompleted AddCompleted CommitCompleted LockConfirmationCopy From PathCopy From RevisionCopy URL to clipboardCopy to...Create Folder...Create folder...DateDebugDeleteDelete ConfirmationDenyEdit...EnglishExportExternal ProgramsFingerprint:FinishedFound %d item(s)From:GeneralGet LockHost:ImportImport - %sLanguage:Limit:Loading...LockedLogLog - %sLog MessageLoggingLogin:MergeMessageMime TypeMove to...N/ANameNew Name:New...NoNotification MessagesNumberPassword:PathPath:Previous MessagesPropertiesProperties - %sPropertyProperty ChangeProperty EditorProperty:Realm:RecursiveRefreshRenameRename...ReservedResolveRestoreRevertRevisionRevision:Running Add Command...Running Lock Command...Save As...Select a FileSelect a FolderSettingsShow LogSizeStatusSwitchTextThanks:To:Type:URL:UnknownUnlockUpdateUpdating...ValueValue:YestoProject-Id-Version: rabbitvcs Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2010-11-26 09:51-0500 PO-Revision-Date: 2010-06-09 03:20+0000 Last-Translator: Yu - Sian , Liu Language-Team: Chinese (Traditional) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2010-12-09 23:36+0000 X-Generator: Launchpad (build Unknown) %i 小時%i 分鐘%s - åˇ˛åŽŒæˆ100éŠ—č­‰åžž URL 新åĸžæ—ĨčĒŒč¨Šæ¯é¸é …é—œæ–ŧ動äŊœåŠ å…Ĩč¨ģč§ŖéŠ—č­‰äŊœč€…äŊœč€…īŧšį€čĻŊ...å•éĄŒå›žå ąæ›´æ”šå–å‡ē清除提ä礿¯”čŧƒäŋŽč¨‚į‰ˆé–“åˇŽį•°åŽŒæ•´åŠ å…Ĩ厌成提äē¤åŽŒæˆä¸ŠéŽ–įĸēčĒåžžčˇ¯åž‘č¤‡čŖŊåžžäŋŽč¨‚į‰ˆæœŦ中複čŖŊ複čŖŊįļ˛å€åˆ°å‰Ēč˛ŧį°ŋ複čŖŊ到...åģēįĢ‹čŗ‡æ–™å¤ž...新åĸžčŗ‡æ–™å¤žæ—Ĩ期åĩ錯åˆĒ除įĸēčĒåˆĒ除取æļˆįˇ¨čŧ¯...č‹ąæ–‡åŒ¯å‡ēå¤–éƒ¨į¨‹åŧæŒ‡į´‹:åˇ˛åŽŒæˆæ‰žåˆ° %d å€‹é …į›Žåžž:一čˆŦ取垗鎖厚ä¸ģ抟:匯å…Ĩ匯å…Ĩ - %sčĒžč¨€:限åˆļ:čŧ‰å…Ĩ中...åˇ˛éŽ–åŽšį´€éŒ„į´€éŒ„ - %sį´€éŒ„č¨Šæ¯į´€éŒ„å¸ŗč™ŸīŧšåˆäŊĩč¨Šæ¯MIME éĄžåž‹į§ģ動到...į„Ąåį¨ąæ–°åį¨ąīŧšæ–°åĸž...åĻ通įŸĨč¨Šæ¯æ•¸å­—å¯†įĸŧīŧščˇ¯åž‘čˇ¯åž‘:äš‹å‰įš„č¨Šæ¯åąŦ性åąŦ性 - %såąŦ性åąŦæ€§æ”ščŽŠåąŦæ€§įˇ¨čŧ¯å™¨åąžæ€§:領域īŧšéžčŋ´é€˛å…Ĩå­į›ŽéŒ„é‡æ–°æ•´į†é‡æ–°å‘Ŋ名重新å‘Ŋ名...äŋį•™č§Ŗæąē還原還原äŋŽč¨‚į‰ˆæœŦäŋŽč¨‚į‰ˆīŧšåŸˇčĄŒåŠ å…Ĩ...åŸˇčĄŒä¸ŠéŽ–å‘Ŋäģ¤åĻ存į‚ē...選取æĒ”æĄˆé¸æ“‡ä¸€å€‹čŗ‡æ–™å¤žč¨­åŽšéĄ¯į¤ēæ—ĨčĒŒå¤§å°į‹€æ…‹čŊ‰æ›æ–‡å­—éŗ´čŦ:到īŧšéĄžåž‹īŧšURL:ä¸æ˜Žč§Ŗé™¤éŽ–åŽšæ›´æ–°æ›´æ–°ä¸­...å€ŧ數å€ŧīŧšæ˜¯åˆ°rabbitvcs-0.19/po/000077500000000000000000000000001445560650400140515ustar00rootroot00000000000000rabbitvcs-0.19/po/POTFILES.in000066400000000000000000000030231445560650400156240ustar00rootroot00000000000000util/helper.py util/contextmenuitems.py ui/delete.py ui/revert.py ui/remotes.py ui/unstage.py ui/reset.py ui/markresolved.py ui/ignore.py ui/wraplabel.py ui/renderers/__init__.py ui/stage.py ui/lock.py ui/log.py ui/unlock.py ui/__init__.py ui/clean.py ui/editconflicts.py ui/action.py ui/about.py ui/xml/revert.xml.h ui/xml/commit.xml.h ui/xml/property_editor.xml.h ui/xml/browser.xml.h ui/xml/manager.xml.h ui/xml/relocate.xml.h ui/xml/update.xml.h ui/xml/merge.xml.h ui/xml/settings.xml.h ui/xml/add.xml.h ui/xml/dialogs/delete_confirmation.xml.h ui/xml/dialogs/certificate.xml.h ui/xml/dialogs/name_email_prompt.xml.h ui/xml/dialogs/confirmation.xml.h ui/xml/dialogs/ssl_client_cert_prompt.xml.h ui/xml/dialogs/message_box.xml.h ui/xml/dialogs/previous_messages.xml.h ui/xml/dialogs/mark_resolved_prompt.xml.h ui/xml/dialogs/property.xml.h ui/xml/dialogs/error_notification.xml.h ui/xml/dialogs/conflict_decision.xml.h ui/xml/dialogs/create_folder.xml.h ui/xml/dialogs/loading.xml.h ui/xml/ignore.xml.h ui/xml/clean.xml.h ui/xml/properties.xml.h ui/xml/notification.xml.h ui/xml/git-update.xml.h ui/xml/log.xml.h ui/xml/lock.xml.h ui/xml/annotate.xml.h ui/xml/import.xml.h ui/xml/reset.xml.h ui/xml/property_page.xml.h ui/rename.py ui/update.py ui/revprops.py ui/widget.py ui/browser.py ui/relocate.py ui/add.py ui/updateto.py ui/create.py ui/tags.py ui/property_page.py ui/properties.py ui/merge.py ui/dialog.py ui/annotate.py ui/property_editor.py ui/open.py ui/cleanup.py ui/import.py ui/clone.py ui/settings.py ui/commit.py ui/diff.py ui/export.py rabbitvcs-0.19/po/README000066400000000000000000000006601445560650400147330ustar00rootroot00000000000000How to create a translation -------------------------- Here is a brief set of commands to generate a new translation. Replace en_CA with your language and locale of choice. $ msginit --input=po/RabbitVCS.pot --locale=en_CA $ mv en_CA.po po/en_CA.po Update po/en_CA.po with your translations. When you are done, type: $ mkdir -p locale/en_CA/LC_MESSAGES $ msgfmt --output-file=locale/en_CA/LC_MESSAGES/RabbitVCS.mo po/en_CA.po rabbitvcs-0.19/po/RabbitVCS.pot000066400000000000000000001161441445560650400163630ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-06-14 01:58+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: util/helper.py:73 msgid "%I:%M%P" msgstr "" #: util/helper.py:74 msgid "%a %I:%M%p" msgstr "" #: util/helper.py:75 msgid "%b %d" msgstr "" #: util/helper.py:76 msgid "%b %d %Y" msgstr "" #: util/helper.py:215 msgid "(no date)" msgstr "" #: util/helper.py:219 msgid "just now" msgstr "" #: util/helper.py:221 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:833 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" #: util/helper.py:836 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "" msgstr[1] "" #: util/helper.py:839 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "" msgstr[1] "" #: util/helper.py:842 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "" msgstr[1] "" #: util/helper.py:845 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "" msgstr[1] "" #: util/helper.py:848 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "" msgstr[1] "" #: util/helper.py:851 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "" msgstr[1] "" #: util/contextmenuitems.py:321 msgid "Debug" msgstr "" #: util/contextmenuitems.py:326 msgid "Bugs" msgstr "" #: util/contextmenuitems.py:331 msgid "Open Shell" msgstr "" #: util/contextmenuitems.py:337 msgid "Refresh Status" msgstr "" #: util/contextmenuitems.py:342 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:343 msgid "Reverts everything it sees" msgstr "" #: util/contextmenuitems.py:349 msgid "Invalidate" msgstr "" #: util/contextmenuitems.py:350 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:356 msgid "Add Emblem" msgstr "" #: util/contextmenuitems.py:357 msgid "Add an emblem" msgstr "" #: util/contextmenuitems.py:363 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:364 msgid "Check out a working copy" msgstr "" #: util/contextmenuitems.py:369 ui/xml/update.xml.h:1 ui/update.py:55 #: ui/update.py:104 msgid "Update" msgstr "" #: util/contextmenuitems.py:370 msgid "Update a working copy" msgstr "" #: util/contextmenuitems.py:375 ui/xml/commit.xml.h:1 ui/commit.py:318 #: ui/commit.py:386 msgid "Commit" msgstr "" #: util/contextmenuitems.py:376 msgid "Commit modifications to the repository" msgstr "" #: util/contextmenuitems.py:381 ui/xml/property_page.xml.h:5 msgid "RabbitVCS" msgstr "" #: util/contextmenuitems.py:386 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:391 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:396 msgid "RabbitVCS Hg" msgstr "" #: util/contextmenuitems.py:401 ui/xml/browser.xml.h:1 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:402 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:407 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:408 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:413 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:414 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:419 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:420 msgid "View the modifications made to a file" msgstr "" #: util/contextmenuitems.py:425 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:426 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:431 ui/log.py:988 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:432 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:437 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:438 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:443 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:444 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:449 ui/log.py:1003 msgid "Compare with previous revision" msgstr "" #: util/contextmenuitems.py:450 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:455 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:456 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:461 msgid "Show Log" msgstr "" #: util/contextmenuitems.py:462 msgid "Show a file's log information" msgstr "" #: util/contextmenuitems.py:467 ui/xml/add.xml.h:1 ui/widget.py:1431 #: ui/add.py:215 ui/add.py:240 ui/tags.py:284 msgid "Add" msgstr "" #: util/contextmenuitems.py:468 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:473 msgid "Add to ignore list" msgstr "" #: util/contextmenuitems.py:478 msgid "Update to revision..." msgstr "" #: util/contextmenuitems.py:479 msgid "Update a file to a specific revision" msgstr "" #: util/contextmenuitems.py:484 msgid "Rename..." msgstr "" #: util/contextmenuitems.py:485 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:490 msgid "Delete" msgstr "" #: util/contextmenuitems.py:491 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:496 ui/revert.py:175 ui/revert.py:201 #: ui/xml/revert.xml.h:1 msgid "Revert" msgstr "" #: util/contextmenuitems.py:497 msgid "Revert an item to its unmodified state" msgstr "" #: util/contextmenuitems.py:502 ui/markresolved.py:45 ui/markresolved.py:76 msgid "Mark as Resolved" msgstr "" #: util/contextmenuitems.py:503 msgid "Mark a conflicted item as resolved" msgstr "" #: util/contextmenuitems.py:508 msgid "Restore" msgstr "" #: util/contextmenuitems.py:509 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:513 msgid "Relocate..." msgstr "" #: util/contextmenuitems.py:514 msgid "Relocate your working copy" msgstr "" #: util/contextmenuitems.py:519 msgid "Get Lock..." msgstr "" #: util/contextmenuitems.py:520 msgid "Locally lock items" msgstr "" #: util/contextmenuitems.py:525 msgid "Release Lock..." msgstr "" #: util/contextmenuitems.py:526 msgid "Release lock on an item" msgstr "" #: util/contextmenuitems.py:531 ui/cleanup.py:56 msgid "Cleanup" msgstr "" #: util/contextmenuitems.py:532 msgid "Clean up working copy" msgstr "" #: util/contextmenuitems.py:537 msgid "Export..." msgstr "" #: util/contextmenuitems.py:538 msgid "Export a working copy or repository with no versioning information" msgstr "" #: util/contextmenuitems.py:551 msgid "Create Repository here" msgstr "" #: util/contextmenuitems.py:552 msgid "Create a repository in a folder" msgstr "" #: util/contextmenuitems.py:557 ui/xml/import.xml.h:1 ui/import.py:75 msgid "Import" msgstr "" #: util/contextmenuitems.py:558 msgid "Import an item into a repository" msgstr "" #: util/contextmenuitems.py:567 msgid "Branch/tag..." msgstr "" #: util/contextmenuitems.py:568 msgid "Copy an item to another location in the repository" msgstr "" #: util/contextmenuitems.py:573 msgid "Switch..." msgstr "" #: util/contextmenuitems.py:574 msgid "Change the repository location of a working copy" msgstr "" #: util/contextmenuitems.py:579 msgid "Merge..." msgstr "" #: util/contextmenuitems.py:580 msgid "A wizard with steps for merging" msgstr "" #: util/contextmenuitems.py:585 msgid "Annotate..." msgstr "" #: util/contextmenuitems.py:586 msgid "Annotate a file" msgstr "" #: util/contextmenuitems.py:591 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:592 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:597 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:598 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:603 ui/xml/properties.xml.h:1 msgid "Properties" msgstr "" #: util/contextmenuitems.py:604 msgid "View the properties of an item" msgstr "" #: util/contextmenuitems.py:609 msgid "Help" msgstr "" #: util/contextmenuitems.py:610 msgid "View help" msgstr "" #: util/contextmenuitems.py:615 ui/xml/settings.xml.h:1 msgid "Settings" msgstr "" #: util/contextmenuitems.py:616 msgid "View or change RabbitVCS settings" msgstr "" #: util/contextmenuitems.py:621 msgid "About" msgstr "" #: util/contextmenuitems.py:622 msgid "About RabbitVCS" msgstr "" #: util/contextmenuitems.py:627 msgid "Open" msgstr "" #: util/contextmenuitems.py:628 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:636 msgid "Browse to" msgstr "" #: util/contextmenuitems.py:637 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:642 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:644 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:648 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:650 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:655 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:657 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:661 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:663 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:668 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:670 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:674 ui/create.py:68 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:679 ui/clone.py:47 ui/clone.py:68 msgid "Clone" msgstr "" #: util/contextmenuitems.py:684 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:689 msgid "Push" msgstr "" #: util/contextmenuitems.py:694 msgid "Branches" msgstr "" #: util/contextmenuitems.py:699 msgid "Tags" msgstr "" #: util/contextmenuitems.py:704 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:709 ui/clean.py:66 ui/xml/clean.xml.h:1 msgid "Clean" msgstr "" #: util/contextmenuitems.py:713 ui/reset.py:96 ui/xml/reset.xml.h:1 msgid "Reset" msgstr "" #: util/contextmenuitems.py:718 ui/stage.py:48 ui/stage.py:73 msgid "Stage" msgstr "" #: util/contextmenuitems.py:723 ui/unstage.py:48 ui/unstage.py:73 msgid "Unstage" msgstr "" #: util/contextmenuitems.py:728 msgid "Edit conflicts" msgstr "" #: util/contextmenuitems.py:754 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:773 msgid "Ignore item by file extension" msgstr "" #: ui/revert.py:74 ui/markresolved.py:50 ui/lock.py:71 ui/log.py:392 #: ui/log.py:678 ui/action.py:120 ui/browser.py:91 ui/add.py:77 ui/commit.py:85 msgid "Path" msgstr "" #: ui/revert.py:74 ui/markresolved.py:51 ui/lock.py:71 ui/add.py:78 #: ui/commit.py:85 msgid "Extension" msgstr "" #: ui/revert.py:106 ui/lock.py:111 ui/unlock.py:67 ui/add.py:111 #: ui/commit.py:131 msgid "Loading..." msgstr "" #: ui/revert.py:110 ui/lock.py:114 ui/unlock.py:90 ui/add.py:133 #, python-format msgid "Found %d item(s)" msgstr "" #: ui/revert.py:176 ui/revert.py:202 msgid "Running Revert Command..." msgstr "" #: ui/revert.py:178 ui/revert.py:204 msgid "Completed Revert" msgstr "" #: ui/remotes.py:61 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:62 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:68 ui/properties.py:64 ui/property_editor.py:114 msgid "Name" msgstr "" #: ui/remotes.py:68 msgid "Host" msgstr "" #: ui/remotes.py:123 ui/tags.py:238 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/unstage.py:74 msgid "Running Unstage Command..." msgstr "" #: ui/unstage.py:77 msgid "Completed Unstage" msgstr "" #: ui/reset.py:97 msgid "Running Reset Command..." msgstr "" #: ui/reset.py:104 msgid "Completed Reset" msgstr "" #: ui/markresolved.py:51 ui/commit.py:86 msgid "Text Status" msgstr "" #: ui/markresolved.py:51 ui/commit.py:86 msgid "Property Status" msgstr "" #: ui/markresolved.py:77 msgid "Running Resolved Command..." msgstr "" #: ui/markresolved.py:80 msgid "Completed Mark as Resolved" msgstr "" #: ui/ignore.py:101 msgid "Ignore file:" msgstr "" #: ui/stage.py:74 msgid "Running Stage Command..." msgstr "" #: ui/stage.py:77 msgid "Completed Stage" msgstr "" #: ui/lock.py:72 msgid "Locked" msgstr "" #: ui/lock.py:121 msgid "Yes" msgstr "" #: ui/lock.py:156 msgid "Get Lock" msgstr "" #: ui/lock.py:157 msgid "Running Lock Command..." msgstr "" #: ui/lock.py:166 msgid "Completed Lock" msgstr "" #: ui/log.py:51 ui/log.py:375 ui/log.py:662 ui/xml/merge.xml.h:19 #: ui/widget.py:1038 ui/browser.py:91 ui/annotate.py:131 ui/annotate.py:235 msgid "Revision" msgstr "" #: ui/log.py:52 ui/log.py:376 ui/log.py:663 ui/browser.py:91 ui/dialog.py:51 #: ui/annotate.py:132 ui/annotate.py:236 msgid "Date" msgstr "" #: ui/log.py:53 ui/log.py:375 ui/log.py:662 ui/browser.py:91 ui/annotate.py:131 #: ui/annotate.py:235 msgid "Author" msgstr "" #: ui/log.py:126 #, python-format msgid "Log - %s" msgstr "" #: ui/log.py:307 ui/log.py:308 ui/xml/log.xml.h:7 msgid "N/A" msgstr "" #: ui/log.py:376 ui/log.py:663 ui/xml/dialogs/message_box.xml.h:1 #: ui/dialog.py:51 msgid "Message" msgstr "" #: ui/log.py:377 msgid "Color" msgstr "" #: ui/log.py:392 ui/log.py:678 ui/action.py:120 msgid "Action" msgstr "" #: ui/log.py:393 msgid "Copy From Path" msgstr "" #: ui/log.py:393 msgid "Copy From Revision" msgstr "" #: ui/log.py:662 msgid "Graph" msgstr "" #: ui/log.py:929 ui/browser.py:322 ui/dialog.py:110 msgid "_Select" msgstr "" #: ui/log.py:983 msgid "View diff against working copy" msgstr "" #: ui/log.py:993 msgid "View diff between revisions" msgstr "" #: ui/log.py:998 msgid "Compare with working copy" msgstr "" #: ui/log.py:1008 msgid "Compare revisions" msgstr "" #: ui/log.py:1014 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:1020 msgid "Show changes between revisions" msgstr "" #: ui/log.py:1025 msgid "Update to this revision" msgstr "" #: ui/log.py:1026 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:1031 msgid "Revert changes from this revision" msgstr "" #: ui/log.py:1032 msgid "Update the selected path by reverse merging the changes" msgstr "" #: ui/log.py:1037 msgid "Copy to clipboard" msgstr "" #: ui/log.py:1038 msgid "Copy to clipboard the full data of these revisions" msgstr "" #: ui/log.py:1042 ui/log.py:1046 msgid "Edit author..." msgstr "" #: ui/log.py:1050 msgid "Edit log message..." msgstr "" #: ui/log.py:1054 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1334 msgid "Edit author" msgstr "" #: ui/log.py:1346 msgid "Edit log message" msgstr "" #: ui/unlock.py:46 ui/unlock.py:108 msgid "Unlock" msgstr "" #: ui/unlock.py:109 msgid "Running Unlock Command..." msgstr "" #: ui/unlock.py:112 msgid "Completed Unlock" msgstr "" #: ui/__init__.py:52 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/clean.py:67 msgid "Running Clean Command..." msgstr "" #: ui/clean.py:77 msgid "Completed Clean" msgstr "" #: ui/action.py:120 msgid "Mime Type" msgstr "" #: ui/action.py:360 msgid "Finished" msgstr "" #: ui/action.py:364 #, python-format msgid "%s - Finished" msgstr "" #: ui/action.py:386 msgid "Log Message" msgstr "" #: ui/xml/revert.xml.h:2 ui/xml/commit.xml.h:2 ui/xml/relocate.xml.h:2 #: ui/xml/update.xml.h:2 ui/xml/settings.xml.h:2 ui/xml/add.xml.h:2 #: ui/xml/dialogs/delete_confirmation.xml.h:2 #: ui/xml/dialogs/name_email_prompt.xml.h:2 #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:2 #: ui/xml/dialogs/previous_messages.xml.h:2 ui/xml/dialogs/property.xml.h:2 #: ui/xml/dialogs/create_folder.xml.h:2 ui/xml/dialogs/loading.xml.h:2 #: ui/xml/ignore.xml.h:2 ui/xml/clean.xml.h:2 ui/xml/properties.xml.h:2 #: ui/xml/notification.xml.h:2 ui/xml/git-update.xml.h:1 ui/xml/lock.xml.h:2 #: ui/xml/import.xml.h:2 ui/xml/reset.xml.h:2 ui/dialog.py:109 ui/dialog.py:281 #: ui/dialog.py:301 msgid "_Cancel" msgstr "" #: ui/xml/revert.xml.h:3 ui/xml/commit.xml.h:3 ui/xml/relocate.xml.h:3 #: ui/xml/update.xml.h:3 ui/xml/settings.xml.h:3 ui/xml/add.xml.h:3 #: ui/xml/dialogs/name_email_prompt.xml.h:3 #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:3 #: ui/xml/dialogs/message_box.xml.h:2 ui/xml/dialogs/previous_messages.xml.h:3 #: ui/xml/dialogs/property.xml.h:3 ui/xml/dialogs/create_folder.xml.h:3 #: ui/xml/ignore.xml.h:3 ui/xml/clean.xml.h:3 ui/xml/notification.xml.h:3 #: ui/xml/git-update.xml.h:2 ui/xml/lock.xml.h:3 ui/xml/import.xml.h:3 #: ui/xml/reset.xml.h:3 msgid "_OK" msgstr "" #: ui/xml/revert.xml.h:4 ui/xml/commit.xml.h:8 ui/xml/add.xml.h:5 #: ui/xml/lock.xml.h:5 msgid "Select / Deselect all" msgstr "" #: ui/xml/commit.xml.h:4 ui/xml/log.xml.h:2 msgid "Refresh" msgstr "" #: ui/xml/commit.xml.h:5 ui/xml/dialogs/previous_messages.xml.h:1 #: ui/xml/lock.xml.h:7 ui/xml/import.xml.h:5 msgid "Previous Messages" msgstr "" #: ui/xml/commit.xml.h:6 ui/xml/dialogs/create_folder.xml.h:5 msgid "Add Message" msgstr "" #: ui/xml/commit.xml.h:7 msgid "Show unversioned files" msgstr "" #: ui/xml/commit.xml.h:9 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/xml/commit.xml.h:10 msgid "Commit to:" msgstr "" #: ui/xml/property_editor.xml.h:1 msgid "Property Editor" msgstr "" #: ui/xml/property_editor.xml.h:2 ui/xml/browser.xml.h:3 ui/xml/manager.xml.h:1 #: ui/xml/dialogs/error_notification.xml.h:2 ui/xml/log.xml.h:1 #: ui/xml/annotate.xml.h:3 msgid "_Close" msgstr "" #: ui/xml/property_editor.xml.h:3 msgid "Close this dialog." msgstr "" #: ui/xml/property_editor.xml.h:4 msgid "_Refresh" msgstr "" #: ui/xml/property_editor.xml.h:5 msgid "Refresh the list of properties." msgstr "" #: ui/xml/property_editor.xml.h:6 msgid "_New" msgstr "" #: ui/xml/property_editor.xml.h:7 msgid "Add a new property." msgstr "" #: ui/xml/property_editor.xml.h:8 msgid "Remote URI:" msgstr "" #: ui/xml/property_editor.xml.h:9 msgid "Working Copy:" msgstr "" #: ui/xml/browser.xml.h:2 msgid "Load/Refresh" msgstr "" #: ui/xml/browser.xml.h:4 ui/tags.py:108 ui/tags.py:176 ui/merge.py:508 msgid "Revision:" msgstr "" #: ui/xml/browser.xml.h:5 msgid "URL:" msgstr "" #: ui/xml/relocate.xml.h:1 ui/relocate.py:82 msgid "Relocate" msgstr "" #: ui/xml/relocate.xml.h:4 msgid "To:" msgstr "" #: ui/xml/relocate.xml.h:5 msgid "From:" msgstr "" #: ui/xml/relocate.xml.h:6 msgid "Change the repository of your working copy" msgstr "" #: ui/xml/update.xml.h:4 msgid "Rollback to specified revision number" msgstr "" #: ui/xml/update.xml.h:5 msgid "Omit Externals" msgstr "" #: ui/xml/update.xml.h:6 ui/xml/merge.xml.h:29 msgid "Recursive" msgstr "" #: ui/xml/update.xml.h:7 ui/xml/merge.xml.h:30 ui/xml/git-update.xml.h:7 #: ui/xml/reset.xml.h:13 msgid "Options" msgstr "" #: ui/xml/update.xml.h:8 ui/xml/reset.xml.h:14 msgid "Revision" msgstr "" #: ui/xml/merge.xml.h:1 msgid "Merge Assistant" msgstr "" #: ui/xml/merge.xml.h:2 msgid "Choose this method if you wish to reintegrate a branch into the trunk." msgstr "" #: ui/xml/merge.xml.h:3 msgid "Reintegrate a branch" msgstr "" #: ui/xml/merge.xml.h:4 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" #: ui/xml/merge.xml.h:5 msgid "Merge two different trees" msgstr "" #: ui/xml/merge.xml.h:6 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" #: ui/xml/merge.xml.h:7 msgid "Merge a range of revisions" msgstr "" #: ui/xml/merge.xml.h:8 msgid "Step 1: Merge Type" msgstr "" #: ui/xml/merge.xml.h:9 msgid "Working Copy" msgstr "" #: ui/xml/merge.xml.h:10 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" #: ui/xml/merge.xml.h:15 msgid "Show log" msgstr "" #: ui/xml/merge.xml.h:16 msgid "Revision Range" msgstr "" #: ui/xml/merge.xml.h:17 msgid "URL to merge from" msgstr "" #: ui/xml/merge.xml.h:18 msgid "Step 2: Merge a Range of Revisions" msgstr "" #: ui/xml/merge.xml.h:20 ui/widget.py:1037 ui/widget.py:1043 msgid "HEAD" msgstr "" #: ui/xml/merge.xml.h:21 msgid "To: (URL and revision to merge)" msgstr "" #: ui/xml/merge.xml.h:22 msgid "From: (URL and revision to merge)" msgstr "" #: ui/xml/merge.xml.h:23 msgid "Step 2: Merge two different trees" msgstr "" #: ui/xml/merge.xml.h:24 msgid "From URL" msgstr "" #: ui/xml/merge.xml.h:25 msgid "Step 2: Reintegrate a Branch" msgstr "" #: ui/xml/merge.xml.h:26 msgid "Test Merge" msgstr "" #: ui/xml/merge.xml.h:27 msgid "Only record the merge" msgstr "" #: ui/xml/merge.xml.h:28 msgid "Ignore ancestry" msgstr "" #: ui/xml/merge.xml.h:31 msgid "Step 3: Final Options" msgstr "" #: ui/xml/settings.xml.h:4 msgid "Version Control Systems" msgstr "" #: ui/xml/settings.xml.h:5 msgid "Enable Subversion" msgstr "" #: ui/xml/settings.xml.h:6 msgid "Enable Git" msgstr "" #: ui/xml/settings.xml.h:7 msgid "Show RabbitVCS debugging tools" msgstr "" #: ui/xml/settings.xml.h:8 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/xml/settings.xml.h:9 msgid "Enable emblems" msgstr "" #: ui/xml/settings.xml.h:10 msgid "Enable recursive status checks" msgstr "" #: ui/xml/settings.xml.h:11 msgid "Enable file attributes" msgstr "" #: ui/xml/settings.xml.h:12 msgid "RabbitVCS" msgstr "" #: ui/xml/settings.xml.h:13 msgid "General" msgstr "" #: ui/xml/settings.xml.h:14 msgid "Configure the program to resolve conflicted files." msgstr "" #: ui/xml/settings.xml.h:16 msgid "" "Use the following macros to configure the merge tool:\n" "%base - The common ancestor of the two files to be merged.\n" "%mine - The file you modified in your working copy.\n" "%theirs - The file being merged into your working copy.\n" "%merged - The file to store the merged result." msgstr "" #: ui/xml/settings.xml.h:21 msgid "Browse..." msgstr "" #: ui/xml/settings.xml.h:22 msgid "Show new version on the left side" msgstr "" #: ui/xml/settings.xml.h:23 msgid "Program used to compare files" msgstr "" #: ui/xml/settings.xml.h:24 msgid "External Programs" msgstr "" #: ui/xml/settings.xml.h:25 msgid "Clear" msgstr "" #: ui/xml/settings.xml.h:26 msgid "Clear your authentication information" msgstr "" #: ui/xml/settings.xml.h:27 msgid "Authentication" msgstr "" #: ui/xml/settings.xml.h:28 msgid "Number of messages to remember" msgstr "" #: ui/xml/settings.xml.h:29 msgid "Log Messages" msgstr "" #: ui/xml/settings.xml.h:30 msgid "Number of URLs to remember" msgstr "" #: ui/xml/settings.xml.h:31 msgid "URL History" msgstr "" #: ui/xml/settings.xml.h:32 msgid "Saved Data" msgstr "" #: ui/xml/settings.xml.h:33 msgid "Logging Options" msgstr "" #: ui/xml/settings.xml.h:34 msgid "Minimum level to log:" msgstr "" #: ui/xml/settings.xml.h:35 msgid "Type:" msgstr "" #: ui/xml/settings.xml.h:36 msgid "Logging" msgstr "" #: ui/xml/settings.xml.h:37 msgid "Refresh Information" msgstr "" #: ui/xml/settings.xml.h:38 msgid "Restart Checker" msgstr "" #: ui/xml/settings.xml.h:39 msgid "Stop Checker" msgstr "" #: ui/xml/settings.xml.h:40 msgid "Other Information" msgstr "" #: ui/xml/settings.xml.h:41 msgid "Checker type:" msgstr "" #: ui/xml/settings.xml.h:42 ui/settings.py:43 msgid "Unknown" msgstr "" #: ui/xml/settings.xml.h:43 msgid "Process ID:" msgstr "" #: ui/xml/settings.xml.h:44 msgid "Memory usage: " msgstr "" #: ui/xml/settings.xml.h:45 msgid "Locale: " msgstr "" #: ui/xml/settings.xml.h:46 msgid "Status Checker" msgstr "" #: ui/xml/settings.xml.h:47 msgid "Configuration Editor" msgstr "" #: ui/xml/settings.xml.h:48 msgid "Git" msgstr "" #: ui/xml/add.xml.h:4 msgid "Show ignored files" msgstr "" #: ui/xml/dialogs/delete_confirmation.xml.h:1 msgid "Delete Confirmation" msgstr "" #: ui/xml/dialogs/delete_confirmation.xml.h:3 ui/xml/properties.xml.h:6 msgid "_Delete" msgstr "" #: ui/xml/dialogs/delete_confirmation.xml.h:4 msgid "The item(s) will be sent to the trash can." msgstr "" #: ui/xml/dialogs/delete_confirmation.xml.h:6 msgid "" "Are you sure you want to delete %item%?" msgstr "" #: ui/xml/dialogs/certificate.xml.h:1 msgid "Check Certificate" msgstr "" #: ui/xml/dialogs/certificate.xml.h:2 msgid "Accept Once" msgstr "" #: ui/xml/dialogs/certificate.xml.h:3 msgid "Accept Forever" msgstr "" #: ui/xml/dialogs/certificate.xml.h:4 msgid "Deny" msgstr "" #: ui/xml/dialogs/certificate.xml.h:5 msgid "Fingerprint:" msgstr "" #: ui/xml/dialogs/certificate.xml.h:6 msgid "Valid:" msgstr "" #: ui/xml/dialogs/certificate.xml.h:7 msgid "Issuer:" msgstr "" #: ui/xml/dialogs/certificate.xml.h:8 ui/widget.py:1310 msgid "Host:" msgstr "" #: ui/xml/dialogs/certificate.xml.h:9 #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:6 msgid "Realm:" msgstr "" #: ui/xml/dialogs/certificate.xml.h:10 msgid "Certificate Details" msgstr "" #: ui/xml/dialogs/name_email_prompt.xml.h:1 msgid "Name and Email" msgstr "" #: ui/xml/dialogs/name_email_prompt.xml.h:4 msgid "Enter Name and Email Details" msgstr "" #: ui/xml/dialogs/name_email_prompt.xml.h:5 msgid "Email:" msgstr "" #: ui/xml/dialogs/name_email_prompt.xml.h:6 ui/xml/property_page.xml.h:4 #: ui/tags.py:98 msgid "Name:" msgstr "" #: ui/xml/dialogs/confirmation.xml.h:1 msgid "Confirmation" msgstr "" #: ui/xml/dialogs/confirmation.xml.h:2 msgid "_No" msgstr "" #: ui/xml/dialogs/confirmation.xml.h:3 msgid "_Yes" msgstr "" #: ui/xml/dialogs/confirmation.xml.h:4 ui/dialog.py:316 msgid "Are you sure you want to continue?" msgstr "" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:1 msgid "SSL Client Certification" msgstr "" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:4 msgid "Save Authentication" msgstr "" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:5 msgid "Path:" msgstr "" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:7 msgid "Please provide your ssl certification file" msgstr "" #: ui/xml/dialogs/previous_messages.xml.h:4 msgid "Previous Messages" msgstr "" #: ui/xml/dialogs/previous_messages.xml.h:5 ui/xml/log.xml.h:13 msgid "Message" msgstr "" #: ui/xml/dialogs/mark_resolved_prompt.xml.h:1 msgid "Mark Resolved" msgstr "" #: ui/xml/dialogs/mark_resolved_prompt.xml.h:2 msgid "Unresolved" msgstr "" #: ui/xml/dialogs/mark_resolved_prompt.xml.h:3 msgid "Resolved" msgstr "" #: ui/xml/dialogs/mark_resolved_prompt.xml.h:4 msgid "Mark Conflict As" msgstr "" #: ui/xml/dialogs/property.xml.h:1 msgid "Property" msgstr "" #: ui/xml/dialogs/property.xml.h:4 msgid "Apply property recursively" msgstr "" #: ui/xml/dialogs/property.xml.h:5 msgid "Value:" msgstr "" #: ui/xml/dialogs/property.xml.h:6 msgid "Property:" msgstr "" #: ui/xml/dialogs/property.xml.h:7 msgid "Edit Property Details" msgstr "" #: ui/xml/dialogs/error_notification.xml.h:1 msgid "RabbitVCS Error" msgstr "" #: ui/xml/dialogs/error_notification.xml.h:3 msgid "RabbitVCS Error" msgstr "" #: ui/xml/dialogs/conflict_decision.xml.h:1 msgid "Edit Conflicts" msgstr "" #: ui/xml/dialogs/conflict_decision.xml.h:2 msgid "Cancel" msgstr "" #: ui/xml/dialogs/conflict_decision.xml.h:3 msgid "Accept Mine" msgstr "" #: ui/xml/dialogs/conflict_decision.xml.h:4 msgid "Accept Theirs" msgstr "" #: ui/xml/dialogs/conflict_decision.xml.h:5 msgid "A conflict was found in the following file:" msgstr "" #: ui/xml/dialogs/create_folder.xml.h:1 msgid "Create Folder..." msgstr "" #: ui/xml/dialogs/create_folder.xml.h:4 msgid "Folder Name" msgstr "" #: ui/xml/dialogs/loading.xml.h:1 msgid "Loading" msgstr "" #: ui/xml/ignore.xml.h:1 msgid "Ignore" msgstr "" #: ui/xml/ignore.xml.h:4 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/xml/clean.xml.h:4 msgid "Force" msgstr "" #: ui/xml/clean.xml.h:5 msgid "Dry run" msgstr "" #: ui/xml/clean.xml.h:6 msgid "Remove only ignored files" msgstr "" #: ui/xml/clean.xml.h:7 msgid "Remove ignored files, too" msgstr "" #: ui/xml/clean.xml.h:8 msgid "Remove directories" msgstr "" #: ui/xml/clean.xml.h:9 msgid "Remove untracked files from the working tree" msgstr "" #: ui/xml/clean.xml.h:10 msgid "Clean your Repository" msgstr "" #: ui/xml/properties.xml.h:3 ui/dialog.py:302 msgid "_Save" msgstr "" #: ui/xml/properties.xml.h:4 msgid "_New..." msgstr "" #: ui/xml/properties.xml.h:5 msgid "_Edit..." msgstr "" #: ui/xml/properties.xml.h:7 msgid "Delete properties recursively" msgstr "" #: ui/xml/properties.xml.h:8 msgid "Selected properties will be applied recursively." msgstr "" #: ui/xml/properties.xml.h:9 msgid "Properties for:" msgstr "" #: ui/xml/notification.xml.h:1 msgid "Notification Messages" msgstr "" #: ui/xml/notification.xml.h:4 ui/xml/annotate.xml.h:2 msgid "Save _As" msgstr "" #: ui/xml/git-update.xml.h:3 msgid "Fetch from all remotes" msgstr "" #: ui/xml/git-update.xml.h:4 msgid "Apply remote changes prior to local changes (rebase)" msgstr "" #: ui/xml/git-update.xml.h:5 msgid "Merge into local branch" msgstr "" #: ui/xml/git-update.xml.h:6 msgid "Apply remote changes" msgstr "" #: ui/xml/log.xml.h:3 msgid "100" msgstr "" #: ui/xml/log.xml.h:4 msgid "Limit:" msgstr "" #: ui/xml/log.xml.h:5 msgid "_Back" msgstr "" #: ui/xml/log.xml.h:6 msgid "_Forward" msgstr "" #: ui/xml/log.xml.h:8 ui/dialog.py:136 msgid "to" msgstr "" #: ui/xml/log.xml.h:9 msgid "Showing Revisions:" msgstr "" #: ui/xml/log.xml.h:10 msgid "Stop on copy" msgstr "" #: ui/xml/log.xml.h:11 msgid "Revisions Table" msgstr "" #: ui/xml/log.xml.h:12 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/xml/lock.xml.h:1 msgid "Lock Files" msgstr "" #: ui/xml/lock.xml.h:4 msgid "Steal the locks" msgstr "" #: ui/xml/lock.xml.h:6 msgid "Files to lock" msgstr "" #: ui/xml/lock.xml.h:8 msgid "Please describe why you are locking these files" msgstr "" #: ui/xml/annotate.xml.h:1 msgid "Annotate" msgstr "" #: ui/xml/annotate.xml.h:4 msgid "To Revision" msgstr "" #: ui/xml/annotate.xml.h:5 msgid "From Revision" msgstr "" #: ui/xml/import.xml.h:4 msgid "Include ignored files" msgstr "" #: ui/xml/import.xml.h:6 msgid "Import Message" msgstr "" #: ui/xml/import.xml.h:7 msgid "Repository" msgstr "" #: ui/xml/reset.xml.h:4 msgid "None" msgstr "" #: ui/xml/reset.xml.h:5 msgid "" "Merge - Resets the index to match the tree recorded by the named " "commit,\n" "and updates the files that are different between the named commit\n" "and the current commit in the working tree" msgstr "" #: ui/xml/reset.xml.h:8 msgid "" "Hard - Matches the working tree and index to that of the \n" "tree being switched to" msgstr "" #: ui/xml/reset.xml.h:10 msgid "" "Soft - Does not touch the index file or working tree at all, \n" "but requires them to be in good working order" msgstr "" #: ui/xml/reset.xml.h:12 msgid "Mixed - Reset the index but not the working tree" msgstr "" #: ui/xml/reset.xml.h:15 msgid "Path" msgstr "" #: ui/xml/reset.xml.h:16 msgid "Reset current HEAD to specified state." msgstr "" #: ui/xml/reset.xml.h:17 msgid "Reset your Repository" msgstr "" #: ui/xml/property_page.xml.h:1 msgid "Property status:" msgstr "" #: ui/xml/property_page.xml.h:2 msgid "Content status:" msgstr "" #: ui/xml/property_page.xml.h:3 msgid "VCS:" msgstr "" #: ui/rename.py:50 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:54 ui/rename.py:86 ui/rename.py:115 ui/browser.py:465 msgid "Rename" msgstr "" #: ui/rename.py:54 ui/browser.py:465 msgid "New Name:" msgstr "" #: ui/rename.py:62 msgid "The new name field is required" msgstr "" #: ui/rename.py:87 ui/rename.py:116 msgid "Running Rename Command..." msgstr "" #: ui/rename.py:93 ui/rename.py:122 msgid "Completed Rename" msgstr "" #: ui/update.py:56 ui/update.py:105 ui/updateto.py:92 msgid "Updating..." msgstr "" #: ui/update.py:58 ui/update.py:123 ui/updateto.py:100 msgid "Completed Update" msgstr "" #: ui/revprops.py:66 ui/properties.py:153 ui/property_editor.py:158 msgid "Unable to retrieve properties list" msgstr "" #: ui/widget.py:1039 msgid "Branch" msgstr "" #: ui/widget.py:1044 msgid "Number" msgstr "" #: ui/widget.py:1047 msgid "Working Copy" msgstr "" #: ui/widget.py:1268 msgid "Repository:" msgstr "" #: ui/widget.py:1285 msgid "Branch:" msgstr "" #: ui/widget.py:1426 msgid "Add line:" msgstr "" #: ui/browser.py:91 msgid "Size" msgstr "" #: ui/browser.py:341 msgid "Create folder..." msgstr "" #: ui/browser.py:346 msgid "Copy to..." msgstr "" #: ui/browser.py:351 msgid "Copy URL to clipboard" msgstr "" #: ui/browser.py:356 msgid "Move to..." msgstr "" #: ui/browser.py:526 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:527 ui/browser.py:556 msgid "New Location:" msgstr "" #: ui/browser.py:555 msgid "Where do you want to move the selection?" msgstr "" #: ui/relocate.py:72 msgid "The from and to url fields are both required." msgstr "" #: ui/relocate.py:83 msgid "Running Relocate Command..." msgstr "" #: ui/relocate.py:90 msgid "Completed Relocate" msgstr "" #: ui/add.py:216 ui/add.py:241 msgid "Running Add Command..." msgstr "" #: ui/add.py:218 ui/add.py:243 msgid "Completed Add" msgstr "" #: ui/updateto.py:80 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:81 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:89 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:91 msgid "Update To Revision" msgstr "" #: ui/updateto.py:117 msgid "What revision/branch do you want to checkout?" msgstr "" #: ui/updateto.py:138 msgid "Checkout" msgstr "" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 msgid "Completed Checkout" msgstr "" #: ui/create.py:52 msgid "Repository successfully created" msgstr "" #: ui/create.py:54 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" #: ui/create.py:69 msgid "Setting up repository..." msgstr "" #: ui/create.py:71 msgid "Completed repository setup" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:127 ui/tags.py:188 ui/merge.py:520 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:295 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:497 msgid "Date:" msgstr "" #: ui/tags.py:286 msgid "Add Tag" msgstr "" #: ui/tags.py:304 msgid "Tag Detail" msgstr "" #: ui/property_page.py:146 ui/property_page.py:152 msgid "Repository URL" msgstr "" #: ui/properties.py:56 #, python-format msgid "Properties - %s" msgstr "" #: ui/properties.py:64 ui/property_editor.py:114 msgid "Value" msgstr "" #: ui/properties.py:174 msgid "There was a problem saving your properties." msgstr "" #: ui/merge.py:103 msgid "Running Merge Test" msgstr "" #: ui/merge.py:104 msgid "Completed Merge Test" msgstr "" #: ui/merge.py:106 msgid "Running Merge Command" msgstr "" #: ui/merge.py:107 ui/merge.py:566 msgid "Completed Merge" msgstr "" #: ui/merge.py:118 ui/merge.py:559 msgid "Merge" msgstr "" #: ui/merge.py:474 msgid "No active branch" msgstr "" #: ui/merge.py:485 msgid "Author:" msgstr "" #: ui/merge.py:560 msgid "Running Merge Command..." msgstr "" #: ui/dialog.py:35 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:106 msgid "Select a Folder" msgstr "" #: ui/dialog.py:276 msgid "Select a File" msgstr "" #: ui/dialog.py:282 msgid "_Open" msgstr "" #: ui/dialog.py:296 msgid "Save As..." msgstr "" #: ui/dialog.py:344 msgid "the selected item(s)" msgstr "" #: ui/dialog.py:415 msgid "Added a folder to the repository" msgstr "" #: ui/annotate.py:58 msgid "Cannot annotate a directory" msgstr "" #: ui/annotate.py:64 #, python-format msgid "Annotate - %s" msgstr "" #: ui/annotate.py:131 ui/annotate.py:235 msgid "Line" msgstr "" #: ui/annotate.py:132 ui/annotate.py:236 msgid "Text" msgstr "" #: ui/annotate.py:149 msgid "The from revision field must be an integer" msgstr "" #: ui/property_editor.py:57 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:62 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:104 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:114 msgid "Reserved" msgstr "" #: ui/property_editor.py:114 msgid "Status" msgstr "" #: ui/property_editor.py:182 msgid "Unable to set new value for property." msgstr "" #: ui/cleanup.py:57 msgid "Cleaning Up..." msgstr "" #: ui/cleanup.py:59 msgid "Completed Cleanup" msgstr "" #: ui/import.py:41 #, python-format msgid "Import - %s" msgstr "" #: ui/import.py:63 msgid "The repository URL field is required." msgstr "" #: ui/import.py:76 msgid "Running Import Command..." msgstr "" #: ui/import.py:84 msgid "Completed Import" msgstr "" #: ui/clone.py:60 ui/export.py:73 ui/export.py:142 msgid "The repository URL and destination path are both required fields." msgstr "" #: ui/clone.py:69 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:76 msgid "Completed Clone" msgstr "" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:124 msgid "Config file:" msgstr "" #: ui/settings.py:300 msgid "Select a program" msgstr "" #: ui/settings.py:309 msgid "Are you sure you want to clear your repository paths?" msgstr "" #: ui/settings.py:316 msgid "Repository paths cleared" msgstr "" #: ui/settings.py:320 msgid "Are you sure you want to clear your previous messages?" msgstr "" #: ui/settings.py:327 msgid "Previous messages cleared" msgstr "" #: ui/settings.py:331 msgid "Are you sure you want to clear your authentication information?" msgstr "" #: ui/settings.py:348 msgid "Authentication information cleared" msgstr "" #: ui/commit.py:267 #, python-format msgid "Found %(changed)d changed and %(unversioned)d unversioned item(s)" msgstr "" #: ui/commit.py:319 ui/commit.py:387 msgid "Running Commit Command..." msgstr "" #: ui/commit.py:332 ui/commit.py:396 msgid "Completed Commit" msgstr "" #: ui/diff.py:311 msgid "View diff as side-by-side comparison" msgstr "" #: ui/export.py:46 ui/export.py:125 #, python-format msgid "Export - %s" msgstr "" #: ui/export.py:93 ui/export.py:162 msgid "Export" msgstr "" #: ui/export.py:94 ui/export.py:163 msgid "Running Export Command..." msgstr "" #: ui/export.py:105 ui/export.py:171 msgid "Completed Export" msgstr "" rabbitvcs-0.19/po/cs.po000066400000000000000000000663171445560650400150330ustar00rootroot00000000000000# Czech translation for rabbitvcs # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2009-03-04 14:35-0500\n" "PO-Revision-Date: 2009-03-27 10:34+0000\n" "Last-Translator: Ladislav Prskavec \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2009-09-24 13:44+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ui/branch.py:71 msgid "" "There have been modifications to your working copy. If you copy from the " "HEAD revision you will lose your changes." msgstr "" #: ui/branch.py:89 msgid "You must supply a destination path." msgstr "" #: ui/branch.py:99 msgid "The from revision field is required." msgstr "Políčko z revize je povinnÊ." #: ui/branch.py:108 msgid "Invalid revision information" msgstr "" #: ui/branch.py:123 ui/glade/branch.glade.h:4 msgid "Branch/tag" msgstr "Branch/tag" #: ui/branch.py:124 msgid "Running Branch/tag Command..." msgstr "SpuÅĄtím příkaz branch/tag" #: ui/branch.py:126 msgid "Completed Branch/tag" msgstr "Branch/tag dokončen." #: ui/updateto.py:70 msgid "Update To Revision" msgstr "Aktualizace na revizi" #: ui/updateto.py:71 ui/update.py:54 msgid "Updating..." msgstr "Aktualizuji" #: ui/updateto.py:79 ui/update.py:57 msgid "Completed Update" msgstr "Aktualizace dokončena." #: ui/rename.py:59 msgid "The new name field is required" msgstr "Políčko novÊ jmÊno je povinnÊ" #: ui/rename.py:70 ui/glade/rename.glade.h:2 msgid "Rename" msgstr "Přejmenovat" #: ui/rename.py:71 msgid "Running Rename Command..." msgstr "SpouÅĄtím příkaz Přejmenovat" #: ui/rename.py:78 msgid "Completed Rename" msgstr "PřejmenovÃĄní dokončeno." #: ui/annotate.py:51 msgid "Cannot annotate a directory" msgstr "Nemohu anotovat adresÃĄÅ™" #: ui/annotate.py:58 #, python-format msgid "Annotate - %s" msgstr "Anotace - %s" #: ui/annotate.py:71 msgid "Line" msgstr "Å˜ÃĄdek" #: ui/annotate.py:71 ui/log.py:80 ui/glade/switch.glade.h:5 #: ui/glade/merge.glade.h:17 ui/glade/checkout.glade.h:10 #: ui/glade/update.glade.h:6 msgid "Revision" msgstr "Revize" #: ui/annotate.py:71 ui/log.py:80 msgid "Author" msgstr "Autor" #: ui/annotate.py:72 ui/dialog.py:47 ui/log.py:81 msgid "Date" msgstr "Datum" #: ui/annotate.py:72 msgid "Text" msgstr "Test" #: ui/annotate.py:112 msgid "The from revision field must be an integer" msgstr "Políčko revize musí obsahovat číslo" #: ui/annotate.py:122 msgid "Generating Annotation..." msgstr "Generuji anotaci" #: ui/annotate.py:138 lib/vcs/svn/__init__.py:122 lib/vcs/svn/__init__.py:124 msgid "Completed" msgstr "Dokončeno" #: ui/settings.py:50 msgid "English" msgstr "Anglicky" #: ui/settings.py:156 ui/settings.py:165 msgid "Select a program" msgstr "Vyberte program" #: ui/settings.py:174 msgid "Are you sure you want to clear your repository paths?" msgstr "Opravdu chcete vymazat cesty k repozitory?" #: ui/settings.py:181 msgid "Repository paths cleared" msgstr "Cesty k repozitory vymazÃĄny." #: ui/settings.py:185 msgid "Are you sure you want to clear your previous messages?" msgstr "Opravdu chcete vymazat zprÃĄvy?" #: ui/settings.py:192 msgid "Previous messages cleared" msgstr "ZprÃĄvy vymazÃĄny." #: ui/settings.py:196 msgid "Are you sure you want to clear your authentication information?" msgstr "Opravdu chcete vymazat vaÅĄe autentikační Ãēdaje?" #: ui/settings.py:213 msgid "Authentication information cleared" msgstr "Autentikační Ãēdaje vymazÃĄny." #: ui/cleanup.py:54 lib/extensions/nautilus/RabbitVCS.py:831 msgid "Cleanup" msgstr "Vyčistit" #: ui/cleanup.py:55 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "Čistím" #: ui/cleanup.py:57 msgid "Completed Cleanup" msgstr "ČiÅĄtění dokončeno" #: ui/relocate.py:76 msgid "The from and to url fields are both required." msgstr "Políčka z a url jsou povinnÃĄ" #: ui/relocate.py:86 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "Přesunutí" #: ui/relocate.py:87 msgid "Running Relocate Command..." msgstr "SpouÅĄtím příkaz Přesunutí" #: ui/relocate.py:94 msgid "Completed Relocate" msgstr "Přesunutí dokončeno" #: ui/add.py:64 ui/lock.py:66 ui/resolve.py:55 ui/action.py:66 ui/commit.py:73 #: ui/unlock.py:55 ui/log.py:89 ui/revert.py:55 msgid "Path" msgstr "Cesta" #: ui/add.py:64 ui/lock.py:66 ui/resolve.py:55 ui/commit.py:73 ui/unlock.py:55 #: ui/revert.py:55 msgid "Extension" msgstr "" #: ui/add.py:78 ui/lock.py:96 ui/commit.py:97 ui/unlock.py:70 ui/log.py:253 #: ui/glade/log.glade.h:6 msgid "Loading..." msgstr "NahrÃĄvÃĄm..." #: ui/add.py:81 ui/lock.py:99 ui/commit.py:100 ui/unlock.py:91 #, python-format msgid "Found %d item(s)" msgstr "NaÅĄel %d poloÅžek" #: ui/add.py:115 ui/commit.py:269 ui/glade/add.glade.h:1 #: lib/extensions/nautilus/RabbitVCS.py:638 msgid "Add" msgstr "Přidat" #: ui/add.py:116 msgid "Running Add Command..." msgstr "" #: ui/add.py:118 msgid "Completed Add" msgstr "PřidÃĄní dokončeno" #: ui/add.py:141 ui/lock.py:206 ui/commit.py:239 msgid "Open" msgstr "Otevřít" #: ui/add.py:150 ui/lock.py:216 ui/commit.py:249 msgid "Browse to" msgstr "ProchÃĄzet" #: ui/add.py:159 ui/commit.py:259 ui/glade/properties.glade.h:2 #: lib/extensions/nautilus/RabbitVCS.py:735 msgid "Delete" msgstr "Smazat" #: ui/add.py:168 ui/commit.py:299 lib/extensions/nautilus/RabbitVCS.py:654 msgid "Add to ignore list" msgstr "Přídat na ignore list" #: ui/import.py:41 #, python-format msgid "Import - %s" msgstr "Importovat - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "" #: ui/import.py:80 ui/glade/import.glade.h:3 #: lib/extensions/nautilus/RabbitVCS.py:888 msgid "Import" msgstr "Import" #: ui/import.py:81 msgid "Running Import Command..." msgstr "" #: ui/import.py:89 msgid "Completed Import" msgstr "" #: ui/lock.py:67 lib/vcs/svn/__init__.py:132 msgid "Locked" msgstr "Zamčeno" #: ui/lock.py:90 ui/lock.py:107 msgid "Yes" msgstr "Ano" #: ui/lock.py:144 msgid "Get Lock" msgstr "" #: ui/lock.py:145 msgid "Running Lock Command..." msgstr "" #: ui/lock.py:154 msgid "Completed Lock" msgstr "" #: ui/lock.py:176 msgid "Remove Lock" msgstr "Odstranit zÃĄmek" #: ui/lock.py:186 ui/commit.py:229 lib/extensions/nautilus/RabbitVCS.py:597 msgid "View Diff" msgstr "Zobrazit Diff" #: ui/lock.py:196 ui/glade/switch.glade.h:6 ui/glade/branch.glade.h:10 #: ui/glade/merge.glade.h:18 ui/glade/checkout.glade.h:11 #: ui/glade/update.glade.h:7 msgid "Show log" msgstr "Zobrazit log" #: ui/export.py:40 #, python-format msgid "Export - %s" msgstr "Exportovat - %s" #: ui/export.py:58 ui/checkout.py:82 msgid "The repository URL and destination path are both required fields." msgstr "" #: ui/export.py:79 lib/extensions/nautilus/RabbitVCS.py:856 msgid "Export" msgstr "Export" #: ui/export.py:80 msgid "Running Export Command..." msgstr "" #: ui/export.py:91 msgid "Completed Export" msgstr "" #: ui/resolve.py:45 ui/resolve.py:76 #: lib/extensions/nautilus/RabbitVCS.py:767 msgid "Resolve" msgstr "" #: ui/resolve.py:77 msgid "Running Resolve Command..." msgstr "" #: ui/resolve.py:80 msgid "Completed Resolve" msgstr "" #: ui/action.py:66 ui/log.py:89 msgid "Action" msgstr "Akce" #: ui/action.py:66 msgid "Mime Type" msgstr "Mime Type" #: ui/action.py:135 msgid "Empty Message" msgstr "PrÃĄzdnÃĄ zprÃĄva" #: ui/action.py:249 ui/log.py:309 msgid "Finished" msgstr "Dokončeno" #: ui/action.py:253 #, python-format msgid "%s - Finished" msgstr "%s - Dokončeno" #: ui/commit.py:66 msgid "The given path is not a working copy" msgstr "" #: ui/commit.py:74 msgid "Text Status" msgstr "Status" #: ui/commit.py:74 msgid "Property Status" msgstr "" #: ui/commit.py:188 ui/glade/commit.glade.h:4 #: lib/extensions/nautilus/RabbitVCS.py:568 msgid "Commit" msgstr "Commit" #: ui/commit.py:189 msgid "Running Commit Command..." msgstr "" #: ui/commit.py:195 msgid "Completed Commit" msgstr "" #: ui/commit.py:279 ui/revert.py:45 ui/revert.py:75 #: lib/extensions/nautilus/RabbitVCS.py:751 msgid "Revert" msgstr "" #: ui/commit.py:289 msgid "Restore" msgstr "Obnovit" #: ui/dialog.py:47 ui/log.py:81 ui/glade/dialogs.glade.h:20 msgid "Message" msgstr "ZprÃĄva" #: ui/dialog.py:88 msgid "Select a Folder" msgstr "Zvolit adresÃĄÅ™" #: ui/dialog.py:117 ui/glade/log.glade.h:12 msgid "to" msgstr "" #: ui/dialog.py:210 msgid "Select a File" msgstr "Zvolit soubor" #: ui/dialog.py:229 ui/glade/dialogs.glade.h:10 msgid "Are you sure you want to continue?" msgstr "Opravdu chcete pokračovat?" #: ui/dialog.py:257 msgid "the selected item(s)" msgstr "zvolenÊ(ÃĄ) poloÅžky(a)" #: ui/switch.py:65 msgid "The repository location is a required field." msgstr "" #: ui/switch.py:81 ui/glade/switch.glade.h:7 msgid "Switch" msgstr "Switch" #: ui/switch.py:82 msgid "Running Switch Command..." msgstr "" #: ui/switch.py:90 msgid "Completed Switch" msgstr "" #: ui/unlock.py:45 ui/unlock.py:109 msgid "Unlock" msgstr "" #: ui/unlock.py:110 msgid "Running Unlock Command..." msgstr "" #: ui/unlock.py:113 msgid "Completed Unlock" msgstr "" #: ui/merge.py:81 msgid "Running Merge Test" msgstr "" #: ui/merge.py:82 msgid "Completed Merge Test" msgstr "" #: ui/merge.py:84 msgid "Running Merge Command" msgstr "" #: ui/merge.py:85 msgid "Completed Merge" msgstr "" #: ui/merge.py:93 msgid "Merge" msgstr "" #: ui/checkout.py:52 #, python-format msgid "Checkout - %s" msgstr "" #: ui/checkout.py:100 ui/glade/checkout.glade.h:5 #: lib/extensions/nautilus/RabbitVCS.py:536 msgid "Checkout" msgstr "" #: ui/checkout.py:101 msgid "Running Checkout Command..." msgstr "" #: ui/checkout.py:111 msgid "Completed Checkout" msgstr "" #: ui/log.py:63 #, python-format msgid "Log - %s" msgstr "Log - %s" #: ui/log.py:90 msgid "Copy From Path" msgstr "" #: ui/log.py:90 msgid "Copy From Revision" msgstr "" #: ui/log.py:112 msgid "Cancelled" msgstr "ZruÅĄeno" #: ui/log.py:236 ui/log.py:237 ui/glade/log.glade.h:8 msgid "N/A" msgstr "N/A" #: ui/log.py:284 msgid "(no author)" msgstr "(autor neznÃĄmÃŊ)" #: ui/log.py:313 msgid "Retrieving Log Information..." msgstr "" #: ui/properties.py:53 #, python-format msgid "Properties - %s" msgstr "Vlastnosti - %s" #: ui/properties.py:61 msgid "Name" msgstr "JmÊno" #: ui/properties.py:61 msgid "Value" msgstr "Hodnota" #: ui/revert.py:76 msgid "Running Revert Command..." msgstr "" #: ui/revert.py:78 msgid "Completed Revert" msgstr "" #: ui/update.py:53 ui/glade/update.glade.h:8 #: lib/extensions/nautilus/RabbitVCS.py:552 msgid "Update" msgstr "Update" #: ui/create.py:49 msgid "Repository successfully created" msgstr "Repozitory bylo ÃēspÄ›ÅĄně vytvořeno" #: ui/create.py:51 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" #: ui/glade/switch.glade.h:1 ui/glade/checkout.glade.h:3 #: ui/glade/update.glade.h:1 msgid "Revision" msgstr "Revize" #: ui/glade/switch.glade.h:2 msgid "Switch Details" msgstr "" #: ui/glade/switch.glade.h:3 ui/glade/branch.glade.h:8 #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "Od:" #: ui/glade/switch.glade.h:4 ui/glade/merge.glade.h:10 #: ui/glade/checkout.glade.h:7 ui/glade/update.glade.h:3 msgid "HEAD" msgstr "HEAD" #: ui/glade/switch.glade.h:8 ui/glade/branch.glade.h:11 #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "Do:" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "" #: ui/glade/commit.glade.h:1 ui/glade/branch.glade.h:1 msgid "Add Message" msgstr "Přidat zprÃĄvu" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to see diff)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "Commit do:" #: ui/glade/commit.glade.h:5 ui/glade/lock.glade.h:4 ui/glade/branch.glade.h:9 #: ui/glade/dialogs.glade.h:22 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "Předchozí zprÃĄvy" #: ui/glade/commit.glade.h:6 ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 msgid "Select / Deselect all" msgstr "Vybrat / zruÅĄit vÅĄe" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "Soubory k uzamknutí" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Vlastnosti pro:" #: ui/glade/properties.glade.h:3 msgid "Edit..." msgstr "Upravit..." #: ui/glade/properties.glade.h:4 msgid "New..." msgstr "NovÃŊ..." #: ui/glade/properties.glade.h:5 lib/extensions/nautilus/RabbitVCS.py:995 msgid "Properties" msgstr "Vlastnosti" #: ui/glade/properties.glade.h:6 msgid "URL/Path:" msgstr "URL/cesta:" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "Odkazy" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "Informace o verzi" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:4 lib/extensions/nautilus/RabbitVCS.py:1059 msgid "About" msgstr "" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Autoři:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Děkujeme:" #: ui/glade/rename.glade.h:1 msgid "New Name:" msgstr "NovÊ jmÊno:" #: ui/glade/branch.glade.h:2 msgid "Create copy from" msgstr "" #: ui/glade/branch.glade.h:3 ui/glade/checkout.glade.h:2 #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "Repozitory" #: ui/glade/branch.glade.h:5 msgid "Copy from HEAD" msgstr "" #: ui/glade/branch.glade.h:6 msgid "Copy from revision" msgstr "" #: ui/glade/branch.glade.h:7 msgid "Copy from working copy" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "" #: ui/glade/log.glade.h:2 msgid "Affected File(s)" msgstr "" #: ui/glade/log.glade.h:3 ui/glade/dialogs.glade.h:3 msgid "Message" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Limit:" #: ui/glade/log.glade.h:7 msgid "Log" msgstr "Log" #: ui/glade/log.glade.h:9 msgid "Refresh" msgstr "Obnovit" #: ui/glade/log.glade.h:10 msgid "Showing Revisions:" msgstr "" #: ui/glade/log.glade.h:11 msgid "Stop on copy" msgstr "" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "Z URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:3 ui/glade/checkout.glade.h:1 msgid "Options" msgstr "Volby" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "" #: ui/glade/merge.glade.h:16 ui/glade/checkout.glade.h:9 #: ui/glade/update.glade.h:5 msgid "Recursive" msgstr "" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "" #: ui/glade/settings.glade.h:2 msgid "Log Messages" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Logging Options" msgstr "" #: ui/glade/settings.glade.h:4 msgid "RabbitVCS" msgstr "" #: ui/glade/settings.glade.h:5 msgid "Program used to browse repositories" msgstr "" #: ui/glade/settings.glade.h:6 msgid "Program used to compare files" msgstr "" #: ui/glade/settings.glade.h:7 msgid "URL History" msgstr "" #: ui/glade/settings.glade.h:8 ui/glade/checkout.glade.h:4 msgid "Browse..." msgstr "ProchÃĄzet..." #: ui/glade/settings.glade.h:9 msgid "Clear your authentication information" msgstr "" #: ui/glade/settings.glade.h:10 msgid "Enable emblems" msgstr "" #: ui/glade/settings.glade.h:11 msgid "Enable file attributes" msgstr "" #: ui/glade/settings.glade.h:12 msgid "Enable recursive status checks" msgstr "" #: ui/glade/settings.glade.h:13 msgid "External Programs" msgstr "" #: ui/glade/settings.glade.h:14 msgid "General" msgstr "ObecnÊ" #: ui/glade/settings.glade.h:15 msgid "Language:" msgstr "Jazyk:" #: ui/glade/settings.glade.h:16 msgid "Logging" msgstr "LogovÃĄní" #: ui/glade/settings.glade.h:17 msgid "Minimum level to log" msgstr "MinimÃĄlní Ãēroveň pro logovÃĄní" #: ui/glade/settings.glade.h:18 msgid "Number of URLs to remember" msgstr "" #: ui/glade/settings.glade.h:19 msgid "Number of messages to remember" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Saved Data" msgstr "UloÅženÃĄ data" #: ui/glade/settings.glade.h:21 lib/extensions/nautilus/RabbitVCS.py:1043 msgid "Settings" msgstr "Nastavení" #: ui/glade/settings.glade.h:22 msgid "Show new version on the right side" msgstr "" #: ui/glade/settings.glade.h:23 msgid "Type:" msgstr "Typ" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" #: ui/glade/dialogs.glade.h:1 msgid "Certificate Details" msgstr "" #: ui/glade/dialogs.glade.h:2 msgid "Edit Property Details" msgstr "" #: ui/glade/dialogs.glade.h:4 msgid "Please add your authentication details" msgstr "" #: ui/glade/dialogs.glade.h:5 msgid "Previous Messages" msgstr "Předchozí zprÃĄvy" #: ui/glade/dialogs.glade.h:7 msgid "" "Are you sure you want to delete %item%?" msgstr "Opravdu chcete smazat %item%?" #: ui/glade/dialogs.glade.h:8 msgid "Accept Forever" msgstr "Přijmout natrvalo" #: ui/glade/dialogs.glade.h:9 msgid "Accept Once" msgstr "Přijmout jednou" #: ui/glade/dialogs.glade.h:11 msgid "Authentication" msgstr "Authentikace" #: ui/glade/dialogs.glade.h:12 msgid "Check Certificate" msgstr "Kontrola certifikÃĄtu" #: ui/glade/dialogs.glade.h:13 msgid "Confirmation" msgstr "Potvrzení" #: ui/glade/dialogs.glade.h:14 msgid "Delete Confirmation" msgstr "Smazat potvrzení" #: ui/glade/dialogs.glade.h:15 msgid "Deny" msgstr "ZakÃĄzanÊ" #: ui/glade/dialogs.glade.h:16 msgid "Fingerprint:" msgstr "Fingerprint:" #: ui/glade/dialogs.glade.h:17 msgid "Host:" msgstr "Host" #: ui/glade/dialogs.glade.h:18 msgid "Issuer:" msgstr "Vydavatel:" #: ui/glade/dialogs.glade.h:19 msgid "Login:" msgstr "JmÊno:" #: ui/glade/dialogs.glade.h:21 msgid "Password:" msgstr "Heslo:" #: ui/glade/dialogs.glade.h:23 msgid "Property" msgstr "Vlastnost" #: ui/glade/dialogs.glade.h:24 msgid "Property:" msgstr "Vlastnost:" #: ui/glade/dialogs.glade.h:25 msgid "Realm:" msgstr "Realm" #: ui/glade/dialogs.glade.h:26 msgid "Save Authentication" msgstr "UloÅžit autentikaci" #: ui/glade/dialogs.glade.h:27 msgid "The item(s) will be sent to the trash can." msgstr "" #: ui/glade/dialogs.glade.h:28 msgid "Valid:" msgstr "PlatnÊ:" #: ui/glade/dialogs.glade.h:29 msgid "Value:" msgstr "Hodnota:" #: ui/glade/checkout.glade.h:6 msgid "Destination:" msgstr "" #: ui/glade/checkout.glade.h:8 ui/glade/update.glade.h:4 msgid "Omit Externals" msgstr "" #: ui/glade/checkout.glade.h:12 msgid "URL:" msgstr "URL:" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "" #: ui/glade/update.glade.h:2 msgid "Update Depth" msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:362 msgid "Debug" msgstr "Debug:" #: lib/extensions/nautilus/RabbitVCS.py:375 msgid "DBus" msgstr "DBus:" #: lib/extensions/nautilus/RabbitVCS.py:388 msgid "Start/Restart Service" msgstr "Start/Restart Service" #: lib/extensions/nautilus/RabbitVCS.py:404 msgid "Exit Service" msgstr "Exit Service" #: lib/extensions/nautilus/RabbitVCS.py:422 msgid "Bugs" msgstr "Bugy" #: lib/extensions/nautilus/RabbitVCS.py:435 msgid "Test Asynchronicity" msgstr "Test Asynchronicity" #: lib/extensions/nautilus/RabbitVCS.py:453 msgid "Open Shell" msgstr "Otevřít shell" #: lib/extensions/nautilus/RabbitVCS.py:469 msgid "Refresh Status" msgstr "Obnovit status" #: lib/extensions/nautilus/RabbitVCS.py:486 msgid "Debug Revert" msgstr "Debug Revert" #: lib/extensions/nautilus/RabbitVCS.py:487 msgid "Reverts everything it sees" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:502 msgid "Invalidate" msgstr "Nevalidní" #: lib/extensions/nautilus/RabbitVCS.py:503 msgid "Force an invalidate_extension_info() call" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:518 msgid "Add Emblem" msgstr "Přidat emblem" #: lib/extensions/nautilus/RabbitVCS.py:519 msgid "Add an emblem" msgstr "Přidat emblem" #: lib/extensions/nautilus/RabbitVCS.py:537 msgid "Check out a working copy" msgstr "Check out pracovní kopie" #: lib/extensions/nautilus/RabbitVCS.py:553 msgid "Update a working copy" msgstr "Update pracovní kopie" #: lib/extensions/nautilus/RabbitVCS.py:569 msgid "Commit modifications to the repository" msgstr "Commit změn do repozitory" #: lib/extensions/nautilus/RabbitVCS.py:584 msgid "RabbitVCS" msgstr "RabbitVCS" #: lib/extensions/nautilus/RabbitVCS.py:598 msgid "View the modifications made to a file" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:613 msgid "Show Log" msgstr "Zobrazit log" #: lib/extensions/nautilus/RabbitVCS.py:614 msgid "Show a file's log information" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:639 msgid "Schedule an item to be added to the repository" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:663 msgid "Ignore an item" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:678 msgid "Ignore all files with this extension" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:703 msgid "Update to revision..." msgstr "Update na revizi..." #: lib/extensions/nautilus/RabbitVCS.py:704 msgid "Update a file to a specific revision" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:719 msgid "Rename..." msgstr "Přejmenovat" #: lib/extensions/nautilus/RabbitVCS.py:720 msgid "Schedule an item to be renamed on the repository" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:736 msgid "Schedule an item to be deleted from the repository" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:752 msgid "Revert an item to its unmodified state" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:768 msgid "Mark a conflicted item as resolved" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:783 msgid "Relocate..." msgstr "Relocate..." #: lib/extensions/nautilus/RabbitVCS.py:784 msgid "Relocate your working copy" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:799 msgid "Get Lock..." msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:800 msgid "Locally lock items" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:815 msgid "Release Lock..." msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:816 msgid "Release lock on an item" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:832 msgid "Clean up working copy" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:857 msgid "Export a working copy or repository with no versioning information" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:872 msgid "Create Repository here" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:873 msgid "Create a repository in a folder" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:889 msgid "Import an item into a repository" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:913 msgid "Branch/tag..." msgstr "Branch/tag" #: lib/extensions/nautilus/RabbitVCS.py:914 msgid "Copy an item to another location in the repository" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:929 msgid "Switch..." msgstr "Switch..." #: lib/extensions/nautilus/RabbitVCS.py:930 msgid "Change the repository location of a working copy" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:945 msgid "Merge..." msgstr "Merge..." #: lib/extensions/nautilus/RabbitVCS.py:946 msgid "A wizard with steps for merging" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:970 msgid "Annotate..." msgstr "Anotace..." #: lib/extensions/nautilus/RabbitVCS.py:971 msgid "Annotate a file" msgstr "Anotace souboru" #: lib/extensions/nautilus/RabbitVCS.py:996 msgid "View the properties of an item" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:1027 msgid "Help" msgstr "Help" #: lib/extensions/nautilus/RabbitVCS.py:1028 msgid "View help" msgstr "Zobrazit nÃĄpovědu" #: lib/extensions/nautilus/RabbitVCS.py:1044 msgid "View or change RabbitVCS settings" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:1060 msgid "About RabbitVCS" msgstr "" #: lib/vcs/svn/__init__.py:111 lib/vcs/svn/__init__.py:120 #: lib/vcs/svn/__init__.py:127 msgid "Added" msgstr "" #: lib/vcs/svn/__init__.py:112 lib/vcs/svn/__init__.py:128 msgid "Copied" msgstr "" #: lib/vcs/svn/__init__.py:113 lib/vcs/svn/__init__.py:119 msgid "Deleted" msgstr "" #: lib/vcs/svn/__init__.py:114 msgid "Restored" msgstr "" #: lib/vcs/svn/__init__.py:115 msgid "Reverted" msgstr "" #: lib/vcs/svn/__init__.py:116 msgid "Failed Revert" msgstr "" #: lib/vcs/svn/__init__.py:117 msgid "Resolved" msgstr "" #: lib/vcs/svn/__init__.py:118 msgid "Skipped" msgstr "Přeskočeno" #: lib/vcs/svn/__init__.py:121 msgid "Updated" msgstr "AktualizovÃĄno" #: lib/vcs/svn/__init__.py:123 lib/vcs/svn/__init__.py:125 msgid "External" msgstr "Externí" #: lib/vcs/svn/__init__.py:126 msgid "Modified" msgstr "ModifikovÃĄno" #: lib/vcs/svn/__init__.py:129 msgid "Replaced" msgstr "PřepsÃĄno" #: lib/vcs/svn/__init__.py:130 lib/vcs/svn/__init__.py:149 msgid "Changed" msgstr "Změněno" #: lib/vcs/svn/__init__.py:131 msgid "Annotated" msgstr "AnotovÃĄno" #: lib/vcs/svn/__init__.py:133 msgid "Unlocked" msgstr "Odemčeno" #: lib/vcs/svn/__init__.py:134 msgid "Failed Lock" msgstr "ZÃĄmek selhal" #: lib/vcs/svn/__init__.py:135 msgid "Failed Unlock" msgstr "Odemčení selhalo" #: lib/vcs/svn/__init__.py:144 msgid "Inapplicable" msgstr "" #: lib/vcs/svn/__init__.py:145 msgid "Unknown" msgstr "NeznÃĄmÊ" #: lib/vcs/svn/__init__.py:146 msgid "Unchanged" msgstr "" #: lib/vcs/svn/__init__.py:147 msgid "Missing" msgstr "Chybějící" #: lib/vcs/svn/__init__.py:148 msgid "Obstructed" msgstr "" #: lib/vcs/svn/__init__.py:150 msgid "Merged" msgstr "Spojeno" #: lib/vcs/svn/__init__.py:151 msgid "Conflicted" msgstr "" rabbitvcs-0.19/po/de.po000066400000000000000000001003311445560650400147770ustar00rootroot00000000000000# German translations for PACKAGE package. # Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Marcel Stimberg , 2009. # msgid "" msgstr "" "Project-Id-Version: neu\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-04 14:35-0500\n" "PO-Revision-Date: 2009-03-19 09:59+0000\n" "Last-Translator: Steve Markgraf \n" "Language-Team: German <>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2009-09-24 13:44+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Poedit-Basepath: ../\n" #: ui/branch.py:71 msgid "" "There have been modifications to your working copy. If you copy from the " "HEAD revision you will lose your changes." msgstr "" "Ihre Arbeitskopie wurde verändert. Wenn Sie von der HEAD-Revision kopieren, " "gehen diese Änderungen verloren." #: ui/branch.py:89 msgid "You must supply a destination path." msgstr "Sie mÃŧssen einen Zielpfad angeben." #: ui/branch.py:99 msgid "The from revision field is required." msgstr "Sie mÃŧssen die Ausgangsrevision angeben." #: ui/branch.py:108 msgid "Invalid revision information" msgstr "UngÃŧltige Revisionsinformation" #: ui/branch.py:123 ui/glade/branch.glade.h:4 msgid "Branch/tag" msgstr "Zweig/Tag" #: ui/branch.py:124 msgid "Running Branch/tag Command..." msgstr "Erstelle Zweig/Tag..." #: ui/branch.py:126 msgid "Completed Branch/tag" msgstr "Zweig/Tag-Erstellung abgeschlossen" #: ui/updateto.py:70 msgid "Update To Revision" msgstr "Aktualisiere auf Revision" #: ui/updateto.py:71 ui/update.py:54 msgid "Updating..." msgstr "Aktualisiere..." #: ui/updateto.py:79 ui/update.py:57 msgid "Completed Update" msgstr "Aktualisierung abgeschlossen." #: ui/rename.py:59 msgid "The new name field is required" msgstr "Der neue Name muss angegeben werden" #: ui/rename.py:70 ui/glade/rename.glade.h:2 msgid "Rename" msgstr "Umbenennen" #: ui/rename.py:71 msgid "Running Rename Command..." msgstr "Benenne um..." #: ui/rename.py:78 msgid "Completed Rename" msgstr "Umbenennen abgeschlossen" #: ui/annotate.py:51 msgid "Cannot annotate a directory" msgstr "Kann kein Verzeichnis annotieren" #: ui/annotate.py:58 #, python-format msgid "Annotate - %s" msgstr "Annotiere - %s" #: ui/annotate.py:71 msgid "Line" msgstr "Zeile" #: ui/annotate.py:71 ui/log.py:80 ui/glade/switch.glade.h:5 #: ui/glade/merge.glade.h:17 ui/glade/checkout.glade.h:10 #: ui/glade/update.glade.h:6 msgid "Revision" msgstr "Revision" #: ui/annotate.py:71 ui/log.py:80 msgid "Author" msgstr "Autor" #: ui/annotate.py:72 ui/dialog.py:47 ui/log.py:81 msgid "Date" msgstr "Datum" #: ui/annotate.py:72 msgid "Text" msgstr "Text" #: ui/annotate.py:112 msgid "The from revision field must be an integer" msgstr "Die Ausgangsrevision muss eine ganze Zahl sein." #: ui/annotate.py:122 msgid "Generating Annotation..." msgstr "Erzeuge Annotationen..." #: ui/annotate.py:138 lib/vcs/svn/__init__.py:122 lib/vcs/svn/__init__.py:124 msgid "Completed" msgstr "Abgeschlossen" #: ui/settings.py:50 msgid "English" msgstr "englisch" #: ui/settings.py:156 ui/settings.py:165 msgid "Select a program" msgstr "Ein Programm auswählen" #: ui/settings.py:174 msgid "Are you sure you want to clear your repository paths?" msgstr "Wollen Sie wirklich die Projektarchivpfade lÃļschen?" #: ui/settings.py:181 msgid "Repository paths cleared" msgstr "Projektarchivpfade gelÃļscht" #: ui/settings.py:185 msgid "Are you sure you want to clear your previous messages?" msgstr "Wollen Sie wirklich die frÃŧheren Nachrichten lÃļschen?" #: ui/settings.py:192 msgid "Previous messages cleared" msgstr "FrÃŧhere Logmeldungen gelÃļscht" #: ui/settings.py:196 msgid "Are you sure you want to clear your authentication information?" msgstr "Wollen Sie wirklich Ihre Authentifizierungsinformationen lÃļschen?" #: ui/settings.py:213 msgid "Authentication information cleared" msgstr "Authentifizierungsinformationen gelÃļscht" #: ui/cleanup.py:54 lib/extensions/nautilus/RabbitVCS.py:831 msgid "Cleanup" msgstr "Aufräumen" #: ui/cleanup.py:55 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "Räume auf..." #: ui/cleanup.py:57 msgid "Completed Cleanup" msgstr "Aufräumen abgeschlossen" #: ui/relocate.py:76 msgid "The from and to url fields are both required." msgstr "Die Ursprungs- und Ziel-URL mÃŧssen angegeben werden." #: ui/relocate.py:86 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "Zweig/Tag wechseln" #: ui/relocate.py:87 msgid "Running Relocate Command..." msgstr "Stelle URL um..." #: ui/relocate.py:94 msgid "Completed Relocate" msgstr "Umstellen der URL abgeschlossen" #: ui/add.py:64 ui/lock.py:66 ui/resolve.py:55 ui/action.py:66 ui/commit.py:73 #: ui/unlock.py:55 ui/log.py:89 ui/revert.py:55 msgid "Path" msgstr "Pfad" #: ui/add.py:64 ui/lock.py:66 ui/resolve.py:55 ui/commit.py:73 ui/unlock.py:55 #: ui/revert.py:55 msgid "Extension" msgstr "Erweiterung" #: ui/add.py:78 ui/lock.py:96 ui/commit.py:97 ui/unlock.py:70 ui/log.py:253 #: ui/glade/log.glade.h:6 msgid "Loading..." msgstr "Lade..." #: ui/add.py:81 ui/lock.py:99 ui/commit.py:100 ui/unlock.py:91 #, python-format msgid "Found %d item(s)" msgstr "%d Objekt(e) gefunden" #: ui/add.py:115 ui/commit.py:269 ui/glade/add.glade.h:1 #: lib/extensions/nautilus/RabbitVCS.py:638 msgid "Add" msgstr "HinzufÃŧgen" #: ui/add.py:116 msgid "Running Add Command..." msgstr "FÃŧge hinzu..." #: ui/add.py:118 msgid "Completed Add" msgstr "HinzufÃŧgen abgeschlossen" #: ui/add.py:141 ui/lock.py:206 ui/commit.py:239 msgid "Open" msgstr "Öffnen" #: ui/add.py:150 ui/lock.py:216 ui/commit.py:249 msgid "Browse to" msgstr "Dursuchen" #: ui/add.py:159 ui/commit.py:259 ui/glade/properties.glade.h:2 #: lib/extensions/nautilus/RabbitVCS.py:735 msgid "Delete" msgstr "LÃļschen" #: ui/add.py:168 ui/commit.py:299 lib/extensions/nautilus/RabbitVCS.py:654 msgid "Add to ignore list" msgstr "Zur Liste der ignorierten Dateien hinzufÃŧgen" #: ui/import.py:41 #, python-format msgid "Import - %s" msgstr "Import - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "Die Projektarchiv-URL muss angegeben werden." #: ui/import.py:80 ui/glade/import.glade.h:3 #: lib/extensions/nautilus/RabbitVCS.py:888 msgid "Import" msgstr "Import" #: ui/import.py:81 msgid "Running Import Command..." msgstr "Importiere..." #: ui/import.py:89 msgid "Completed Import" msgstr "Import abgescholssen" #: ui/lock.py:67 lib/vcs/svn/__init__.py:132 msgid "Locked" msgstr "Gesperrt" #: ui/lock.py:90 ui/lock.py:107 msgid "Yes" msgstr "Ja" #: ui/lock.py:144 msgid "Get Lock" msgstr "Sperren" #: ui/lock.py:145 msgid "Running Lock Command..." msgstr "Sperre..." #: ui/lock.py:154 msgid "Completed Lock" msgstr "Sperren abgeschlossen" #: ui/lock.py:176 msgid "Remove Lock" msgstr "Sperre aufheben" #: ui/lock.py:186 ui/commit.py:229 lib/extensions/nautilus/RabbitVCS.py:597 msgid "View Diff" msgstr "Unterschiede anzeigen" #: ui/lock.py:196 ui/glade/switch.glade.h:6 ui/glade/branch.glade.h:10 #: ui/glade/merge.glade.h:18 ui/glade/checkout.glade.h:11 #: ui/glade/update.glade.h:7 msgid "Show log" msgstr "Log anzeigen" #: ui/export.py:40 #, python-format msgid "Export - %s" msgstr "Exportieren - %s" #: ui/export.py:58 ui/checkout.py:82 msgid "The repository URL and destination path are both required fields." msgstr "Die Projektarchiv-URL und der Zielpfad mÃŧssen angegeben werden." #: ui/export.py:79 lib/extensions/nautilus/RabbitVCS.py:856 msgid "Export" msgstr "Exportieren" #: ui/export.py:80 msgid "Running Export Command..." msgstr "Exportiere" #: ui/export.py:91 msgid "Completed Export" msgstr "Export abgeschlossen" #: ui/resolve.py:45 ui/resolve.py:76 #: lib/extensions/nautilus/RabbitVCS.py:767 msgid "Resolve" msgstr "AuflÃļsen" #: ui/resolve.py:77 msgid "Running Resolve Command..." msgstr "LÃļse Konflikte auf..." #: ui/resolve.py:80 msgid "Completed Resolve" msgstr "AuflÃļsen abgeschlossen" #: ui/action.py:66 ui/log.py:89 msgid "Action" msgstr "Aktion" #: ui/action.py:66 msgid "Mime Type" msgstr "MIME-Typ" #: ui/action.py:135 msgid "Empty Message" msgstr "Leere Logmeldung" #: ui/action.py:249 ui/log.py:309 msgid "Finished" msgstr "Abgeschlossen" #: ui/action.py:253 #, python-format msgid "%s - Finished" msgstr "%s - abgeschlossen" #: ui/commit.py:66 msgid "The given path is not a working copy" msgstr "Der angegebene Pfad ist keine Arbeitskopie" #: ui/commit.py:74 msgid "Text Status" msgstr "Textstatus" #: ui/commit.py:74 msgid "Property Status" msgstr "Eigenschaftenstatus" #: ui/commit.py:188 ui/glade/commit.glade.h:4 #: lib/extensions/nautilus/RabbitVCS.py:568 msgid "Commit" msgstr "Übernehmen" #: ui/commit.py:189 msgid "Running Commit Command..." msgstr "Übernehme ins Projektarchiv..." #: ui/commit.py:195 msgid "Completed Commit" msgstr "Übernehmen abgeschlossen" #: ui/commit.py:279 ui/revert.py:45 ui/revert.py:75 #: lib/extensions/nautilus/RabbitVCS.py:751 msgid "Revert" msgstr "RÃŧckgängig machen" #: ui/commit.py:289 msgid "Restore" msgstr "Wiederherstellen" #: ui/dialog.py:47 ui/log.py:81 ui/glade/dialogs.glade.h:20 msgid "Message" msgstr "Logmeldung" #: ui/dialog.py:88 msgid "Select a Folder" msgstr "Ordner wählen" #: ui/dialog.py:117 ui/glade/log.glade.h:12 msgid "to" msgstr "bis" #: ui/dialog.py:210 msgid "Select a File" msgstr "Datei wählen" #: ui/dialog.py:229 ui/glade/dialogs.glade.h:10 msgid "Are you sure you want to continue?" msgstr "Wollen Sie wirklich fortfahren?" #: ui/dialog.py:257 msgid "the selected item(s)" msgstr "die ausgewählten Objekte" #: ui/switch.py:65 msgid "The repository location is a required field." msgstr "Der Ort des Projektarchivs muss angegeben werden." #: ui/switch.py:81 ui/glade/switch.glade.h:7 msgid "Switch" msgstr "Zweig/Tag wechseln" #: ui/switch.py:82 msgid "Running Switch Command..." msgstr "Wechsele Zweig/Tag..." #: ui/switch.py:90 msgid "Completed Switch" msgstr "Zweig/Tag gewechselt" #: ui/unlock.py:45 ui/unlock.py:109 msgid "Unlock" msgstr "Entsperren" #: ui/unlock.py:110 msgid "Running Unlock Command..." msgstr "Entsperre..." #: ui/unlock.py:113 msgid "Completed Unlock" msgstr "Entsperren abgeschlossen" #: ui/merge.py:81 msgid "Running Merge Test" msgstr "ZusammenfÃŧhren testen" #: ui/merge.py:82 msgid "Completed Merge Test" msgstr "ZusammenfÃŧ" #: ui/merge.py:84 msgid "Running Merge Command" msgstr "FÃŧhre zusammen..." #: ui/merge.py:85 msgid "Completed Merge" msgstr "ZusammenfÃŧhren abgeschlossen" #: ui/merge.py:93 msgid "Merge" msgstr "ZusammenfÃŧhren" #: ui/checkout.py:52 #, python-format msgid "Checkout - %s" msgstr "Auschecken - %s" #: ui/checkout.py:100 ui/glade/checkout.glade.h:5 #: lib/extensions/nautilus/RabbitVCS.py:536 msgid "Checkout" msgstr "Auschecken" #: ui/checkout.py:101 msgid "Running Checkout Command..." msgstr "Checke aus..." #: ui/checkout.py:111 msgid "Completed Checkout" msgstr "Auschecken beendet" #: ui/log.py:63 #, python-format msgid "Log - %s" msgstr "Log - %s" #: ui/log.py:90 msgid "Copy From Path" msgstr "Kopiert von Pfad" #: ui/log.py:90 msgid "Copy From Revision" msgstr "Kopiert von Revision" #: ui/log.py:112 msgid "Cancelled" msgstr "Abgebrochen" #: ui/log.py:236 ui/log.py:237 ui/glade/log.glade.h:8 msgid "N/A" msgstr "n/v" #: ui/log.py:284 msgid "(no author)" msgstr "(kein Autor)" #: ui/log.py:313 msgid "Retrieving Log Information..." msgstr "Ermittle Logmeldungen..." #: ui/properties.py:53 #, python-format msgid "Properties - %s" msgstr "Eigenschaften - %s" #: ui/properties.py:61 msgid "Name" msgstr "Name" #: ui/properties.py:61 msgid "Value" msgstr "Wert" #: ui/revert.py:76 msgid "Running Revert Command..." msgstr "Mache rÃŧckgängig..." #: ui/revert.py:78 msgid "Completed Revert" msgstr "RÃŧckgängigmachen abgeschlossen" #: ui/update.py:53 ui/glade/update.glade.h:8 #: lib/extensions/nautilus/RabbitVCS.py:552 msgid "Update" msgstr "Aktualisieren" #: ui/create.py:49 msgid "Repository successfully created" msgstr "Projektarchiv erfolgreich erstellt" #: ui/create.py:51 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" "Beim Erstellen des Projektarchivs ist ein Fehler aufgetreten. Stellen Sie " "sicher, dass der angegebene Ordner leer ist." #: ui/glade/switch.glade.h:1 ui/glade/checkout.glade.h:3 #: ui/glade/update.glade.h:1 msgid "Revision" msgstr "Revision" #: ui/glade/switch.glade.h:2 msgid "Switch Details" msgstr "Umstelldetails" #: ui/glade/switch.glade.h:3 ui/glade/branch.glade.h:8 #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "Von:" #: ui/glade/switch.glade.h:4 ui/glade/merge.glade.h:10 #: ui/glade/checkout.glade.h:7 ui/glade/update.glade.h:3 msgid "HEAD" msgstr "HEAD" #: ui/glade/switch.glade.h:8 ui/glade/branch.glade.h:11 #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "Auf:" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Nachrichten" #: ui/glade/commit.glade.h:1 ui/glade/branch.glade.h:1 msgid "Add Message" msgstr "Logmeldung hinzufÃŧgen" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to see diff)" msgstr "Geänderte Dateien (Doppelklick um Unterschiede anzuzeigen)" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "Übernehmen nach:" #: ui/glade/commit.glade.h:5 ui/glade/lock.glade.h:4 ui/glade/branch.glade.h:9 #: ui/glade/dialogs.glade.h:22 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "FrÃŧhere Logmeldungen" #: ui/glade/commit.glade.h:6 ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 msgid "Select / Deselect all" msgstr "Alle aus-/abwählen" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "Nicht versionierte Dateien anzeigen" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "Zu sperrende Dateien" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "Bitte beschreiben Sie, warum Sie diese Dateien sperren" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "Dateien sperren" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "Existierende Sperren brechen" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Eigenschaften fÃŧr:" #: ui/glade/properties.glade.h:3 msgid "Edit..." msgstr "Bearbeiten..." #: ui/glade/properties.glade.h:4 msgid "New..." msgstr "Neu..." #: ui/glade/properties.glade.h:5 lib/extensions/nautilus/RabbitVCS.py:995 msgid "Properties" msgstr "Eigenschaften" #: ui/glade/properties.glade.h:6 msgid "URL/Path:" msgstr "URL/Pfad:" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "Von Revision" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "Bis Revision" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "Annotieren" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "Links" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "Versionsinformationen" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:4 lib/extensions/nautilus/RabbitVCS.py:1059 msgid "About" msgstr "Über" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Autoren:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Danksagungen:" #: ui/glade/rename.glade.h:1 msgid "New Name:" msgstr "Neuer Name:" #: ui/glade/branch.glade.h:2 msgid "Create copy from" msgstr "Kopie erstellen von" #: ui/glade/branch.glade.h:3 ui/glade/checkout.glade.h:2 #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "Projektarchiv" #: ui/glade/branch.glade.h:5 msgid "Copy from HEAD" msgstr "Kopie von HEAD" #: ui/glade/branch.glade.h:6 msgid "Copy from revision" msgstr "Kopie von Revision" #: ui/glade/branch.glade.h:7 msgid "Copy from working copy" msgstr "Kopie von Arbeitskopie" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s)" msgstr "Betroffene Datei(en)" #: ui/glade/log.glade.h:3 ui/glade/dialogs.glade.h:3 msgid "Message" msgstr "Logmeldung" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "Revisionen" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Limit:" #: ui/glade/log.glade.h:7 msgid "Log" msgstr "Log" #: ui/glade/log.glade.h:9 msgid "Refresh" msgstr "Aktualisieren" #: ui/glade/log.glade.h:10 msgid "Showing Revisions:" msgstr "Zeige Revisionen:" #: ui/glade/log.glade.h:11 msgid "Stop on copy" msgstr "Bei Kopie anhalten" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "Quell-URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "Von: (URL und zusammenzufÃŧhrende Revision)" #: ui/glade/merge.glade.h:3 ui/glade/checkout.glade.h:1 msgid "Options" msgstr "Optionen" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "Revisionsbereich" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "Nach: (URL und zusammenzufÃŧhrende Revision)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "URL von der zusammengefÃŧhrt werden soll" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "Arbeitskopie" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "Wählen Sie diese Methode, wenn Sie Änderungen an einem Zweig vorgenommen " "haben und Ihre Änderungen mit einem anderen Zweig zusammenfÃŧhren mÃļchten." #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "Wählen Sie diese Methode, wenn Sie zwei verschiedene Zweige in Ihre " "Arbeitskopie zusammenfÃŧhren mÃļchten." #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "Abstammung ignorieren" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "ZusammenfÃŧhrassistent" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "Einen Revisionsbereich zusammenfÃŧhren" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "Zwei verschiedene Bäume zusammenfÃŧhren" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "Nur als zusammengefÃŧhrt markieren" #: ui/glade/merge.glade.h:16 ui/glade/checkout.glade.h:9 #: ui/glade/update.glade.h:5 msgid "Recursive" msgstr "Rekursiv" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "ZusammenfÃŧhren testen" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" "Benutzen Sie den Log-Dialog, um die Revisionen zum ZusammenfÃŧhren " "auszuwählen. Oder geben Sie die Revisionen per Hand an, durch Komma " "getrennt. Sie kÃļnnen einen Revisionsbereich mit dem Bindestrich angeben.\n" "\n" "Beispiel: 4-7, 9,11,15-HEAD\n" "\n" "Lassen Sie das Feld leer, um alle Revisionen zusammenzufÃŧhren." #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "Authentifizierung" #: ui/glade/settings.glade.h:2 msgid "Log Messages" msgstr "Logmeldungen" #: ui/glade/settings.glade.h:3 msgid "Logging Options" msgstr "Logging-Optionen" #: ui/glade/settings.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:5 msgid "Program used to browse repositories" msgstr "Programm zum Durchsuchen von Projektarchiven" #: ui/glade/settings.glade.h:6 msgid "Program used to compare files" msgstr "Programm zum Dateivergleich" #: ui/glade/settings.glade.h:7 msgid "URL History" msgstr "URL-Historie" #: ui/glade/settings.glade.h:8 ui/glade/checkout.glade.h:4 msgid "Browse..." msgstr "Durchsuchen..." #: ui/glade/settings.glade.h:9 msgid "Clear your authentication information" msgstr "Ihre Anmeldeinformationen lÃļschen" #: ui/glade/settings.glade.h:10 msgid "Enable emblems" msgstr "Embleme einschalten" #: ui/glade/settings.glade.h:11 msgid "Enable file attributes" msgstr "Dateiattribute einschalten" #: ui/glade/settings.glade.h:12 msgid "Enable recursive status checks" msgstr "Rekursive StatusÃŧberprÃŧfungen aktivieren" #: ui/glade/settings.glade.h:13 msgid "External Programs" msgstr "Externe Programme" #: ui/glade/settings.glade.h:14 msgid "General" msgstr "Allgemein" #: ui/glade/settings.glade.h:15 msgid "Language:" msgstr "Sprache:" #: ui/glade/settings.glade.h:16 msgid "Logging" msgstr "Logging" #: ui/glade/settings.glade.h:17 msgid "Minimum level to log" msgstr "Minimaler Loglevel" #: ui/glade/settings.glade.h:18 msgid "Number of URLs to remember" msgstr "Zahl der zu merkenden URLs" #: ui/glade/settings.glade.h:19 msgid "Number of messages to remember" msgstr "Zahl der zu merkenden Logmeldungen" #: ui/glade/settings.glade.h:20 msgid "Saved Data" msgstr "Gespeicherte Daten" #: ui/glade/settings.glade.h:21 lib/extensions/nautilus/RabbitVCS.py:1043 msgid "Settings" msgstr "Einstellungen" #: ui/glade/settings.glade.h:22 msgid "Show new version on the right side" msgstr "Neue Version auf der rechten Seite zeigen" #: ui/glade/settings.glade.h:23 msgid "Type:" msgstr "Typ:" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "Aufräumen angefragt...\n" "\n" "Aufräumen der Arbeitskopie beginnen?" #: ui/glade/dialogs.glade.h:1 msgid "Certificate Details" msgstr "Zertifikatsdetails" #: ui/glade/dialogs.glade.h:2 msgid "Edit Property Details" msgstr "Eigenschaftsdetails bearbeiten" #: ui/glade/dialogs.glade.h:4 msgid "Please add your authentication details" msgstr "Bitte geben Sie Ihre Authentifizierungsinformationen an" #: ui/glade/dialogs.glade.h:5 msgid "Previous Messages" msgstr "FrÃŧhere Logmeldungen" #: ui/glade/dialogs.glade.h:7 msgid "" "Are you sure you want to delete %item%?" msgstr "" "Wollen Sie wirklich %item% lÃļschen?" #: ui/glade/dialogs.glade.h:8 msgid "Accept Forever" msgstr "Dauerhaft akzeptieren" #: ui/glade/dialogs.glade.h:9 msgid "Accept Once" msgstr "Einmal akzeptieren" #: ui/glade/dialogs.glade.h:11 msgid "Authentication" msgstr "Anmeldung" #: ui/glade/dialogs.glade.h:12 msgid "Check Certificate" msgstr "Zertifikat prÃŧfen" #: ui/glade/dialogs.glade.h:13 msgid "Confirmation" msgstr "Bestätigung" #: ui/glade/dialogs.glade.h:14 msgid "Delete Confirmation" msgstr "Bestätigung zum LÃļschen" #: ui/glade/dialogs.glade.h:15 msgid "Deny" msgstr "Verweigern" #: ui/glade/dialogs.glade.h:16 msgid "Fingerprint:" msgstr "Fingerabdruck:" #: ui/glade/dialogs.glade.h:17 msgid "Host:" msgstr "Server:" #: ui/glade/dialogs.glade.h:18 msgid "Issuer:" msgstr "Aussteller:" #: ui/glade/dialogs.glade.h:19 msgid "Login:" msgstr "Benutzername:" #: ui/glade/dialogs.glade.h:21 msgid "Password:" msgstr "Passwort:" #: ui/glade/dialogs.glade.h:23 msgid "Property" msgstr "Eigenschaft" #: ui/glade/dialogs.glade.h:24 msgid "Property:" msgstr "Eigenschaft:" #: ui/glade/dialogs.glade.h:25 msgid "Realm:" msgstr "Bereich:" #: ui/glade/dialogs.glade.h:26 msgid "Save Authentication" msgstr "Anmeldeinformationen speichern" #: ui/glade/dialogs.glade.h:27 msgid "The item(s) will be sent to the trash can." msgstr "Das Objekt/Die Objekte werden in den MÃŧlleimer verschoben." #: ui/glade/dialogs.glade.h:28 msgid "Valid:" msgstr "GÃŧltig:" #: ui/glade/dialogs.glade.h:29 msgid "Value:" msgstr "Wert:" #: ui/glade/checkout.glade.h:6 msgid "Destination:" msgstr "Zielort:" #: ui/glade/checkout.glade.h:8 ui/glade/update.glade.h:4 msgid "Omit Externals" msgstr "Ignoriere Externe Links" #: ui/glade/checkout.glade.h:12 msgid "URL:" msgstr "URL:" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "Import-Logmeldung" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "Ignorierte Dateien einbeziehen" #: ui/glade/update.glade.h:2 msgid "Update Depth" msgstr "Aktualisierungstiefe" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "Das Projektarchiv der Arbeitskopie ändern" #: lib/extensions/nautilus/RabbitVCS.py:362 msgid "Debug" msgstr "Debug" #: lib/extensions/nautilus/RabbitVCS.py:375 msgid "DBus" msgstr "DBus" #: lib/extensions/nautilus/RabbitVCS.py:388 msgid "Start/Restart Service" msgstr "Start/Restart Service" #: lib/extensions/nautilus/RabbitVCS.py:404 msgid "Exit Service" msgstr "Exit Service" #: lib/extensions/nautilus/RabbitVCS.py:422 msgid "Bugs" msgstr "Bugs" #: lib/extensions/nautilus/RabbitVCS.py:435 msgid "Test Asynchronicity" msgstr "Test Asynchronicity" #: lib/extensions/nautilus/RabbitVCS.py:453 msgid "Open Shell" msgstr "Open Shell" #: lib/extensions/nautilus/RabbitVCS.py:469 msgid "Refresh Status" msgstr "Refresh Status" #: lib/extensions/nautilus/RabbitVCS.py:486 msgid "Debug Revert" msgstr "Debug Revert" #: lib/extensions/nautilus/RabbitVCS.py:487 msgid "Reverts everything it sees" msgstr "Reverts everything it sees" #: lib/extensions/nautilus/RabbitVCS.py:502 msgid "Invalidate" msgstr "UngÃŧltig machen" #: lib/extensions/nautilus/RabbitVCS.py:503 msgid "Force an invalidate_extension_info() call" msgstr "Einen Aufruf von invalidate_extension_info() forcieren" #: lib/extensions/nautilus/RabbitVCS.py:518 msgid "Add Emblem" msgstr "Emblem hinzufÃŧgen" #: lib/extensions/nautilus/RabbitVCS.py:519 msgid "Add an emblem" msgstr "Ein Emblem hinzufÃŧgen" #: lib/extensions/nautilus/RabbitVCS.py:537 msgid "Check out a working copy" msgstr "Eine Arbeitskopie auschecken" #: lib/extensions/nautilus/RabbitVCS.py:553 msgid "Update a working copy" msgstr "Eine Arbeitskopie aktualisieren" #: lib/extensions/nautilus/RabbitVCS.py:569 msgid "Commit modifications to the repository" msgstr "Änderungen in das Projektarchiv Ãŧbertragen" #: lib/extensions/nautilus/RabbitVCS.py:584 msgid "RabbitVCS" msgstr "RabbitVCS" #: lib/extensions/nautilus/RabbitVCS.py:598 msgid "View the modifications made to a file" msgstr "Die an einer Datei vorgenommen Änderung ansehen" #: lib/extensions/nautilus/RabbitVCS.py:613 msgid "Show Log" msgstr "Log anzeigen" #: lib/extensions/nautilus/RabbitVCS.py:614 msgid "Show a file's log information" msgstr "Logmeldungen einer Datei zeigen" #: lib/extensions/nautilus/RabbitVCS.py:639 msgid "Schedule an item to be added to the repository" msgstr "Ein Objekt zum HinzufÃŧgen zum Projektarchiv vormerken" #: lib/extensions/nautilus/RabbitVCS.py:663 msgid "Ignore an item" msgstr "Ein Objekt ignorieren" #: lib/extensions/nautilus/RabbitVCS.py:678 msgid "Ignore all files with this extension" msgstr "Alle Dateien mit dieser Erweiterung ignorieren" #: lib/extensions/nautilus/RabbitVCS.py:703 msgid "Update to revision..." msgstr "Aktualisieren auf..." #: lib/extensions/nautilus/RabbitVCS.py:704 msgid "Update a file to a specific revision" msgstr "Eine Datei auf eine bestimmte Revision aktualisieren" #: lib/extensions/nautilus/RabbitVCS.py:719 msgid "Rename..." msgstr "Umbenennen..." #: lib/extensions/nautilus/RabbitVCS.py:720 msgid "Schedule an item to be renamed on the repository" msgstr "Ein Objekt zum Umbenennen im Projektarchiv vormerken" #: lib/extensions/nautilus/RabbitVCS.py:736 msgid "Schedule an item to be deleted from the repository" msgstr "Ein Objekt zum LÃļschen aus dem Projektarchiv vomerken" #: lib/extensions/nautilus/RabbitVCS.py:752 msgid "Revert an item to its unmodified state" msgstr "Ein Objekt in seinen unveränderten Zustand rÃŧckversetzen" #: lib/extensions/nautilus/RabbitVCS.py:768 msgid "Mark a conflicted item as resolved" msgstr "Ein in Konflikt stehendes Objekt als gelÃļst markieren" #: lib/extensions/nautilus/RabbitVCS.py:783 msgid "Relocate..." msgstr "URL umstellen" #: lib/extensions/nautilus/RabbitVCS.py:784 msgid "Relocate your working copy" msgstr "URL des Projektarchivs umstellen" #: lib/extensions/nautilus/RabbitVCS.py:799 msgid "Get Lock..." msgstr "Sperren..." #: lib/extensions/nautilus/RabbitVCS.py:800 msgid "Locally lock items" msgstr "Objekte lokal sperren" #: lib/extensions/nautilus/RabbitVCS.py:815 msgid "Release Lock..." msgstr "Sperre aufheben..." #: lib/extensions/nautilus/RabbitVCS.py:816 msgid "Release lock on an item" msgstr "Sperre fÃŧr Objekte aufheben" #: lib/extensions/nautilus/RabbitVCS.py:832 msgid "Clean up working copy" msgstr "Arbeitskopie aufräumen" #: lib/extensions/nautilus/RabbitVCS.py:857 msgid "Export a working copy or repository with no versioning information" msgstr "" "Eine Arbeitskopie oder ein Projektarchiv ohne Versionsinformationen " "exportieren" #: lib/extensions/nautilus/RabbitVCS.py:872 msgid "Create Repository here" msgstr "Projektarchiv hier erstellen" #: lib/extensions/nautilus/RabbitVCS.py:873 msgid "Create a repository in a folder" msgstr "Ein Projektarchiv in einem Ordner erstellen" #: lib/extensions/nautilus/RabbitVCS.py:889 msgid "Import an item into a repository" msgstr "Ein Objekt in ein Projektarchiv importieren" #: lib/extensions/nautilus/RabbitVCS.py:913 msgid "Branch/tag..." msgstr "Zweig/Tag..." #: lib/extensions/nautilus/RabbitVCS.py:914 msgid "Copy an item to another location in the repository" msgstr "Ein Objekt zu einem anderen Ort im Projektarchiv kopieren" #: lib/extensions/nautilus/RabbitVCS.py:929 msgid "Switch..." msgstr "Zweig/Tag wechseln..." #: lib/extensions/nautilus/RabbitVCS.py:930 msgid "Change the repository location of a working copy" msgstr "Den Ort des Projektarchivs fÃŧr eine Arbeitskopie umstellen" #: lib/extensions/nautilus/RabbitVCS.py:945 msgid "Merge..." msgstr "ZusammenfÃŧhren..." #: lib/extensions/nautilus/RabbitVCS.py:946 msgid "A wizard with steps for merging" msgstr "Ein Assistent zum ZusammenfÃŧhren" #: lib/extensions/nautilus/RabbitVCS.py:970 msgid "Annotate..." msgstr "Annotieren" #: lib/extensions/nautilus/RabbitVCS.py:971 msgid "Annotate a file" msgstr "Autoren- und Revisionsinformationen zu einer Datei anzeigen" #: lib/extensions/nautilus/RabbitVCS.py:996 msgid "View the properties of an item" msgstr "Die Eigenschaften eines Objekts ansehen" #: lib/extensions/nautilus/RabbitVCS.py:1027 msgid "Help" msgstr "Hilfe" #: lib/extensions/nautilus/RabbitVCS.py:1028 msgid "View help" msgstr "Hilfe ansehen" #: lib/extensions/nautilus/RabbitVCS.py:1044 msgid "View or change RabbitVCS settings" msgstr "Einstellungen von RabbitVCS sehen oder bearbeiten" #: lib/extensions/nautilus/RabbitVCS.py:1060 msgid "About RabbitVCS" msgstr "Über RabbitVCS" #: lib/vcs/svn/__init__.py:111 lib/vcs/svn/__init__.py:120 #: lib/vcs/svn/__init__.py:127 msgid "Added" msgstr "HinzugefÃŧgt" #: lib/vcs/svn/__init__.py:112 lib/vcs/svn/__init__.py:128 msgid "Copied" msgstr "Kopiert" #: lib/vcs/svn/__init__.py:113 lib/vcs/svn/__init__.py:119 msgid "Deleted" msgstr "GelÃļscht" #: lib/vcs/svn/__init__.py:114 msgid "Restored" msgstr "Wiederhergestellt" #: lib/vcs/svn/__init__.py:115 msgid "Reverted" msgstr "RÃŧckgängig gemacht" #: lib/vcs/svn/__init__.py:116 msgid "Failed Revert" msgstr "RÃŧckgängig machen fehlgeschlagen" #: lib/vcs/svn/__init__.py:117 msgid "Resolved" msgstr "AufgelÃļst" #: lib/vcs/svn/__init__.py:118 msgid "Skipped" msgstr "Übersprungen" #: lib/vcs/svn/__init__.py:121 msgid "Updated" msgstr "Aktualisiert" #: lib/vcs/svn/__init__.py:123 lib/vcs/svn/__init__.py:125 msgid "External" msgstr "Extern" #: lib/vcs/svn/__init__.py:126 msgid "Modified" msgstr "Geändert" #: lib/vcs/svn/__init__.py:129 msgid "Replaced" msgstr "Ersetzt" #: lib/vcs/svn/__init__.py:130 lib/vcs/svn/__init__.py:149 msgid "Changed" msgstr "Geändert" #: lib/vcs/svn/__init__.py:131 msgid "Annotated" msgstr "Annotiert" #: lib/vcs/svn/__init__.py:133 msgid "Unlocked" msgstr "Entsperrt" #: lib/vcs/svn/__init__.py:134 msgid "Failed Lock" msgstr "Sperren fehlgeschlagen" #: lib/vcs/svn/__init__.py:135 msgid "Failed Unlock" msgstr "Entsperren fehlgeschlagen" #: lib/vcs/svn/__init__.py:144 msgid "Inapplicable" msgstr "Nicht anwendbar" #: lib/vcs/svn/__init__.py:145 msgid "Unknown" msgstr "Unbekannt" #: lib/vcs/svn/__init__.py:146 msgid "Unchanged" msgstr "Unverändert" #: lib/vcs/svn/__init__.py:147 msgid "Missing" msgstr "Fehlend" #: lib/vcs/svn/__init__.py:148 msgid "Obstructed" msgstr "Verhindert" #: lib/vcs/svn/__init__.py:150 msgid "Merged" msgstr "ZusammengefÃŧhrt" #: lib/vcs/svn/__init__.py:151 msgid "Conflicted" msgstr "Im Konflikt" rabbitvcs-0.19/po/es.po000066400000000000000000001375141445560650400150330ustar00rootroot00000000000000# Spanish translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-03-19 15:25+0000\n" "Last-Translator: RaÃēl Ricardo Amaya \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i segundo" msgstr[1] "%i segundos" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i minuto" msgstr[1] "%i minutos" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i hora" msgstr[1] "%i horas" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i día" msgstr[1] "%i días" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i semana" msgstr[1] "%i semanas" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i mes" msgstr[1] "%i meses" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i aÃąo" msgstr[1] "%i aÃąos" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "Depurar" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "Errores" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "Abrir terminal" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "Actualizar estado" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "Depurar reversiÃŗn" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "Revertir todo lo que se vea" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "Invalidar" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "Forzar a una llamada a invalidate_extension_info()" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "AÃąadir emblema" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "AÃąadir un emblema" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "Comprobar..." #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "Obtener una copia de trabajo" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "Actualizar" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "Actualizar una copia de trabajo" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "Confirmar" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "Confirmar modificaciones al repositorio" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "Navegador de repositorio" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "Navegar por un ÃĄrbol de repositorio" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "Comprobar si hay modificaciones..." #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "Comprobar si hay modificaciones en el repositorio" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "MenÃē de Diff..." #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "Lista de opciones de comparaciÃŗn" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "Ver diff con base" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "Ver las modificaciones realizadas a un archivo" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "Ver diff entre archivos/carpetas" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "Ver las diferencias entre dos archivos" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "Ver diff con la versiÃŗn anterior" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "Ver las modificaciones del archivo desde el Ãēltimo cambio" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "Comparar con base" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" "Comparar con base usando la herramienta de comparaciÃŗn uno al lado del otro" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "Comparar archivos/carpetas" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "Comparar las diferencias entre los dos elementos" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "Comparar con versiÃŗn anterior" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" "Comparar con revisiÃŗn anterior usando la herramienta de comparaciÃŗn uno al " "lado del otro" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "Mostrar cambios..." #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "Mostrar cambios entre rutas y revisiones" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "Mostrar registro" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "Mostrar informaciÃŗn de registro de un archivo" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "AÃąadir" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "Gestionar elementos que se aÃąadirÃĄn al repositorio" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "AÃąadir a la lista de ignorados" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "Actualizar a revisiÃŗn..." #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "Actualizar un archivo a una versiÃŗn específica" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "Renombrar..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "Planificar que un elemento sea renombrado en el repositorio" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "Eliminar" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "Planificar que un elemento sea eliminado del repositorio" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "Revertir" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "Revertir un elemento a su estado no modificado" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "Resolver" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "Marcar un elemento conflictivo como resuelto" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "Restaurar" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "Restaurar un elemento que falta" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "Reubicar..." #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "Reubicar copia de trabajo" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "Bloquear" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "Elementos locales bloqueados" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "Desblouear..." #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "Desbloquear un elemento" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Limpiar" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "Limpiar copia de trabajo" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "Exportar..." #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" "Exportar una copia de trabajo o repositorio sin informaciÃŗn de versionado" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "Crear aquí un repositorio" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "Crear un repositorio en una carpeta" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "Importar" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "Importar un elemento en un repositorio" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "Rama/etiqueta..." #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "Copiar un elemento a otra ubicaciÃŗn en el repositorio" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "Cambiar..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "Cambiar la ubicaciÃŗn de un repositorio de una copia local" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "Mezclar..." #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "Un asistente con pasos para mezclar" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "Anotar..." #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "Anotar un archivo" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "Crear parche..." #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "Crea un archivo diff unificado con todos los cambios que hizo" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "Aplicar parche..." #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "Aplica un archivo diff unificado a una copia funcional" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "Propiedades" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "Ver las propiedades de un elemento" #: util/contextmenuitems.py:545 msgid "Help" msgstr "Ayuda" #: util/contextmenuitems.py:546 msgid "View help" msgstr "Ver ayuda" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "Preferencias" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "Ver o cambiar las preferencias de RabbitVCS" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "Acerca de" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "Sobre RabbitVCS" #: util/contextmenuitems.py:563 msgid "Open" msgstr "Abrir" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "Abrir un archivo" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "Navegar en" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "Buscar archivo o carpeta" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "Revertir propiedad" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "Revertir esta propiedad a su estado original" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "Revertir propiedad (recusivo)" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "Revertir esta propiedad a su estado original (recursivo)" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "Eliminar propiedad" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "Eliminar esta propiedad" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "Eliminar esta propiedad (recursivo)" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "Ignorar elementos por nombre de archivo" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "Ignorar elementos por extensiÃŗn de archivo" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "Actualizando..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "ActualizaciÃŗn completada" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "Actualizar a revisiÃŗn" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "Obtener rep." #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "ObtenciÃŗn completada" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "Ruta" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "ExtensiÃŗn" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Cargando..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "%d elemento(s) encontrados" #: ui/add.py:157 msgid "Running Add Command..." msgstr "Ejecutando orden de aÃąadir..." #: ui/add.py:159 msgid "Completed Add" msgstr "La orden de aÃąadir se ha completado" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "RevisiÃŗn:" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "Exportar - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "Se requiere la URL del repositorio y la ruta de destino." #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Exportar" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "Ejecutando orden de exportar..." #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "ExportaciÃŗn completada" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "Aplicar parche" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "Aplicar parche al directorio..." #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "Aplicando archivo de parche..." #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "Archivo de parche aplicado" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "Fecha" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "Mensaje" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "Importar - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "Se necesita el campo de direcciÃŗn del repositorio." #: ui/import.py:81 msgid "Running Import Command..." msgstr "Ejecutando importaciÃŗn..." #: ui/import.py:89 msgid "Completed Import" msgstr "ImportaciÃŗn completada" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "Renombrar" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "Nuevo nombre:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "Se necesita el campo de nuevo nombre" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "Ejecutando la orden de renombrar..." #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "Renombrado completado" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "Estado del texto" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "Estado de propiedad" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "Ejecutando orden de confirmaciÃŗn..." #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "ConfirmaciÃŗn competada" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "Estado" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "Ver diff uno al lado del otro" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "Ejecutando prueba de mezcla" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "Prueba de mezcla completada" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "Ejecutando orden de mezclar" #: ui/merge.py:91 msgid "Completed Merge" msgstr "Mezcla completada" #: ui/merge.py:102 msgid "Merge" msgstr "Mezclar" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" "Ha ocurrido un error en el complemento RabbitVCS de Nautilus. Contacte con " "el equipo de RabbitVCS con los detalles de error listados " "debajo:" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Seleccione una carpeta" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "a" #: ui/dialog.py:261 msgid "Select a File" msgstr "Seleccione un archivo" #: ui/dialog.py:280 msgid "Save As..." msgstr "Guardar comoâ€Ļ" #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "ÂŋEstÃĄ seguro de que quiere continuar?" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "el/los elemento(s) seleccionado(s)" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "Se ha aÃąadido una carpeta al repositorio" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "Ejecutando orden de reversiÃŗn..." #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "ReversiÃŗn completada" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "Se requieren los campos de origen y destino." #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "Relocalizar" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "Ejecutando orden de relocalizaciÃŗn" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "RelocalizaciÃŗn completada" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "RevisiÃŗn" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "Autor" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "Ver diff unificado" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "Comparar uno al lado del otro" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "Ejecutando orden de resolver..." #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "ResoluciÃŗn completada" #: ui/changes.py:49 msgid "More Actions..." msgstr "MÃĄs acciones..." #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "Cambiar" #: ui/changes.py:279 msgid "Property Change" msgstr "Cambiar propiedad" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Sí" #: ui/changes.py:321 msgid "No" msgstr "No" #: ui/changes.py:410 msgid "Open from first revision" msgstr "Abrir desde la primera revisiÃŗn" #: ui/changes.py:415 msgid "Open from second revision" msgstr "Abrir desde la segunda revisiÃŗn" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "No se puede anotar un directorio" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "Anotado - %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Línea" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Texto" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "El campo revisiÃŗn debe ser un entero" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "Registro - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "N/A" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "AcciÃŗn" #: ui/log.py:338 msgid "Copy From Path" msgstr "Copiar desde la ruta" #: ui/log.py:338 msgid "Copy From Revision" msgstr "Copiar desde la revisiÃŗn" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "Ver diff con la copia de trabajo" #: ui/log.py:791 msgid "View diff between revisions" msgstr "Ver diff entre revisiones" #: ui/log.py:796 msgid "Compare with working copy" msgstr "Comparar con copia de trabajo" #: ui/log.py:806 msgid "Compare revisions" msgstr "Comparar revisiones" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "Mostrar cambios entre revisiones" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "Editar autor..." #: ui/log.py:837 msgid "Edit log message..." msgstr "Editar mensaje de registro..." #: ui/log.py:841 msgid "Edit revision properties..." msgstr "Editar propiedades de la revisiÃŗn..." #: ui/log.py:1047 msgid "Edit author" msgstr "Editar autor" #: ui/log.py:1059 msgid "Edit log message" msgstr "Editar mensaje de registro" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "Desconocido" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "InglÊs" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "Seleccionar un programa" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "ÂŋEstÃĄ seguro de que quiere borrar las rutas de su repositorio?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "Rutas de repositorio borradas" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "ÂŋEstÃĄ seguro de que quiere limpiar sus mensajes anteriores?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "Mensajes anteriores borrados" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "ÂŋEstÃĄ seguro de que quiere limpiar su informaciÃŗn de autenticaciÃŗn?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "InformaciÃŗn de autenticaciÃŗn borrada" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "No se pudo obtener la lista de propiedades" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "Debe proporcionar una ruta de destino." #: ui/branch.py:115 msgid "Branch/tag" msgstr "Rama/etiqueta" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "Ejecutando la orden de Rama/Etiqueta..." #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "Rama/etiqueta completada" #: ui/lock.py:73 msgid "Locked" msgstr "Bloqueado" #: ui/lock.py:167 msgid "Get Lock" msgstr "Tomar cerrojo" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "Ejecutando orden de cerrar..." #: ui/lock.py:177 msgid "Completed Lock" msgstr "Clausura completada" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "La ubicaciÃŗn del repositorio es un campo obligatorio." #: ui/switch.py:80 msgid "Switch" msgstr "Cambiar" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "Ejecutando comando de cambio" #: ui/switch.py:89 msgid "Completed Switch" msgstr "Cambio completo" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "HEAD" #: ui/widget.py:860 msgid "Number" msgstr "NÃēmero" #: ui/widget.py:861 msgid "Working Copy" msgstr "Copia de trabajo" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "Equipo:" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "Obtener repositorio - %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "Obteniendo repositorio..." #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "Nombre" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "Crear parche" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "La ruta proporcionada no es una copia de trabajo" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "Creando fichero parche" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "Fichero parche creado" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "Propiedades - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "Valor" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "Ha ocurrido un problema al guardar sus propiedades." #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" "Nota: los cambios en las propiedades se aplican instantÃĄneamente. " "Puede revisar y deshacer los cambios usando el menÃē de contexto de cada " "elemento.\n" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" "ÂŋQuiere eliminar las propiedades seleccionadas de todos los archivos y " "subdirectorios\n" "que estÊn por debajo de este directorio?" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "El archivo no estÃĄ bajo control de versiones." #: ui/property_editor.py:112 msgid "Reserved" msgstr "Reservado" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "No se puedo establecer un nuevo valor a esta propiedad." #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "Tipo MIME" #: ui/action.py:338 msgid "Finished" msgstr "Finalizado" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - Finalizado" #: ui/action.py:365 msgid "Log Message" msgstr "Mensaje de registro" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "Abrir cerrojo" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "Ejecutando orden de abrir cerrojo..." #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "Apertura de cerrojo completada" #: ui/browser.py:89 msgid "Size" msgstr "TamaÃąo" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "Crear carpeta..." #: ui/browser.py:353 msgid "Copy to..." msgstr "Copiar a..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "Copiar el URL al portapapeles" #: ui/browser.py:363 msgid "Move to..." msgstr "Mover a..." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "ÂŋDÃŗnde quiere copiar la selecciÃŗn?" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "Nueva ubicaciÃŗn:" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "ÂŋA dÃŗnde quiere mover la selecciÃŗn?" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "Limpiando..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "Limpieza completada" #: ui/create.py:46 msgid "Repository successfully created" msgstr "Repositorio creado con Êxito" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" "Ha habido un error al crear el repositorio. AsegÃērese de que la carpeta dada " "estÃĄ vacía." #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Propiedades de:" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "Las propiedades seleccionadas serÃĄn aplicadas recursivamente." #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "Eliminar propiedades recursivamente" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "Editar..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "Nuevo..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "URL/ruta:" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "Cargar/actualizar" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "AÃąadir mensaje" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "Detalles de certificaciÃŗn" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "Editar detalles de propiedad" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "Nombre de carpeta" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "Mensaje" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "Por favor, aÃąada sus detalles de autenticaciÃŗn" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "Introduzca su archivo certificaciÃŗn SSL" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "Mensajes anteriores" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" "ÂŋEstÃĄ seguro de que quiere eliminar " "%item%?" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "Error de RabbitVCS" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "Aceptar siempre" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "Aceptar una vez" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "Aplicar propiedad recursivamente" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "AutenticaciÃŗn" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "Comprobar certificado" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "ConfirmaciÃŗn" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "Crear carpeta..." #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "Eliminar confirmaciÃŗn" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "Denegar" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "Huella:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "Emisor:" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "Usuario:" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "ContraseÃąa:" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "Ruta:" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "Mensajes anteriores" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "Propiedad" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "Propiedad:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "Error de RabbitVCS" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "Reino:" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "CertificaciÃŗn de cliente SSL" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "Guardar autenticaciÃŗn" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "Cambio de texto" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "El/los elemento(s) se enviarÃĄn a la papelera de reciclaje." #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "VÃĄlido:" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "Valor:" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "Enlaces" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "InformaciÃŗn de versiÃŗn" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Autores:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Agradecimientos:" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" "Archivos afectados (pulse dos veces para comparar con la base)" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "Tabla de revisiones" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Límite:" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "Registro" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "Actualizar" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "Mostrando revisiones:" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "Parar al copiar" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "PeticiÃŗn de limpieza realizada...\n" "\n" "ÂŋEmpezar limpieza de copia local?" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "AutenticaciÃŗn" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "Mensajes de registro" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "Opciones de registro" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "Programa usado para comparar archivos" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "HistÃŗrico de URLs" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "Navegar..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "Limpiar su informaciÃŗn de autenticaciÃŗn" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "Activar emblemas" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "Activar atributos de archivo" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "Activar comprobaciones recursivas de estado" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "Programas externos" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "General" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "Idioma:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "Registro" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "Nivel mínimo de registro" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "NÃēmero de URLs a recordar" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "NÃēmero de mensajes a recordar" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "Datos guardados" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "Mostrar las herramientas de depuraciÃŗn de RabbitVCS" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" "El menÃē de depuraciÃŗn es usado para diagnosticar problemas en RabbitVCS" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "Tipo:" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "Archivos a cerrar" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "" "Por favor, describa el motivo por el que estÃĄ cerrando estos archivos" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "Archivos cerrados" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "Seleccionar/Deseleccionar todos" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "Robar los cerrojos" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "De revisiÃŗn" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "A revisiÃŗn" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "Anotar" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" "Archivos cambiados (pulse dos veces para comparar con el base)" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "Confirmar a:" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "Mostrar archivos no versionados" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Mensajes de notificaciÃŗn" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "URI remota:" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "Copia de trabajo:" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "AÃąadir nueva propiedad." #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "Cerrar este diÃĄlogo." #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "Editor de propiedades" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "Actualizar lista de propiedades." #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "Cambiar el repositorio de su copia de trabajo" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "Desde:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "A:" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "Opciones" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "RevisiÃŗn" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "Omitir externos" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "Recursivo" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "Importar mensaje" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "Repositorio" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "Incluir archivos ignorados" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "Desde URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "Desde: (URL y revisiÃŗn a mezclar)" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "Intervalo de revisiÃŗn" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "A: (URL y revisiÃŗn a mezclar)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "URL a la que mezclar" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "Copia de trabajo" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "Elija este mÊtodo si ha hecho algunos cambios a la rama y desea mezclar sus " "cambios con otra rama." #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "Elija este mÊtodo si desea mezclar dos ramas diferentes en su copia de " "trabajo." #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "Ignorar ancestros" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "Asistente de mezclado" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "Mezclar un intervalo de revisiones" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "Mezclar dos ÃĄrboles diferentes" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "Registrar sÃŗlo la mezcla" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "Mostrar registro" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "Comprobar mezcla" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" "Use el diÃĄlogo de registro para seleccionar las revisiones que desea " "mezclar. O escriba las revisiones manualmente, cada una separada por una " "coma. Puede especificar un intervalo de revisiones con un guiÃŗn. \n" "\n" "Ejemplo: 4-7,9,11,15-HEAD\n" "\n" "Para mezclar todas las revisiones, deje el campo vacío." #~ msgid "Completed" #~ msgstr "Completado" #~ msgid "Switch Details" #~ msgstr "Cambiar detalles" #~ msgid "Create copy from" #~ msgstr "Crear copia de" #~ msgid "Program used to browse repositories" #~ msgstr "Programa usado para navegar en repositorios" #~ msgid "Show new version on the right side" #~ msgstr "Mostrar nueva versiÃŗn a la derecha" #~ msgid "Destination:" #~ msgstr "Destino:" #~ msgid "Update Depth" #~ msgstr "Actualizar profundidad" #~ msgid "Deleted" #~ msgstr "Eliminado" #~ msgid "Copied" #~ msgstr "Copiado" #~ msgid "Added" #~ msgstr "AÃąadido" #~ msgid "Restored" #~ msgstr "Restaurado" #~ msgid "Reverted" #~ msgstr "Revertido" #~ msgid "External" #~ msgstr "Externo" #~ msgid "Failed Revert" #~ msgstr "FallÃŗ la reversiÃŗn" #~ msgid "Resolved" #~ msgstr "Resuelto" #~ msgid "Skipped" #~ msgstr "Ignorado" #~ msgid "Updated" #~ msgstr "Actualizado" #~ msgid "Inapplicable" #~ msgstr "No aplicable" #~ msgid "Unchanged" #~ msgstr "Sin cambios" #~ msgid "Modified" #~ msgstr "Modificado" #~ msgid "Replaced" #~ msgstr "Reemplazado" #~ msgid "Changed" #~ msgstr "Cambiado" #~ msgid "Annotated" #~ msgstr "Anotado" #~ msgid "Unlocked" #~ msgstr "Abierto" #~ msgid "Conflicted" #~ msgstr "Con conflictos" #~ msgid "Merged" #~ msgstr "Mezclado" #~ msgid "Missing" #~ msgstr "Perdido" #~ msgid "Obstructed" #~ msgstr "Obstruido" #~ msgid "(no author)" #~ msgstr "(sin autor)" #~ msgid "Failed Unlock" #~ msgstr "FallÃŗ desbloqueo" #~ msgid "Failed Lock" #~ msgstr "FallÃŗ bloqueo" rabbitvcs-0.19/po/es_CL.po000066400000000000000000000774701445560650400154150ustar00rootroot00000000000000# Spanish translations for PACKAGE package # Traducciones al espaÃąol para el paquete PACKAGE. # Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Camilo Flores , 2009. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-03-04 14:35-0500\n" "PO-Revision-Date: 2009-04-01 00:36-0300\n" "Last-Translator: Camilo Flores \n" "Language-Team: Spanish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ui/branch.py:71 msgid "There have been modifications to your working copy. If you copy from the HEAD revision you will lose your changes." msgstr "Se han detectado cambios en tu copia local. Si actualizas desde la versiÃŗn HEAD perderÃĄs los cambios." #: ui/branch.py:89 msgid "You must supply a destination path." msgstr "Debes ingresar una ruta de destino." #: ui/branch.py:99 msgid "The from revision field is required." msgstr "Es necesario el campo \"desde versiÃŗn\"." #: ui/branch.py:108 msgid "Invalid revision information" msgstr "InformaciÃŗn no vÃĄlida sobre la versiÃŗn." #: ui/branch.py:123 #: ui/glade/branch.glade.h:4 msgid "Branch/tag" msgstr "" #: ui/branch.py:124 msgid "Running Branch/tag Command..." msgstr "Ejecutando el comando Branch/tag" #: ui/branch.py:126 msgid "Completed Branch/tag" msgstr "Comando Branch/tag exitoso." #: ui/updateto.py:70 msgid "Update To Revision" msgstr "Actualizar segÃēn versiÃŗn" #: ui/updateto.py:71 #: ui/update.py:54 msgid "Updating..." msgstr "Actualizando..." #: ui/updateto.py:79 #: ui/update.py:57 msgid "Completed Update" msgstr "ActualizaciÃŗn exitosa." #: ui/rename.py:59 msgid "The new name field is required" msgstr "Es necesario el campo \"nuevo nombre\"" #: ui/rename.py:70 #: ui/glade/rename.glade.h:2 msgid "Rename" msgstr "Cambiar nombre" #: ui/rename.py:71 msgid "Running Rename Command..." msgstr "Ejecutando comando de cambio de nombre..." #: ui/rename.py:78 msgid "Completed Rename" msgstr "Cambio de nombre exitoso." #: ui/annotate.py:51 msgid "Cannot annotate a directory" msgstr "Imposible anotar el directorio" #: ui/annotate.py:58 #, python-format msgid "Annotate - %s" msgstr "Anotar - %s" #: ui/annotate.py:71 msgid "Line" msgstr "Línea" #: ui/annotate.py:71 #: ui/log.py:80 #: ui/glade/switch.glade.h:5 #: ui/glade/merge.glade.h:17 #: ui/glade/checkout.glade.h:10 #: ui/glade/update.glade.h:6 msgid "Revision" msgstr "VersiÃŗn" #: ui/annotate.py:71 #: ui/log.py:80 msgid "Author" msgstr "Autor" #: ui/annotate.py:72 #: ui/dialog.py:47 #: ui/log.py:81 msgid "Date" msgstr "Fecha" #: ui/annotate.py:72 msgid "Text" msgstr "Texto" #: ui/annotate.py:112 msgid "The from revision field must be an integer" msgstr "El campo \"desde version\" debe ser un nÃēmero entero" #: ui/annotate.py:122 msgid "Generating Annotation..." msgstr "Generando AnotaciÃŗn..." #: ui/annotate.py:138 #: lib/vcs/svn/__init__.py:122 #: lib/vcs/svn/__init__.py:124 msgid "Completed" msgstr "Completo." #: ui/settings.py:50 msgid "English" msgstr "InglÊs" #: ui/settings.py:156 #: ui/settings.py:165 msgid "Select a program" msgstr "Elije el programa" #: ui/settings.py:174 msgid "Are you sure you want to clear your repository paths?" msgstr "ÂŋEstÃĄs seguro de querer reestablecer las rutas de tu repositorio?" #: ui/settings.py:181 msgid "Repository paths cleared" msgstr "Rutas del repositorio reestablecidas" #: ui/settings.py:185 msgid "Are you sure you want to clear your previous messages?" msgstr "ÂŋEstÃĄs seguro de querer eliminar tus mensajes previos?" #: ui/settings.py:192 msgid "Previous messages cleared" msgstr "Mensajes previos eliminados" #: ui/settings.py:196 msgid "Are you sure you want to clear your authentication information?" msgstr "ÂŋEstas seguro de querer eliminar tu informaciÃŗn de autenticaciÃŗn?" #: ui/settings.py:213 msgid "Authentication information cleared" msgstr "InformaciÃŗn de autenticaciÃŗn eliminada" #: ui/cleanup.py:54 #: lib/extensions/nautilus/RabbitVCS.py:831 msgid "Cleanup" msgstr "Limpiar" #: ui/cleanup.py:55 #: ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "Limpiando..." #: ui/cleanup.py:57 msgid "Completed Cleanup" msgstr "Limpieza Completa" #: ui/relocate.py:76 msgid "The from and to url fields are both required." msgstr "Son necesarios los campos \"desde\" y \"hasta\" la url" #: ui/relocate.py:86 #: ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "Relocalizar" #: ui/relocate.py:87 msgid "Running Relocate Command..." msgstr "Ejecutando relocalizaciÃŗn..." #: ui/relocate.py:94 msgid "Completed Relocate" msgstr "RelocalizaciÃŗn Completa" #: ui/add.py:64 #: ui/lock.py:66 #: ui/resolve.py:55 #: ui/action.py:66 #: ui/commit.py:73 #: ui/unlock.py:55 #: ui/log.py:89 #: ui/revert.py:55 msgid "Path" msgstr "Ruta" #: ui/add.py:64 #: ui/lock.py:66 #: ui/resolve.py:55 #: ui/commit.py:73 #: ui/unlock.py:55 #: ui/revert.py:55 msgid "Extension" msgstr "ExtensiÃŗn" #: ui/add.py:78 #: ui/lock.py:96 #: ui/commit.py:97 #: ui/unlock.py:70 #: ui/log.py:253 #: ui/glade/log.glade.h:6 msgid "Loading..." msgstr "Cargando..." #: ui/add.py:81 #: ui/lock.py:99 #: ui/commit.py:100 #: ui/unlock.py:91 #, python-format msgid "Found %d item(s)" msgstr "Encontrado %d elemento(s)" #: ui/add.py:115 #: ui/commit.py:269 #: ui/glade/add.glade.h:1 #: lib/extensions/nautilus/RabbitVCS.py:638 msgid "Add" msgstr "AÃąadir" #: ui/add.py:116 msgid "Running Add Command..." msgstr "AÃąadiendo..." #: ui/add.py:118 msgid "Completed Add" msgstr "AÃąadir Completado" #: ui/add.py:141 #: ui/lock.py:206 #: ui/commit.py:239 msgid "Open" msgstr "Abrir" #: ui/add.py:150 #: ui/lock.py:216 #: ui/commit.py:249 msgid "Browse to" msgstr "Navegar hacia" #: ui/add.py:159 #: ui/commit.py:259 #: ui/glade/properties.glade.h:2 #: lib/extensions/nautilus/RabbitVCS.py:735 msgid "Delete" msgstr "Eliminar" #: ui/add.py:168 #: ui/commit.py:299 #: lib/extensions/nautilus/RabbitVCS.py:654 msgid "Add to ignore list" msgstr "AÃąadir a lista de ignorados" #: ui/import.py:41 #, python-format msgid "Import - %s" msgstr "Importar - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "Es necesario el campo de la URL del repositorio." #: ui/import.py:80 #: ui/glade/import.glade.h:3 #: lib/extensions/nautilus/RabbitVCS.py:888 msgid "Import" msgstr "Importar" #: ui/import.py:81 msgid "Running Import Command..." msgstr "Importando..." #: ui/import.py:89 msgid "Completed Import" msgstr "Importar Completado" #: ui/lock.py:67 #: lib/vcs/svn/__init__.py:132 msgid "Locked" msgstr "Bloqueado" #: ui/lock.py:90 #: ui/lock.py:107 msgid "Yes" msgstr "Sí" #: ui/lock.py:144 msgid "Get Lock" msgstr "Bloquear" #: ui/lock.py:145 msgid "Running Lock Command..." msgstr "Bloqueando..." #: ui/lock.py:154 msgid "Completed Lock" msgstr "Bloqueo Completado" #: ui/lock.py:176 msgid "Remove Lock" msgstr "Levantar Bloqueo" #: ui/lock.py:186 #: ui/commit.py:229 #: lib/extensions/nautilus/RabbitVCS.py:597 msgid "View Diff" msgstr "Ver Diferencias" #: ui/lock.py:196 #: ui/glade/switch.glade.h:6 #: ui/glade/branch.glade.h:10 #: ui/glade/merge.glade.h:18 #: ui/glade/checkout.glade.h:11 #: ui/glade/update.glade.h:7 msgid "Show log" msgstr "Mostrar historial" #: ui/export.py:40 #, python-format msgid "Export - %s" msgstr "Exportar - %s" #: ui/export.py:58 #: ui/checkout.py:82 msgid "The repository URL and destination path are both required fields." msgstr "Se necesita el campo de la URL del repositorio y la ruta de destino." #: ui/export.py:79 #: lib/extensions/nautilus/RabbitVCS.py:856 msgid "Export" msgstr "Exportar" #: ui/export.py:80 msgid "Running Export Command..." msgstr "Exportando..." #: ui/export.py:91 msgid "Completed Export" msgstr "Exportar Completado" #: ui/resolve.py:45 #: ui/resolve.py:76 #: lib/extensions/nautilus/RabbitVCS.py:767 msgid "Resolve" msgstr "Resolver" #: ui/resolve.py:77 msgid "Running Resolve Command..." msgstr "Resolviendo..." #: ui/resolve.py:80 msgid "Completed Resolve" msgstr "Resolver Completado" #: ui/action.py:66 #: ui/log.py:89 msgid "Action" msgstr "AcciÃŗn" #: ui/action.py:66 msgid "Mime Type" msgstr "Tipo MIME" #: ui/action.py:135 msgid "Empty Message" msgstr "Mensaje vacío" #: ui/action.py:249 #: ui/log.py:309 msgid "Finished" msgstr "Finalizado" #: ui/action.py:253 #, python-format msgid "%s - Finished" msgstr "%s - Finalizado" #: ui/commit.py:66 msgid "The given path is not a working copy" msgstr "La ruta proporcionada no corresponde a una copia de trabajo" #: ui/commit.py:74 msgid "Text Status" msgstr "Estado del Texto" #: ui/commit.py:74 msgid "Property Status" msgstr "Estado de la Propiedad" #: ui/commit.py:188 #: ui/glade/commit.glade.h:4 #: lib/extensions/nautilus/RabbitVCS.py:568 msgid "Commit" msgstr "Enviar cambios" #: ui/commit.py:189 msgid "Running Commit Command..." msgstr "Enviando cambios..." #: ui/commit.py:195 msgid "Completed Commit" msgstr "Envío de cambios completado" #: ui/commit.py:279 #: ui/revert.py:45 #: ui/revert.py:75 #: lib/extensions/nautilus/RabbitVCS.py:751 msgid "Revert" msgstr "Revertir modificaciones" #: ui/commit.py:289 msgid "Restore" msgstr "Restaurar" #: ui/dialog.py:47 #: ui/log.py:81 #: ui/glade/dialogs.glade.h:20 msgid "Message" msgstr "Mensaje" #: ui/dialog.py:88 msgid "Select a Folder" msgstr "Selecciona una carpeta" #: ui/dialog.py:117 #: ui/glade/log.glade.h:12 msgid "to" msgstr "hacia" #: ui/dialog.py:210 msgid "Select a File" msgstr "Selecciona un archivo" #: ui/dialog.py:229 #: ui/glade/dialogs.glade.h:10 msgid "Are you sure you want to continue?" msgstr "ÂŋEstÃĄs seguro de querer continuar?" #: ui/dialog.py:257 msgid "the selected item(s)" msgstr "los elementos seleccionados" #: ui/switch.py:65 msgid "The repository location is a required field." msgstr "Es necesario el campo de la ubicaciÃŗn del repositorio." #: ui/switch.py:81 #: ui/glade/switch.glade.h:7 msgid "Switch" msgstr "" #: ui/switch.py:82 msgid "Running Switch Command..." msgstr "Ejecutando Switch" #: ui/switch.py:90 msgid "Completed Switch" msgstr "Switch Completado" #: ui/unlock.py:45 #: ui/unlock.py:109 msgid "Unlock" msgstr "Desbloquear" #: ui/unlock.py:110 msgid "Running Unlock Command..." msgstr "Desbloqueando..." #: ui/unlock.py:113 msgid "Completed Unlock" msgstr "Desbloqueo Completo" #: ui/merge.py:81 msgid "Running Merge Test" msgstr "Ejecutando " #: ui/merge.py:82 msgid "Completed Merge Test" msgstr "Prueba de factibilidad de fusiÃŗn completado" #: ui/merge.py:84 msgid "Running Merge Command" msgstr "Fusionando..." #: ui/merge.py:85 msgid "Completed Merge" msgstr "FusiÃŗn completa" #: ui/merge.py:93 msgid "Merge" msgstr "Fusionar" #: ui/checkout.py:52 #, python-format msgid "Checkout - %s" msgstr "Descargar repositorio - %s" #: ui/checkout.py:100 #: ui/glade/checkout.glade.h:5 #: lib/extensions/nautilus/RabbitVCS.py:536 msgid "Checkout" msgstr "Descargar repositorio" #: ui/checkout.py:101 msgid "Running Checkout Command..." msgstr "Descargando repositorio..." #: ui/checkout.py:111 msgid "Completed Checkout" msgstr "Descarga de repositorio completa" #: ui/log.py:63 #, python-format msgid "Log - %s" msgstr "BitÃĄcora - %s" #: ui/log.py:90 msgid "Copy From Path" msgstr "Copiar desde ruta" #: ui/log.py:90 msgid "Copy From Revision" msgstr "Copiar desde versiÃŗn" #: ui/log.py:112 msgid "Cancelled" msgstr "Cancelado" #: ui/log.py:236 #: ui/log.py:237 #: ui/glade/log.glade.h:8 msgid "N/A" msgstr "N/D" #: ui/log.py:284 msgid "(no author)" msgstr "(sin autor)" #: ui/log.py:313 msgid "Retrieving Log Information..." msgstr "Recuperando informaciÃŗn de la bitÃĄcora" #: ui/properties.py:53 #, python-format msgid "Properties - %s" msgstr "Propiedades - %s" #: ui/properties.py:61 msgid "Name" msgstr "Nombre" #: ui/properties.py:61 msgid "Value" msgstr "Valor" #: ui/revert.py:76 msgid "Running Revert Command..." msgstr "Revirtiendo cambios..." #: ui/revert.py:78 msgid "Completed Revert" msgstr "ReversiÃŗn de cambios completada" #: ui/update.py:53 #: ui/glade/update.glade.h:8 #: lib/extensions/nautilus/RabbitVCS.py:552 msgid "Update" msgstr "Actualizar" #: ui/create.py:49 msgid "Repository successfully created" msgstr "Repositorio creado exitosamente" #: ui/create.py:51 msgid "There was an error creating the repository. Make sure the given folder is empty." msgstr "Hubo un error al crear el repositorio. AsegÃērate de que la carpeta especificada estÊ vacía." #: ui/glade/switch.glade.h:1 #: ui/glade/checkout.glade.h:3 #: ui/glade/update.glade.h:1 msgid "Revision" msgstr "VersiÃŗn" #: ui/glade/switch.glade.h:2 msgid "Switch Details" msgstr "Detalles del Switch" #: ui/glade/switch.glade.h:3 #: ui/glade/branch.glade.h:8 #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "Desde:" #: ui/glade/switch.glade.h:4 #: ui/glade/merge.glade.h:10 #: ui/glade/checkout.glade.h:7 #: ui/glade/update.glade.h:3 msgid "HEAD" msgstr "" #: ui/glade/switch.glade.h:8 #: ui/glade/branch.glade.h:11 #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "Hasta:" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Mensajes de notificaciÃŗn" #: ui/glade/commit.glade.h:1 #: ui/glade/branch.glade.h:1 msgid "Add Message" msgstr "Agregar Mensaje" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to see diff)" msgstr "Archivos Modificados (doble click para comparar diferencias)" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "Enviar hacia:" #: ui/glade/commit.glade.h:5 #: ui/glade/lock.glade.h:4 #: ui/glade/branch.glade.h:9 #: ui/glade/dialogs.glade.h:22 #: ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "Mensajes anteriores" #: ui/glade/commit.glade.h:6 #: ui/glade/lock.glade.h:5 #: ui/glade/add.glade.h:2 msgid "Select / Deselect all" msgstr "Seleccionar / Descartar todos" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "Mostrar archivos fuera del control de versiones" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "Archivos a bloquear" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "Por favor describe por quÊ estÃĄs bloqueando estos archivos" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "Bloquear Archivos" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "Romper los bloqueos" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Propiedades para:" #: ui/glade/properties.glade.h:3 msgid "Edit..." msgstr "Editar..." #: ui/glade/properties.glade.h:4 msgid "New..." msgstr "Nuevo..." #: ui/glade/properties.glade.h:5 #: lib/extensions/nautilus/RabbitVCS.py:995 msgid "Properties" msgstr "Propiedades" #: ui/glade/properties.glade.h:6 msgid "URL/Path:" msgstr "URL/Ruta:" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "Desde la versiÃŗn" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "Hasta la versiÃŗn" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "Anotar" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "InformaciÃŗn de la versiÃŗn" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "" #: ui/glade/about.glade.h:4 #: lib/extensions/nautilus/RabbitVCS.py:1059 msgid "About" msgstr "Acerca de" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Autores:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Agradecimientos:" #: ui/glade/rename.glade.h:1 msgid "New Name:" msgstr "Nuevo nombre:" #: ui/glade/branch.glade.h:2 msgid "Create copy from" msgstr "Crear copia desde" #: ui/glade/branch.glade.h:3 #: ui/glade/checkout.glade.h:2 #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "Repositorio" #: ui/glade/branch.glade.h:5 msgid "Copy from HEAD" msgstr "Copiar desde versiÃŗn HEAD" #: ui/glade/branch.glade.h:6 msgid "Copy from revision" msgstr "Copiar desde la versiÃŗn" #: ui/glade/branch.glade.h:7 msgid "Copy from working copy" msgstr "Copiar desde la copia de trabajo" #: ui/glade/log.glade.h:1 msgid "100" msgstr "" #: ui/glade/log.glade.h:2 msgid "Affected File(s)" msgstr "Archivos afectados" #: ui/glade/log.glade.h:3 #: ui/glade/dialogs.glade.h:3 msgid "Message" msgstr "Mensaje" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "Tabla de versiones" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Límite:" #: ui/glade/log.glade.h:7 msgid "Log" msgstr "BitÃĄcora" #: ui/glade/log.glade.h:9 msgid "Refresh" msgstr "Refrescar" #: ui/glade/log.glade.h:10 msgid "Showing Revisions:" msgstr "Mostrar versiones:" #: ui/glade/log.glade.h:11 msgid "Stop on copy" msgstr "Detenerse en la copia" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "Desde la URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "Desde: (URL y versiÃŗn a fusionar)" #: ui/glade/merge.glade.h:3 #: ui/glade/checkout.glade.h:1 msgid "Options" msgstr "Opciones" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "Rango de versiones" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "Desde: (URL y versiÃŗn a fusionar)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "URL desde la cual fusionar" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "Copia de trabajo" #: ui/glade/merge.glade.h:8 msgid "Choose this method if you have made some changes to a branch and wish to merge your changes with another branch." msgstr "Escoge este mÊtodo si has hecho cambios a un branch y deseas fusionar tus cambios con otro branch" #: ui/glade/merge.glade.h:9 msgid "Choose this method if you wish to merge two different branches into your working copy." msgstr "Escoge este mÊtodo si deseas fusionar dos branch diferentes en tu copia de trabajo" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "Ignorar antecesores" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "Asistente de FusiÃŗn" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "Fusionar un rango de versiones" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "Fusionar dos ÃĄrboles diferentes" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "Registrar sÃŗlo la fusiÃŗn" #: ui/glade/merge.glade.h:16 #: ui/glade/checkout.glade.h:9 #: ui/glade/update.glade.h:5 msgid "Recursive" msgstr "Recursivamente" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "Comprobar factibilidad de fusiÃŗn" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "AutenticaciÃŗn" #: ui/glade/settings.glade.h:2 msgid "Log Messages" msgstr "Mensajes de la bitÃĄcora" #: ui/glade/settings.glade.h:3 msgid "Logging Options" msgstr "Opciones de la bitÃĄcora" #: ui/glade/settings.glade.h:4 msgid "RabbitVCS" msgstr "" #: ui/glade/settings.glade.h:5 msgid "Program used to browse repositories" msgstr "Programa a usar para navegar en los repositorios" #: ui/glade/settings.glade.h:6 msgid "Program used to compare files" msgstr "Programa a usar para comparar archivos" #: ui/glade/settings.glade.h:7 msgid "URL History" msgstr "Historia de la URL" #: ui/glade/settings.glade.h:8 #: ui/glade/checkout.glade.h:4 msgid "Browse..." msgstr "Navegar..." #: ui/glade/settings.glade.h:9 msgid "Clear your authentication information" msgstr "Eliminar tu informaciÃŗn de autenticaciÃŗn" #: ui/glade/settings.glade.h:10 msgid "Enable emblems" msgstr "Activar emblemas" #: ui/glade/settings.glade.h:11 msgid "Enable file attributes" msgstr "Activar atributos de archivo" #: ui/glade/settings.glade.h:12 msgid "Enable recursive status checks" msgstr "Activar comprobaciÃŗn de estado recursiva" #: ui/glade/settings.glade.h:13 msgid "External Programs" msgstr "Programas Externos" #: ui/glade/settings.glade.h:14 msgid "General" msgstr "General" #: ui/glade/settings.glade.h:15 msgid "Language:" msgstr "Idioma:" #: ui/glade/settings.glade.h:16 msgid "Logging" msgstr "BitÃĄcora" #: ui/glade/settings.glade.h:17 msgid "Minimum level to log" msgstr "" #: ui/glade/settings.glade.h:18 msgid "Number of URLs to remember" msgstr "Cantidad de URLs a recordar" #: ui/glade/settings.glade.h:19 msgid "Number of messages to remember" msgstr "Cantidad de mensajes a recordar" #: ui/glade/settings.glade.h:20 msgid "Saved Data" msgstr "InformaciÃŗn guardada" #: ui/glade/settings.glade.h:21 #: lib/extensions/nautilus/RabbitVCS.py:1043 msgid "Settings" msgstr "ConfiguraciÃŗn" #: ui/glade/settings.glade.h:22 msgid "Show new version on the right side" msgstr "Mostrar la nueva versiÃŗn al lado derecho" #: ui/glade/settings.glade.h:23 msgid "Type:" msgstr "Tipo:" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "Limpieza Solicitada...\n" "\n" "ÂŋDeseas comenzar la limpieza de tu copia de trabajo?" #: ui/glade/dialogs.glade.h:1 msgid "Certificate Details" msgstr "Detalles del Certificado" #: ui/glade/dialogs.glade.h:2 msgid "Edit Property Details" msgstr "Edita los detalles de la propiedad" #: ui/glade/dialogs.glade.h:4 msgid "Please add your authentication details" msgstr "Por favor agrega tus detalles de autenticaciÃŗn" #: ui/glade/dialogs.glade.h:5 msgid "Previous Messages" msgstr "Mensajes anteriores" #: ui/glade/dialogs.glade.h:7 msgid "Are you sure you want to delete %item%?" msgstr "ÂŋEstÃĄs seguro de eliminar %item%?" #: ui/glade/dialogs.glade.h:8 msgid "Accept Forever" msgstr "Aceptar permanentemente" #: ui/glade/dialogs.glade.h:9 msgid "Accept Once" msgstr "Aceptar por ahora" #: ui/glade/dialogs.glade.h:11 msgid "Authentication" msgstr "AutenticaciÃŗn" #: ui/glade/dialogs.glade.h:12 msgid "Check Certificate" msgstr "Comprobar certificado" #: ui/glade/dialogs.glade.h:13 msgid "Confirmation" msgstr "ConfirmaciÃŗn" #: ui/glade/dialogs.glade.h:14 msgid "Delete Confirmation" msgstr "Eliminar confirmaciÃŗn" #: ui/glade/dialogs.glade.h:15 msgid "Deny" msgstr "Denegar" #: ui/glade/dialogs.glade.h:16 msgid "Fingerprint:" msgstr "Huella digital:" #: ui/glade/dialogs.glade.h:17 msgid "Host:" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Issuer:" msgstr "Reportado por:" #: ui/glade/dialogs.glade.h:19 msgid "Login:" msgstr "Nombre de usuario:" #: ui/glade/dialogs.glade.h:21 msgid "Password:" msgstr "ContraseÃąa:" #: ui/glade/dialogs.glade.h:23 msgid "Property" msgstr "Propiedad" #: ui/glade/dialogs.glade.h:24 msgid "Property:" msgstr "Propiedad:" #: ui/glade/dialogs.glade.h:25 msgid "Realm:" msgstr "" #: ui/glade/dialogs.glade.h:26 msgid "Save Authentication" msgstr "Guardar autenticaciÃŗn" #: ui/glade/dialogs.glade.h:27 msgid "The item(s) will be sent to the trash can." msgstr "Los elementos serÃĄn enviados a la Papelera" #: ui/glade/dialogs.glade.h:28 msgid "Valid:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Value:" msgstr "Valor:" #: ui/glade/checkout.glade.h:6 msgid "Destination:" msgstr "Destino:" #: ui/glade/checkout.glade.h:8 #: ui/glade/update.glade.h:4 msgid "Omit Externals" msgstr "Omitir los Externos" #: ui/glade/checkout.glade.h:12 msgid "URL:" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "Importar mensaje" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "Incluir archivos ignorados" #: ui/glade/update.glade.h:2 msgid "Update Depth" msgstr "Profundidad de la actualizaciÃŗn" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "Cambiar el repositorio de tu copia de trabajo" #: lib/extensions/nautilus/RabbitVCS.py:362 msgid "Debug" msgstr "Depurar" #: lib/extensions/nautilus/RabbitVCS.py:375 msgid "DBus" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:388 msgid "Start/Restart Service" msgstr "Iniciar/Detener Servicio" #: lib/extensions/nautilus/RabbitVCS.py:404 msgid "Exit Service" msgstr "Terminar Servicio" #: lib/extensions/nautilus/RabbitVCS.py:422 msgid "Bugs" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:435 msgid "Test Asynchronicity" msgstr "Probar Asincronicidad" #: lib/extensions/nautilus/RabbitVCS.py:453 msgid "Open Shell" msgstr "Abrir Consola" #: lib/extensions/nautilus/RabbitVCS.py:469 msgid "Refresh Status" msgstr "Refrescar Estado" #: lib/extensions/nautilus/RabbitVCS.py:486 msgid "Debug Revert" msgstr "Revertir Debug" #: lib/extensions/nautilus/RabbitVCS.py:487 msgid "Reverts everything it sees" msgstr "Revertir todo lo que vea" #: lib/extensions/nautilus/RabbitVCS.py:502 msgid "Invalidate" msgstr "Invalidar" #: lib/extensions/nautilus/RabbitVCS.py:503 msgid "Force an invalidate_extension_info() call" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:518 msgid "Add Emblem" msgstr "Agregar Emblema" #: lib/extensions/nautilus/RabbitVCS.py:519 msgid "Add an emblem" msgstr "Agregar un emblema" #: lib/extensions/nautilus/RabbitVCS.py:537 msgid "Check out a working copy" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:553 msgid "Update a working copy" msgstr "Actualizar copia de trabajo" #: lib/extensions/nautilus/RabbitVCS.py:569 msgid "Commit modifications to the repository" msgstr "Enviar modificaciones al repositorio" #: lib/extensions/nautilus/RabbitVCS.py:584 msgid "RabbitVCS" msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:598 msgid "View the modifications made to a file" msgstr "Ver las modificaciones hechas a un archivo" #: lib/extensions/nautilus/RabbitVCS.py:613 msgid "Show Log" msgstr "Mostrar bitÃĄcora" #: lib/extensions/nautilus/RabbitVCS.py:614 msgid "Show a file's log information" msgstr "Mostrar la informaciÃŗn de la bitÃĄcora de un archivo" #: lib/extensions/nautilus/RabbitVCS.py:639 msgid "Schedule an item to be added to the repository" msgstr "Agendar un elemento a aÃąadir al repositorio" #: lib/extensions/nautilus/RabbitVCS.py:663 msgid "Ignore an item" msgstr "Ignorar un elemento" #: lib/extensions/nautilus/RabbitVCS.py:678 msgid "Ignore all files with this extension" msgstr "Ignorar todos los archivos con esta extension" #: lib/extensions/nautilus/RabbitVCS.py:703 msgid "Update to revision..." msgstr "Actualizar segÃēn la versiÃŗn..." #: lib/extensions/nautilus/RabbitVCS.py:704 msgid "Update a file to a specific revision" msgstr "Actualizar un archivo segÃēn una versiÃŗn particular" #: lib/extensions/nautilus/RabbitVCS.py:719 msgid "Rename..." msgstr "Cambiar nombre..." #: lib/extensions/nautilus/RabbitVCS.py:720 msgid "Schedule an item to be renamed on the repository" msgstr "Agendar cambio de nombre de un elemento del repositorio" #: lib/extensions/nautilus/RabbitVCS.py:736 msgid "Schedule an item to be deleted from the repository" msgstr "Agendar eliminaciÃŗn de un elemento del repositorio" #: lib/extensions/nautilus/RabbitVCS.py:752 msgid "Revert an item to its unmodified state" msgstr "Revertir un elemento a un estado sin modificaciones" #: lib/extensions/nautilus/RabbitVCS.py:768 msgid "Mark a conflicted item as resolved" msgstr "Marcar un elemento en conflicto como resuelto" #: lib/extensions/nautilus/RabbitVCS.py:783 msgid "Relocate..." msgstr "Reubicar..." #: lib/extensions/nautilus/RabbitVCS.py:784 msgid "Relocate your working copy" msgstr "Reubicar tu copia de trabajo" #: lib/extensions/nautilus/RabbitVCS.py:799 msgid "Get Lock..." msgstr "Solicitar bloqueo..." #: lib/extensions/nautilus/RabbitVCS.py:800 msgid "Locally lock items" msgstr "Bloquear elementos localmente" #: lib/extensions/nautilus/RabbitVCS.py:815 msgid "Release Lock..." msgstr "Levantar bloqueo..." #: lib/extensions/nautilus/RabbitVCS.py:816 msgid "Release lock on an item" msgstr "Levantar bloqueo de un elemento" #: lib/extensions/nautilus/RabbitVCS.py:832 msgid "Clean up working copy" msgstr "Limpiar tu copia de trabajo" #: lib/extensions/nautilus/RabbitVCS.py:857 msgid "Export a working copy or repository with no versioning information" msgstr "Exportar tu copia de trabajo o repositorio sin informaciÃŗn de versionamiento" #: lib/extensions/nautilus/RabbitVCS.py:872 msgid "Create Repository here" msgstr "Crear un repositorio aquí" #: lib/extensions/nautilus/RabbitVCS.py:873 msgid "Create a repository in a folder" msgstr "Crear un repositorio en una carpeta" #: lib/extensions/nautilus/RabbitVCS.py:889 msgid "Import an item into a repository" msgstr "Importar elemento a un repositorio" #: lib/extensions/nautilus/RabbitVCS.py:913 msgid "Branch/tag..." msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:914 msgid "Copy an item to another location in the repository" msgstr "Copiar un elemento a otra ubicaciÃŗn dentro del repositorio" #: lib/extensions/nautilus/RabbitVCS.py:929 msgid "Switch..." msgstr "" #: lib/extensions/nautilus/RabbitVCS.py:930 msgid "Change the repository location of a working copy" msgstr "Cambiar la ubicaciÃŗn del repositorio de una copia de trabajo" #: lib/extensions/nautilus/RabbitVCS.py:945 msgid "Merge..." msgstr "Fusionar..." #: lib/extensions/nautilus/RabbitVCS.py:946 msgid "A wizard with steps for merging" msgstr "Un asistente con pasos para fusionar" #: lib/extensions/nautilus/RabbitVCS.py:970 msgid "Annotate..." msgstr "Anotar..." #: lib/extensions/nautilus/RabbitVCS.py:971 msgid "Annotate a file" msgstr "Anotar un archivo" #: lib/extensions/nautilus/RabbitVCS.py:996 msgid "View the properties of an item" msgstr "Ver propiedades de un elemento" #: lib/extensions/nautilus/RabbitVCS.py:1027 msgid "Help" msgstr "Ayuda" #: lib/extensions/nautilus/RabbitVCS.py:1028 msgid "View help" msgstr "Ver ayuda" #: lib/extensions/nautilus/RabbitVCS.py:1044 msgid "View or change RabbitVCS settings" msgstr "Ver o modificar la configuraciÃŗn de RabbitVCS" #: lib/extensions/nautilus/RabbitVCS.py:1060 msgid "About RabbitVCS" msgstr "Acerca de RabbitVCS" #: lib/vcs/svn/__init__.py:111 #: lib/vcs/svn/__init__.py:120 #: lib/vcs/svn/__init__.py:127 msgid "Added" msgstr "AÃąadido" #: lib/vcs/svn/__init__.py:112 #: lib/vcs/svn/__init__.py:128 msgid "Copied" msgstr "Copiado" #: lib/vcs/svn/__init__.py:113 #: lib/vcs/svn/__init__.py:119 msgid "Deleted" msgstr "Eliminado" #: lib/vcs/svn/__init__.py:114 msgid "Restored" msgstr "Restaurado" #: lib/vcs/svn/__init__.py:115 msgid "Reverted" msgstr "Revertido" #: lib/vcs/svn/__init__.py:116 msgid "Failed Revert" msgstr "Revertir fallido" #: lib/vcs/svn/__init__.py:117 msgid "Resolved" msgstr "Resuelto" #: lib/vcs/svn/__init__.py:118 msgid "Skipped" msgstr "Omitido" #: lib/vcs/svn/__init__.py:121 msgid "Updated" msgstr "Actualizado" #: lib/vcs/svn/__init__.py:123 #: lib/vcs/svn/__init__.py:125 msgid "External" msgstr "Externo" #: lib/vcs/svn/__init__.py:126 msgid "Modified" msgstr "Modificado" #: lib/vcs/svn/__init__.py:129 msgid "Replaced" msgstr "Reemplazado" #: lib/vcs/svn/__init__.py:130 #: lib/vcs/svn/__init__.py:149 msgid "Changed" msgstr "Cambiado" #: lib/vcs/svn/__init__.py:131 msgid "Annotated" msgstr "Anotado" #: lib/vcs/svn/__init__.py:133 msgid "Unlocked" msgstr "Desbloqueado" #: lib/vcs/svn/__init__.py:134 msgid "Failed Lock" msgstr "Bloqueo fallido" #: lib/vcs/svn/__init__.py:135 msgid "Failed Unlock" msgstr "Desbloqueo fallido" #: lib/vcs/svn/__init__.py:144 msgid "Inapplicable" msgstr "No aplicable" #: lib/vcs/svn/__init__.py:145 msgid "Unknown" msgstr "Desconocido" #: lib/vcs/svn/__init__.py:146 msgid "Unchanged" msgstr "Sin cambios" #: lib/vcs/svn/__init__.py:147 msgid "Missing" msgstr "Faltante" #: lib/vcs/svn/__init__.py:148 msgid "Obstructed" msgstr "Obstruído" #: lib/vcs/svn/__init__.py:150 msgid "Merged" msgstr "Fusionado" #: lib/vcs/svn/__init__.py:151 msgid "Conflicted" msgstr "En conflicto" rabbitvcs-0.19/po/fa.po000066400000000000000000001111331445560650400147770ustar00rootroot00000000000000# Persian translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-03-14 15:29+0000\n" "Last-Translator: Hamed Nemati \n" "Language-Team: Persian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "" msgstr[1] "" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "" msgstr[1] "" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "" msgstr[1] "" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "" msgstr[1] "" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "" msgstr[1] "" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "" msgstr[1] "" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "" #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "" #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "" #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "" #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "" #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "" #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "" #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "" #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "Ų…Ø´ØŽØĩŲ‡â€ŒŲ‡Ø§" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "" #: util/contextmenuitems.py:545 msgid "Help" msgstr "" #: util/contextmenuitems.py:546 msgid "View help" msgstr "" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "" #: util/contextmenuitems.py:563 msgid "Open" msgstr "" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "Ø¯Øą Ø­Ø§Ų„ Ø¨Ų‡â€ŒŲ‡Ų†Ú¯Ø§Ų…â€ŒØŗØ§Ø˛ÛŒ..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "Ø¨Ų‡â€ŒŲ‡Ų†Ú¯Ø§Ų…â€ŒØŗØ§Ø˛ÛŒ ÚŠØ§Ų…Ų„ شد" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "Ų…ØŗÛŒØą" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Ø¯Øą Ø­Ø§Ų„ Ø¨Ø§ØąÚ¯Ø°Ø§ØąÛŒ..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "" #: ui/add.py:157 msgid "Running Add Command..." msgstr "" #: ui/add.py:159 msgid "Completed Add" msgstr "" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "" #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "" #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "" #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "" #: ui/import.py:81 msgid "Running Import Command..." msgstr "" #: ui/import.py:89 msgid "Completed Import" msgstr "" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "ØĒØēÛŒÛŒØą Ų†Ø§Ų…" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "Ų†Ø§Ų… ØŦدید:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "" #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "" #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "" #: ui/merge.py:91 msgid "Completed Merge" msgstr "" #: ui/merge.py:102 msgid "Merge" msgstr "" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "" #: ui/dialog.py:261 msgid "Select a File" msgstr "" #: ui/dialog.py:280 msgid "Save As..." msgstr "" #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "" #: ui/changes.py:49 msgid "More Actions..." msgstr "" #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "" #: ui/changes.py:279 msgid "Property Change" msgstr "" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "" #: ui/changes.py:321 msgid "No" msgstr "" #: ui/changes.py:410 msgid "Open from first revision" msgstr "" #: ui/changes.py:415 msgid "Open from second revision" msgstr "" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "" #: ui/log.py:338 msgid "Copy From Path" msgstr "" #: ui/log.py:338 msgid "Copy From Revision" msgstr "" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "" #: ui/log.py:791 msgid "View diff between revisions" msgstr "" #: ui/log.py:796 msgid "Compare with working copy" msgstr "" #: ui/log.py:806 msgid "Compare revisions" msgstr "" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "" #: ui/log.py:837 msgid "Edit log message..." msgstr "" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1047 msgid "Edit author" msgstr "" #: ui/log.py:1059 msgid "Edit log message" msgstr "" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "Ø§Ų†Ú¯Ų„ÛŒØŗÛŒ" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "" #: ui/branch.py:115 msgid "Branch/tag" msgstr "" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "" #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "" #: ui/lock.py:73 msgid "Locked" msgstr "" #: ui/lock.py:167 msgid "Get Lock" msgstr "" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "" #: ui/lock.py:177 msgid "Completed Lock" msgstr "" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "" #: ui/switch.py:80 msgid "Switch" msgstr "" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "" #: ui/switch.py:89 msgid "Completed Switch" msgstr "" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "" #: ui/widget.py:860 msgid "Number" msgstr "" #: ui/widget.py:861 msgid "Working Copy" msgstr "" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "" #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:112 msgid "Reserved" msgstr "" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "Ų†ŲˆØš Ų…Ø§ÛŒŲ…" #: ui/action.py:338 msgid "Finished" msgstr "" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - ŲžØ§ÛŒØ§Ų† ÛŒØ§ŲØĒŲ‡" #: ui/action.py:365 msgid "Log Message" msgstr "" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "" #: ui/browser.py:89 msgid "Size" msgstr "Ø§Ų†Ø¯Ø§Ø˛Ų‡â€Œ" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "" #: ui/browser.py:353 msgid "Copy to..." msgstr "" #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "" #: ui/browser.py:363 msgid "Move to..." msgstr "" #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "" #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "" #: ui/create.py:46 msgid "Repository successfully created" msgstr "" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "" #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "ŲˆÛŒØąØ§ÛŒØ´..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "ØŦدید..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "" #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "Ø§ØˇŲ„Ø§ØšØ§ØĒ Ų†ØŗØŽŲ‡" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "" #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "Ų…ØŽØ˛Ų†" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" rabbitvcs-0.19/po/fi.po000066400000000000000000001112161445560650400150110ustar00rootroot00000000000000# Finnish translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-09-02 20:14+0000\n" "Last-Translator: Jani Välimaa \n" "Language-Team: Finnish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "" msgstr[1] "" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "" msgstr[1] "" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "" msgstr[1] "" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "" msgstr[1] "" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "" msgstr[1] "" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "" msgstr[1] "" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "Toimita" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Lisää" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "" #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "" #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "" #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "" #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "" #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "" #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "" #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "" #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "" #: util/contextmenuitems.py:545 msgid "Help" msgstr "" #: util/contextmenuitems.py:546 msgid "View help" msgstr "" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "" #: util/contextmenuitems.py:563 msgid "Open" msgstr "" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "" #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "Polku" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "Laajennus" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Ladataan..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "" #: ui/add.py:157 msgid "Running Add Command..." msgstr "" #: ui/add.py:159 msgid "Completed Add" msgstr "" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "" #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Vie" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "" #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "" #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "Viesti" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "" #: ui/import.py:81 msgid "Running Import Command..." msgstr "" #: ui/import.py:89 msgid "Completed Import" msgstr "" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "Nimeä uudelleen" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "Uusi nimi:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "" #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "" #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "" #: ui/merge.py:91 msgid "Completed Merge" msgstr "" #: ui/merge.py:102 msgid "Merge" msgstr "" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Valitse hakemisto" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "kohde" #: ui/dialog.py:261 msgid "Select a File" msgstr "Valitse tiedosto" #: ui/dialog.py:280 msgid "Save As..." msgstr "Tallenna nimellä..." #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "Revisio" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "Tekijä" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "" #: ui/changes.py:49 msgid "More Actions..." msgstr "Lisää toimintoja..." #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "Muuta" #: ui/changes.py:279 msgid "Property Change" msgstr "" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Kyllä" #: ui/changes.py:321 msgid "No" msgstr "Ei" #: ui/changes.py:410 msgid "Open from first revision" msgstr "" #: ui/changes.py:415 msgid "Open from second revision" msgstr "" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Rivi" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Teksti" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "Toiminto" #: ui/log.py:338 msgid "Copy From Path" msgstr "" #: ui/log.py:338 msgid "Copy From Revision" msgstr "" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "" #: ui/log.py:791 msgid "View diff between revisions" msgstr "" #: ui/log.py:796 msgid "Compare with working copy" msgstr "" #: ui/log.py:806 msgid "Compare revisions" msgstr "" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "" #: ui/log.py:837 msgid "Edit log message..." msgstr "" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1047 msgid "Edit author" msgstr "" #: ui/log.py:1059 msgid "Edit log message" msgstr "" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "" #: ui/branch.py:115 msgid "Branch/tag" msgstr "" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "" #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "" #: ui/lock.py:73 msgid "Locked" msgstr "" #: ui/lock.py:167 msgid "Get Lock" msgstr "" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "" #: ui/lock.py:177 msgid "Completed Lock" msgstr "" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "" #: ui/switch.py:80 msgid "Switch" msgstr "" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "" #: ui/switch.py:89 msgid "Completed Switch" msgstr "" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "" #: ui/widget.py:860 msgid "Number" msgstr "" #: ui/widget.py:861 msgid "Working Copy" msgstr "" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "" #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "Luo paikkatiedosto" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "Luodaan paikkatiedosto..." #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "Luotiin paikkatiedosto" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:112 msgid "Reserved" msgstr "" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "MIME-tyyppi" #: ui/action.py:338 msgid "Finished" msgstr "Valmis" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "" #: ui/action.py:365 msgid "Log Message" msgstr "" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "" #: ui/browser.py:89 msgid "Size" msgstr "Koko" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "Luo hakemisto..." #: ui/browser.py:353 msgid "Copy to..." msgstr "Kopioi..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "Kopioi URL leikepÃļydälle" #: ui/browser.py:363 msgid "Move to..." msgstr "Siirrä ..." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "Uusi sijainti:" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "" #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "" #: ui/create.py:46 msgid "Repository successfully created" msgstr "" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "" #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "" #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "" #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "" #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "" #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" rabbitvcs-0.19/po/fr.po000066400000000000000000001674211445560650400150330ustar00rootroot00000000000000# French translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # Patrick Monnerat <.>, 2019. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-06-14 01:58+0200\n" "PO-Revision-Date: 2019-06-14 13:08+0200\n" "Last-Translator: Patrick Monnerat <.>\n" "Language-Team: French <.>\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Gtranslator 3.30.1\n" #: util/helper.py:73 msgid "%I:%M%P" msgstr "%H:%M" #: util/helper.py:74 msgid "%a %I:%M%p" msgstr "%a %H:%M" #: util/helper.py:75 msgid "%b %d" msgstr "%d %b" #: util/helper.py:76 msgid "%b %d %Y" msgstr "%d %b %Y" #: util/helper.py:215 #| msgid "(no author)" msgid "(no date)" msgstr "(pas de date)" #: util/helper.py:219 msgid "just now" msgstr "À l'instant" #: util/helper.py:221 #, python-format msgid "%d minute(s) ago" msgstr "Il y a %d minute(s)" #: util/helper.py:833 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i seconde" msgstr[1] "%i secondes" #: util/helper.py:836 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i minute" msgstr[1] "%i minutes" #: util/helper.py:839 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i heure" msgstr[1] "%i heures" #: util/helper.py:842 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i jour" msgstr[1] "%i jours" #: util/helper.py:845 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i semaine" msgstr[1] "%i semaines" #: util/helper.py:848 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i mois" msgstr[1] "%i mois" #: util/helper.py:851 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i annÊe" msgstr[1] "%i annÊes" #: util/contextmenuitems.py:321 msgid "Debug" msgstr "Debug" #: util/contextmenuitems.py:326 msgid "Bugs" msgstr "Bugs" #: util/contextmenuitems.py:331 msgid "Open Shell" msgstr "Ouvrir un terminal" #: util/contextmenuitems.py:337 msgid "Refresh Status" msgstr "RafraÃŽchir le statut" #: util/contextmenuitems.py:342 msgid "Debug Revert" msgstr "Debug inversÊ" #: util/contextmenuitems.py:343 msgid "Reverts everything it sees" msgstr "RÊtablir tout ce qu'on voit" #: util/contextmenuitems.py:349 msgid "Invalidate" msgstr "Invalider" #: util/contextmenuitems.py:350 msgid "Force an invalidate_extension_info() call" msgstr "Forcer un appel à invalidate_extension_info()" #: util/contextmenuitems.py:356 msgid "Add Emblem" msgstr "Ajouter un emblème" #: util/contextmenuitems.py:357 msgid "Add an emblem" msgstr "Ajouter un emblème" #: util/contextmenuitems.py:363 msgid "Checkout..." msgstr "Mettre à jour" #: util/contextmenuitems.py:364 msgid "Check out a working copy" msgstr "Obtenir une copie de travail" #: util/contextmenuitems.py:369 ui/xml/update.xml.h:1 ui/update.py:55 #: ui/update.py:104 msgid "Update" msgstr "Mettre à jour" #: util/contextmenuitems.py:370 msgid "Update a working copy" msgstr "Mettre à jour une copie de travail" #: util/contextmenuitems.py:375 ui/xml/commit.xml.h:1 ui/commit.py:318 #: ui/commit.py:386 msgid "Commit" msgstr "Envoyer" #: util/contextmenuitems.py:376 msgid "Commit modifications to the repository" msgstr "Envoyer les modifications au dÊpôt." #: util/contextmenuitems.py:381 ui/xml/property_page.xml.h:5 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:386 msgid "RabbitVCS SVN" msgstr "RabbitVCS SVN" #: util/contextmenuitems.py:391 msgid "RabbitVCS Git" msgstr "RabbitVCS Git" #: util/contextmenuitems.py:396 #| msgid "RabbitVCS" msgid "RabbitVCS Hg" msgstr "RabbitVCS Hg" #: util/contextmenuitems.py:401 ui/xml/browser.xml.h:1 msgid "Repository Browser" msgstr "Navigateur de dÊpôt" #: util/contextmenuitems.py:402 msgid "Browse a repository tree" msgstr "Navigateur de rÊfÊrentiel" #: util/contextmenuitems.py:407 msgid "Check for Modifications..." msgstr "VÊrifier les modifications ..." #: util/contextmenuitems.py:408 msgid "Check for modifications made to the repository" msgstr "VÊrifiez les modifications apportÊes au rÊfÊrentiel" #: util/contextmenuitems.py:413 msgid "Diff Menu..." msgstr "Menu des diffÊrences..." #: util/contextmenuitems.py:414 msgid "List of comparison options" msgstr "Liste des options de comparaisons" #: util/contextmenuitems.py:419 msgid "View diff against base" msgstr "Voir les diffÊrences avec la base" #: util/contextmenuitems.py:420 msgid "View the modifications made to a file" msgstr "Voir les modifications faites sur un fichier" #: util/contextmenuitems.py:425 msgid "View diff between files/folders" msgstr "Voir les diffÊrences entre les fichiers/dossiers" #: util/contextmenuitems.py:426 msgid "View the differences between two files" msgstr "Voir les diffÊrences entre deux fichiers" #: util/contextmenuitems.py:431 ui/log.py:988 msgid "View diff against previous revision" msgstr "Voir les diffÊrences par rapport à la rÊvision prÊcÊdente" #: util/contextmenuitems.py:432 msgid "View the modifications made to a file since its last change" msgstr "" "Voir les modifications apportÊes à un fichier depuis le dernier changement" #: util/contextmenuitems.py:437 msgid "Compare with base" msgstr "Comparer avec la base" #: util/contextmenuitems.py:438 msgid "Compare with base using side-by-side comparison tool" msgstr "Comparer côte à côte avec la base" #: util/contextmenuitems.py:443 msgid "Compare files/folders" msgstr "Comparer des fichiers ou dossiers" #: util/contextmenuitems.py:444 msgid "Compare the differences between two items" msgstr "Comparer les diffÊrences entre deux fichiers" #: util/contextmenuitems.py:449 ui/log.py:1003 msgid "Compare with previous revision" msgstr "Comparer avec la rÊvision prÊcÊdente" #: util/contextmenuitems.py:450 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "Comparer côte à côte avec la rÊvision prÊcÊdente" #: util/contextmenuitems.py:455 msgid "Show Changes..." msgstr "Voir les modifications..." #: util/contextmenuitems.py:456 msgid "Show changes between paths and revisions" msgstr "Afficher les changements entre les chemins et les rÊvisions" #: util/contextmenuitems.py:461 msgid "Show Log" msgstr "Consulter le journal" #: util/contextmenuitems.py:462 msgid "Show a file's log information" msgstr "Montrer le journal d'information d'un fichier" #: util/contextmenuitems.py:467 ui/xml/add.xml.h:1 ui/widget.py:1431 #: ui/add.py:215 ui/add.py:240 ui/tags.py:284 msgid "Add" msgstr "Ajouter" #: util/contextmenuitems.py:468 msgid "Schedule items to be added to the repository" msgstr "Ajouter au dÊpôt" #: util/contextmenuitems.py:473 msgid "Add to ignore list" msgstr "Ajouter à la liste de fichiers ignorÊs" #: util/contextmenuitems.py:478 msgid "Update to revision..." msgstr "Mettre à jour à la rÊvision..." #: util/contextmenuitems.py:479 msgid "Update a file to a specific revision" msgstr "Mettre à jour un fichier vers une version prÊcise" #: util/contextmenuitems.py:484 msgid "Rename..." msgstr "Renommer..." #: util/contextmenuitems.py:485 msgid "Schedule an item to be renamed on the repository" msgstr "Planifier le renommage d'un objet dans le dÊpôt" #: util/contextmenuitems.py:490 msgid "Delete" msgstr "Supprimer" #: util/contextmenuitems.py:491 msgid "Schedule an item to be deleted from the repository" msgstr "Planifier la suppression d'un objet dans le dÊpôt" #: util/contextmenuitems.py:496 ui/revert.py:175 ui/revert.py:201 #: ui/xml/revert.xml.h:1 msgid "Revert" msgstr "RÊtablir" #: util/contextmenuitems.py:497 msgid "Revert an item to its unmodified state" msgstr "RÊtablir un objet à son Êtat non modifiÊ" #: util/contextmenuitems.py:502 ui/markresolved.py:45 ui/markresolved.py:76 #| msgid "Resolved" msgid "Mark as Resolved" msgstr "Marquer comme RÊsolu" #: util/contextmenuitems.py:503 msgid "Mark a conflicted item as resolved" msgstr "Marquer un conflit sur un objet comme rÊsolu" #: util/contextmenuitems.py:508 msgid "Restore" msgstr "Restaurer" #: util/contextmenuitems.py:509 msgid "Restore a missing item" msgstr "Restaurer un fichier manquant" #: util/contextmenuitems.py:513 msgid "Relocate..." msgstr "Relocalisationâ€Ļ" #: util/contextmenuitems.py:514 msgid "Relocate your working copy" msgstr "Relocaliser votre copie de travail" #: util/contextmenuitems.py:519 msgid "Get Lock..." msgstr "Obtenir le verrou..." #: util/contextmenuitems.py:520 msgid "Locally lock items" msgstr "Verrouiller localement un objet" #: util/contextmenuitems.py:525 msgid "Release Lock..." msgstr "RelÃĸcher le verrou..." #: util/contextmenuitems.py:526 msgid "Release lock on an item" msgstr "RelÃĸcher le verrou d'un objet" #: util/contextmenuitems.py:531 ui/cleanup.py:56 msgid "Cleanup" msgstr "Nettoyer" #: util/contextmenuitems.py:532 msgid "Clean up working copy" msgstr "Nettoyer votre copie de travail" #: util/contextmenuitems.py:537 msgid "Export..." msgstr "Exporter" #: util/contextmenuitems.py:538 msgid "Export a working copy or repository with no versioning information" msgstr "" "Exporter une copie de travail ou un dÊpôt sans information de versionnage" #: util/contextmenuitems.py:551 msgid "Create Repository here" msgstr "CrÊer un dÊpôt ici" #: util/contextmenuitems.py:552 msgid "Create a repository in a folder" msgstr "CrÊer un dÊpôt dans un dossier" #: util/contextmenuitems.py:557 ui/xml/import.xml.h:1 ui/import.py:75 msgid "Import" msgstr "Importer" #: util/contextmenuitems.py:558 msgid "Import an item into a repository" msgstr "Importer un objet dans un dÊpôt" #: util/contextmenuitems.py:567 msgid "Branch/tag..." msgstr "Branch/tag..." #: util/contextmenuitems.py:568 msgid "Copy an item to another location in the repository" msgstr "Copier un objet vers un autre emplacement dans le dÊpôt" #: util/contextmenuitems.py:573 msgid "Switch..." msgstr "Basculement..." #: util/contextmenuitems.py:574 msgid "Change the repository location of a working copy" msgstr "Changer l'emplacement d'une copie de travail" #: util/contextmenuitems.py:579 msgid "Merge..." msgstr "Fusion..." #: util/contextmenuitems.py:580 msgid "A wizard with steps for merging" msgstr "Un assistant de fusion en Êtapes" #: util/contextmenuitems.py:585 msgid "Annotate..." msgstr "Annoter..." #: util/contextmenuitems.py:586 msgid "Annotate a file" msgstr "Annoter un fichier" #: util/contextmenuitems.py:591 msgid "Create Patch..." msgstr "CrÊer un correctif..." #: util/contextmenuitems.py:592 msgid "Creates a unified diff file with all changes you made" msgstr "" "CrÊe un fichier diff unifiÊ avec tous les changements que vous avez fait" #: util/contextmenuitems.py:597 msgid "Apply Patch..." msgstr "Appliquer le correctif..." #: util/contextmenuitems.py:598 msgid "Applies a unified diff file to the working copy" msgstr "Applique un fichier diff unifiÊ de la copie de travail" #: util/contextmenuitems.py:603 ui/xml/properties.xml.h:1 msgid "Properties" msgstr "PropriÊtÊs" #: util/contextmenuitems.py:604 msgid "View the properties of an item" msgstr "Consulter les propriÊtÊs d'un objet" #: util/contextmenuitems.py:609 msgid "Help" msgstr "Aide" #: util/contextmenuitems.py:610 msgid "View help" msgstr "Consulter l'aide" #: util/contextmenuitems.py:615 ui/xml/settings.xml.h:1 msgid "Settings" msgstr "Paramètres" #: util/contextmenuitems.py:616 msgid "View or change RabbitVCS settings" msgstr "Consulter ou modifier les paramètres de RabbitVCS" #: util/contextmenuitems.py:621 msgid "About" msgstr "À propos" #: util/contextmenuitems.py:622 msgid "About RabbitVCS" msgstr "À propos de RabbitVCS" #: util/contextmenuitems.py:627 msgid "Open" msgstr "Ouvrir" #: util/contextmenuitems.py:628 msgid "Open a file" msgstr "Ouvrir un fichier" #: util/contextmenuitems.py:636 msgid "Browse to" msgstr "Parcourir dans" #: util/contextmenuitems.py:637 msgid "Browse to a file or folder" msgstr "Naviguez vers un fichier ou un dossier" #: util/contextmenuitems.py:642 msgid "Revert property" msgstr "RÊtablir la propriÊtÊ" #: util/contextmenuitems.py:644 msgid "Revert this property to its original state" msgstr "RÊtablir la propriÊtÊ à son Êtat d'origine" #: util/contextmenuitems.py:648 msgid "Revert property (recursive)" msgstr "RÊtablir la propriÊtÊ (rÊcursive)" #: util/contextmenuitems.py:650 msgid "Revert this property to its original state (recursive)" msgstr "RÊtablir rÊcursivement la propriÊtÊ à son Êtat d'origine" #: util/contextmenuitems.py:655 msgid "Delete property" msgstr "Supprimer la propriÊtÊ" #: util/contextmenuitems.py:657 msgid "Delete this property" msgstr "Supprimer cette propriÊtÊ" #: util/contextmenuitems.py:661 msgid "Delete property (recursive)" msgstr "Supprimer rÊcursivement la propriÊtÊ" #: util/contextmenuitems.py:663 msgid "Delete this property (recursive)" msgstr "Supprimer rÊcursivement cette propriÊtÊ" #: util/contextmenuitems.py:668 msgid "Edit details" msgstr "Modifier les dÊtails" #: util/contextmenuitems.py:670 msgid "Show and edit property details" msgstr "Afficher et modifier les dÊtails de la propriÊtÊ" #: util/contextmenuitems.py:674 ui/create.py:68 msgid "Initialize Repository" msgstr "Initialiser le dÊpot" #: util/contextmenuitems.py:679 ui/clone.py:47 ui/clone.py:68 msgid "Clone" msgstr "Dupliquer" #: util/contextmenuitems.py:684 msgid "Fetch/Pull" msgstr "Fetch/Pull" #: util/contextmenuitems.py:689 msgid "Push" msgstr "Push" #: util/contextmenuitems.py:694 msgid "Branches" msgstr "Branches" #: util/contextmenuitems.py:699 msgid "Tags" msgstr "Tags" #: util/contextmenuitems.py:704 msgid "Remotes" msgstr "Distants" #: util/contextmenuitems.py:709 ui/clean.py:66 ui/xml/clean.xml.h:1 #| msgid "Cleanup" msgid "Clean" msgstr "Nettoyer" #: util/contextmenuitems.py:713 ui/reset.py:96 ui/xml/reset.xml.h:1 #| msgid "Reserved" msgid "Reset" msgstr "Reset" #: util/contextmenuitems.py:718 ui/stage.py:48 ui/stage.py:73 msgid "Stage" msgstr "Stage" #: util/contextmenuitems.py:723 ui/unstage.py:48 ui/unstage.py:73 msgid "Unstage" msgstr "Unstage" #: util/contextmenuitems.py:728 msgid "Edit conflicts" msgstr "Modifier les confits" #: util/contextmenuitems.py:754 msgid "Ignore item by filename" msgstr "Ignorer un ÊlÊment par nom de fichier" #: util/contextmenuitems.py:773 msgid "Ignore item by file extension" msgstr "Ignorer un ÊlÊment par extension du nom" #: ui/revert.py:74 ui/markresolved.py:50 ui/lock.py:71 ui/log.py:392 #: ui/log.py:678 ui/action.py:120 ui/browser.py:91 ui/add.py:77 ui/commit.py:85 msgid "Path" msgstr "RÊpertoire" #: ui/revert.py:74 ui/markresolved.py:51 ui/lock.py:71 ui/add.py:78 #: ui/commit.py:85 msgid "Extension" msgstr "Extension" #: ui/revert.py:106 ui/lock.py:111 ui/unlock.py:67 ui/add.py:111 #: ui/commit.py:131 msgid "Loading..." msgstr "Chargement..." #: ui/revert.py:110 ui/lock.py:114 ui/unlock.py:90 ui/add.py:133 #, python-format msgid "Found %d item(s)" msgstr "%d objet(s) trouvÊ(s)" #: ui/revert.py:176 ui/revert.py:202 msgid "Running Revert Command..." msgstr "ExÊcution de la commande de rÊtablissement..." #: ui/revert.py:178 ui/revert.py:204 msgid "Completed Revert" msgstr "RÊtablissement terminÊ" #: ui/remotes.py:61 msgid "Remote Repository Manager" msgstr "Gestionnaire de DÊpôts à distance" #: ui/remotes.py:62 msgid "Remote Repositories" msgstr "DÊpôts distants" #: ui/remotes.py:68 ui/properties.py:64 ui/property_editor.py:114 msgid "Name" msgstr "Nom" #: ui/remotes.py:68 msgid "Host" msgstr "Hôte" #: ui/remotes.py:123 ui/tags.py:238 #, python-format msgid "Are you sure you want to delete %s?" msgstr "Êtes-vous sÃģr de vouloir supprimer %s ?" #: ui/unstage.py:74 #| msgid "Running Rename Command..." msgid "Running Unstage Command..." msgstr "ExÊcution de la commande Unstage..." #: ui/unstage.py:77 #| msgid "Completed Update" msgid "Completed Unstage" msgstr "Unstage terminÊ" #: ui/reset.py:97 #| msgid "Running Revert Command..." msgid "Running Reset Command..." msgstr "ExÊcution de la commande Reset..." #: ui/reset.py:104 #| msgid "Completed Revert" msgid "Completed Reset" msgstr "Reset terminÊ" #: ui/markresolved.py:51 ui/commit.py:86 msgid "Text Status" msgstr "État du texte" #: ui/markresolved.py:51 ui/commit.py:86 msgid "Property Status" msgstr "État de la propriÊtÊ" #: ui/markresolved.py:77 #| msgid "Running Resolve Command..." msgid "Running Resolved Command..." msgstr "ExÊcution de la commande Resolved..." #: ui/markresolved.py:80 #| msgid "Completed Resolve" msgid "Completed Mark as Resolved" msgstr "RÊsolution terminÊe" #: ui/ignore.py:101 msgid "Ignore file:" msgstr "Ignorer les fichiers :" #: ui/stage.py:74 #| msgid "Running Rename Command..." msgid "Running Stage Command..." msgstr "ExÊcution de la commande Stage..." #: ui/stage.py:77 #| msgid "Completed Merge" msgid "Completed Stage" msgstr "Stage terminÊ" #: ui/lock.py:72 msgid "Locked" msgstr "VerrouillÊ" #: ui/lock.py:121 msgid "Yes" msgstr "Oui" #: ui/lock.py:156 msgid "Get Lock" msgstr "Obtenir le verrou" #: ui/lock.py:157 msgid "Running Lock Command..." msgstr "ExÊcution de la commande de verrouillage..." #: ui/lock.py:166 msgid "Completed Lock" msgstr "Verrouillage terminÊ" #: ui/log.py:51 ui/log.py:375 ui/log.py:662 ui/xml/merge.xml.h:19 #: ui/widget.py:1038 ui/browser.py:91 ui/annotate.py:131 ui/annotate.py:235 msgid "Revision" msgstr "RÊvision" #: ui/log.py:52 ui/log.py:376 ui/log.py:663 ui/browser.py:91 ui/dialog.py:51 #: ui/annotate.py:132 ui/annotate.py:236 msgid "Date" msgstr "Date" #: ui/log.py:53 ui/log.py:375 ui/log.py:662 ui/browser.py:91 ui/annotate.py:131 #: ui/annotate.py:235 msgid "Author" msgstr "Auteur" #: ui/log.py:126 #, python-format msgid "Log - %s" msgstr "Journal - %s" #: ui/log.py:307 ui/log.py:308 ui/xml/log.xml.h:7 msgid "N/A" msgstr "N/A" #: ui/log.py:376 ui/log.py:663 ui/xml/dialogs/message_box.xml.h:1 #: ui/dialog.py:51 msgid "Message" msgstr "Message" #: ui/log.py:377 msgid "Color" msgstr "Couleur" #: ui/log.py:392 ui/log.py:678 ui/action.py:120 msgid "Action" msgstr "Action" #: ui/log.py:393 msgid "Copy From Path" msgstr "Copier depuis le chemin" #: ui/log.py:393 msgid "Copy From Revision" msgstr "Copier depuis la rÊvision" #: ui/log.py:662 msgid "Graph" msgstr "Graphe" #: ui/log.py:929 ui/browser.py:322 ui/dialog.py:110 #| msgid "Select" msgid "_Select" msgstr "_SÊlectionner" #: ui/log.py:983 msgid "View diff against working copy" msgstr "Comparer avec la copie de travail" #: ui/log.py:993 msgid "View diff between revisions" msgstr "Voir les diffÊrences entre les rÊvisions" #: ui/log.py:998 msgid "Compare with working copy" msgstr "Comparer avec la copie de travail" #: ui/log.py:1008 msgid "Compare revisions" msgstr "Comparer les rÊvisions" #: ui/log.py:1014 msgid "Show changes against previous revision" msgstr "Comparer avec la rÊvision prÊcÊdente" #: ui/log.py:1020 msgid "Show changes between revisions" msgstr "Montrer les diffÊrences entre les rÊvisions" #: ui/log.py:1025 msgid "Update to this revision" msgstr "Mise à jour vers cette rÊvision" #: ui/log.py:1026 msgid "Update the selected path to this revision" msgstr "Mise à jour du chemin sÊlectionnÊ vers cette rÊvision" #: ui/log.py:1031 #| msgid "Open from first revision" msgid "Revert changes from this revision" msgstr "DÊfaire les modifications à partir de cette rÊvision" #: ui/log.py:1032 msgid "Update the selected path by reverse merging the changes" msgstr "Mise à jour du chemin sÊlectionnÊ par fusion inverse des changements" #: ui/log.py:1037 #| msgid "Copy URL to clipboard" msgid "Copy to clipboard" msgstr "Copier dans le presse-papier" #: ui/log.py:1038 msgid "Copy to clipboard the full data of these revisions" msgstr "Copier les donnÊes complètes de ces rÊvisions dans le presse-papier" #: ui/log.py:1042 ui/log.py:1046 msgid "Edit author..." msgstr "Editer l'auteur..." #: ui/log.py:1050 msgid "Edit log message..." msgstr "Editer le message de journal..." #: ui/log.py:1054 msgid "Edit revision properties..." msgstr "Editer les propriÊtÊs de la rÊvision..." #: ui/log.py:1334 msgid "Edit author" msgstr "Editer l'auteur" #: ui/log.py:1346 msgid "Edit log message" msgstr "Editer le message de journal" #: ui/unlock.py:46 ui/unlock.py:108 msgid "Unlock" msgstr "DÊverrouiller" #: ui/unlock.py:109 msgid "Running Unlock Command..." msgstr "ExÊcution de la commande de dÊverrouillage..." #: ui/unlock.py:112 msgid "Completed Unlock" msgstr "DÊverrouillage terminÊ" #: ui/__init__.py:52 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" "Vous devez dÊfinir un système de contrôle de versions en utilisant l'option " "--vcs [svn|git]" #: ui/clean.py:67 #| msgid "Running Rename Command..." msgid "Running Clean Command..." msgstr "ExÊcution de la commande de nettoyage..." #: ui/clean.py:77 #| msgid "Completed Cleanup" msgid "Completed Clean" msgstr "Nettoyage terminÊ" #: ui/action.py:120 msgid "Mime Type" msgstr "Type MIME" #: ui/action.py:360 msgid "Finished" msgstr "TerminÊ" #: ui/action.py:364 #, python-format msgid "%s - Finished" msgstr "%s - TerminÊ" #: ui/action.py:386 msgid "Log Message" msgstr "Message du journal" #: ui/xml/revert.xml.h:2 ui/xml/commit.xml.h:2 ui/xml/relocate.xml.h:2 #: ui/xml/update.xml.h:2 ui/xml/settings.xml.h:2 ui/xml/add.xml.h:2 #: ui/xml/dialogs/delete_confirmation.xml.h:2 #: ui/xml/dialogs/name_email_prompt.xml.h:2 #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:2 #: ui/xml/dialogs/previous_messages.xml.h:2 ui/xml/dialogs/property.xml.h:2 #: ui/xml/dialogs/create_folder.xml.h:2 ui/xml/dialogs/loading.xml.h:2 #: ui/xml/ignore.xml.h:2 ui/xml/clean.xml.h:2 ui/xml/properties.xml.h:2 #: ui/xml/notification.xml.h:2 ui/xml/git-update.xml.h:1 ui/xml/lock.xml.h:2 #: ui/xml/import.xml.h:2 ui/xml/reset.xml.h:2 ui/dialog.py:109 ui/dialog.py:281 #: ui/dialog.py:301 #| msgid "Cancel" msgid "_Cancel" msgstr "_Annuler" #: ui/xml/revert.xml.h:3 ui/xml/commit.xml.h:3 ui/xml/relocate.xml.h:3 #: ui/xml/update.xml.h:3 ui/xml/settings.xml.h:3 ui/xml/add.xml.h:3 #: ui/xml/dialogs/name_email_prompt.xml.h:3 #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:3 #: ui/xml/dialogs/message_box.xml.h:2 ui/xml/dialogs/previous_messages.xml.h:3 #: ui/xml/dialogs/property.xml.h:3 ui/xml/dialogs/create_folder.xml.h:3 #: ui/xml/ignore.xml.h:3 ui/xml/clean.xml.h:3 ui/xml/notification.xml.h:3 #: ui/xml/git-update.xml.h:2 ui/xml/lock.xml.h:3 ui/xml/import.xml.h:3 #: ui/xml/reset.xml.h:3 msgid "_OK" msgstr "_OK" #: ui/xml/revert.xml.h:4 ui/xml/commit.xml.h:8 ui/xml/add.xml.h:5 #: ui/xml/lock.xml.h:5 msgid "Select / Deselect all" msgstr "Tous sÊlectionner/dÊselectionner" #: ui/xml/commit.xml.h:4 ui/xml/log.xml.h:2 msgid "Refresh" msgstr "RafraÃŽchir" #: ui/xml/commit.xml.h:5 ui/xml/dialogs/previous_messages.xml.h:1 #: ui/xml/lock.xml.h:7 ui/xml/import.xml.h:5 msgid "Previous Messages" msgstr "Messages prÊcÊdents" #: ui/xml/commit.xml.h:6 ui/xml/dialogs/create_folder.xml.h:5 msgid "Add Message" msgstr "Ajouter un message" #: ui/xml/commit.xml.h:7 msgid "Show unversioned files" msgstr "Montrer les fichiers non versionnÊs" #: ui/xml/commit.xml.h:9 msgid "Changed Files (double-click to compare with base)" msgstr "" "Fichiers modifiÊs (double-clic pour comparer avec la version de base)" #: ui/xml/commit.xml.h:10 msgid "Commit to:" msgstr "Envoyer vers :" #: ui/xml/property_editor.xml.h:1 msgid "Property Editor" msgstr "Éditeur de propriÊtÊ" #: ui/xml/property_editor.xml.h:2 ui/xml/browser.xml.h:3 ui/xml/manager.xml.h:1 #: ui/xml/dialogs/error_notification.xml.h:2 ui/xml/log.xml.h:1 #: ui/xml/annotate.xml.h:3 msgid "_Close" msgstr "_Fermer" #: ui/xml/property_editor.xml.h:3 msgid "Close this dialog." msgstr "Fermer cette boÃŽte de dialogue." #: ui/xml/property_editor.xml.h:4 #| msgid "Refresh" msgid "_Refresh" msgstr "_RafraÃŽchir" #: ui/xml/property_editor.xml.h:5 msgid "Refresh the list of properties." msgstr "RafraÃŽchir la liste de propriÊtÊs." #: ui/xml/property_editor.xml.h:6 msgid "_New" msgstr "_Nouveau" #: ui/xml/property_editor.xml.h:7 msgid "Add a new property." msgstr "Ajouter une nouvelle propriÊtÊ" #: ui/xml/property_editor.xml.h:8 msgid "Remote URI:" msgstr "URI distante :" #: ui/xml/property_editor.xml.h:9 msgid "Working Copy:" msgstr "Copie de travail :" #: ui/xml/browser.xml.h:2 msgid "Load/Refresh" msgstr "Charger/RafraÃŽchir" #: ui/xml/browser.xml.h:4 ui/tags.py:108 ui/tags.py:176 ui/merge.py:508 msgid "Revision:" msgstr "RÊvision :" #: ui/xml/browser.xml.h:5 msgid "URL:" msgstr "URL :" #: ui/xml/relocate.xml.h:1 ui/relocate.py:82 msgid "Relocate" msgstr "Relocaliser" #: ui/xml/relocate.xml.h:4 msgid "To:" msgstr "Vers :" #: ui/xml/relocate.xml.h:5 msgid "From:" msgstr "Depuis :" #: ui/xml/relocate.xml.h:6 msgid "Change the repository of your working copy" msgstr "Changer le dÊpôt de votre copie de travail" #: ui/xml/update.xml.h:4 msgid "Rollback to specified revision number" msgstr "Retour en arrière vers la rÊvision spÊcifiÊe" #: ui/xml/update.xml.h:5 msgid "Omit Externals" msgstr "Omettre les externes" #: ui/xml/update.xml.h:6 ui/xml/merge.xml.h:29 msgid "Recursive" msgstr "RÊcursif" #: ui/xml/update.xml.h:7 ui/xml/merge.xml.h:30 ui/xml/git-update.xml.h:7 #: ui/xml/reset.xml.h:13 msgid "Options" msgstr "Options" #: ui/xml/update.xml.h:8 ui/xml/reset.xml.h:14 msgid "Revision" msgstr "RÊvision" #: ui/xml/merge.xml.h:1 msgid "Merge Assistant" msgstr "Assistant de fusion" #: ui/xml/merge.xml.h:2 #| msgid "" #| "Choose this method if you wish to merge two different branches into your " #| "working copy." msgid "Choose this method if you wish to reintegrate a branch into the trunk." msgstr "" "Choisissez cette mÊthode si vous souhaitez rÊintÊgrer une branche dans le " "tronc." #: ui/xml/merge.xml.h:3 msgid "Reintegrate a branch" msgstr "RÊintÊgrer une branche" #: ui/xml/merge.xml.h:4 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "Choisissez cette mÊthode si vous souhaitez fusionner deux branches " "diffÊrentes dans votre copie de travail." #: ui/xml/merge.xml.h:5 msgid "Merge two different trees" msgstr "Fusionner deux arbres diffÊrents" #: ui/xml/merge.xml.h:6 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "Choisissez cette mÊthode si vous avez effectuÊ des changements sur une " "branche et que vous souhaitez fusionner ces changements avec une autre " "branche." #: ui/xml/merge.xml.h:7 msgid "Merge a range of revisions" msgstr "Fusionner une gamme de rÊvisions" #: ui/xml/merge.xml.h:8 msgid "Step 1: Merge Type" msgstr "Etape 1: Type de fusion" #: ui/xml/merge.xml.h:9 msgid "Working Copy" msgstr "Copie de travail" #: ui/xml/merge.xml.h:10 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" "Utilisez le journal de dialogue pour sÊlectionner la/les rÊvision(s) que " "vous souhaitez fusionner. Ou Êcrivez la/les rÊvision(s) manuellement, " "sÊparÊe(s) par des virgules. Vous pouvez spÊcifier une gamme de rÊvision par " "un tiret.\n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "Pour fusionner toute les rÊvisions, laissez le champ vide." #: ui/xml/merge.xml.h:15 msgid "Show log" msgstr "Consulter le journal" #: ui/xml/merge.xml.h:16 msgid "Revision Range" msgstr "Gamme de rÊvision" #: ui/xml/merge.xml.h:17 msgid "URL to merge from" msgstr "Fusionner depuis l'URL" #: ui/xml/merge.xml.h:18 #| msgid "Merge a range of revisions" msgid "Step 2: Merge a Range of Revisions" msgstr "Etape 2: Fusionner une gamme de rÊvisions" #: ui/xml/merge.xml.h:20 ui/widget.py:1037 ui/widget.py:1043 msgid "HEAD" msgstr "HEAD" #: ui/xml/merge.xml.h:21 msgid "To: (URL and revision to merge)" msgstr "Vers: (URL et rÊvision à fusionner)" #: ui/xml/merge.xml.h:22 msgid "From: (URL and revision to merge)" msgstr "Depuis: (URL et rÊvision à fusionner)" #: ui/xml/merge.xml.h:23 #| msgid "Merge two different trees" msgid "Step 2: Merge two different trees" msgstr "Etape 2: Fusionner deux arbres diffÊrents" #: ui/xml/merge.xml.h:24 msgid "From URL" msgstr "Depuis l'URL" #: ui/xml/merge.xml.h:25 msgid "Step 2: Reintegrate a Branch" msgstr "Etape 2: RÊintÊgrer une branche" #: ui/xml/merge.xml.h:26 msgid "Test Merge" msgstr "Tester la fusion" #: ui/xml/merge.xml.h:27 msgid "Only record the merge" msgstr "Enregistrer seulement la fusion" #: ui/xml/merge.xml.h:28 msgid "Ignore ancestry" msgstr "Ignorer l'ascendance" #: ui/xml/merge.xml.h:31 msgid "Step 3: Final Options" msgstr "Etape 3: Options finales" #: ui/xml/settings.xml.h:4 #| msgid "Version Information" msgid "Version Control Systems" msgstr "Systèmes de contrôle de version" #: ui/xml/settings.xml.h:5 #| msgid "Enable emblems" msgid "Enable Subversion" msgstr "Activer Subversion" #: ui/xml/settings.xml.h:6 msgid "Enable Git" msgstr "Activer Git" #: ui/xml/settings.xml.h:7 msgid "Show RabbitVCS debugging tools" msgstr "Afficher les outils de dÊbogage de RabbitVCS" #: ui/xml/settings.xml.h:8 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" "Le menu DÊboger est utilisÊ pour diagnostiquer des problèmes avec RabbitVCS " "elle-mÃĒme" #: ui/xml/settings.xml.h:9 msgid "Enable emblems" msgstr "Activer les emblèmes" #: ui/xml/settings.xml.h:10 msgid "Enable recursive status checks" msgstr "Activer les vÊrifications rÊcursives des statuts" #: ui/xml/settings.xml.h:11 msgid "Enable file attributes" msgstr "Activer les attributs de fichier" #: ui/xml/settings.xml.h:12 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/xml/settings.xml.h:13 msgid "General" msgstr "GÊnÊral" #: ui/xml/settings.xml.h:14 msgid "Configure the program to resolve conflicted files." msgstr "Configurer le programme pour rÊsoudre les conflits." #: ui/xml/settings.xml.h:16 msgid "" "Use the following macros to configure the merge tool:\n" "%base - The common ancestor of the two files to be merged.\n" "%mine - The file you modified in your working copy.\n" "%theirs - The file being merged into your working copy.\n" "%merged - The file to store the merged result." msgstr "" "Utiliser lea macros suivants pour configurer l'outil de fusion:\n" "%base - L'ancÃĒtre commun aux deux fichiers à fusionner.\n" "%mine - Le ficher modifiÊ dans votre copie de travail.\n" "%theirs - Le fichier à fusionner avec votre copie de travail.\n" "%merged - Le fichier dans lequel stocker le rÊsultat de la fusion." #: ui/xml/settings.xml.h:21 msgid "Browse..." msgstr "Parcourir..." #: ui/xml/settings.xml.h:22 msgid "Show new version on the left side" msgstr "Afficher la nouvelle version à gauche" #: ui/xml/settings.xml.h:23 msgid "Program used to compare files" msgstr "Programme utilisÊ pour comparer des fichiers" #: ui/xml/settings.xml.h:24 msgid "External Programs" msgstr "Programmes externes" #: ui/xml/settings.xml.h:25 #| msgid "Cleanup" msgid "Clear" msgstr "Effacer" #: ui/xml/settings.xml.h:26 msgid "Clear your authentication information" msgstr "Nettoyer vos informations d'authentification" #: ui/xml/settings.xml.h:27 msgid "Authentication" msgstr "Authentification" #: ui/xml/settings.xml.h:28 msgid "Number of messages to remember" msgstr "Nombre de messages à retenir" #: ui/xml/settings.xml.h:29 msgid "Log Messages" msgstr "Messages du journal" #: ui/xml/settings.xml.h:30 msgid "Number of URLs to remember" msgstr "Nombre d'URL à retenir" #: ui/xml/settings.xml.h:31 msgid "URL History" msgstr "Historique des URL" #: ui/xml/settings.xml.h:32 msgid "Saved Data" msgstr "DonnÊes sauvegardÊes" #: ui/xml/settings.xml.h:33 msgid "Logging Options" msgstr "Options de journalisation" #: ui/xml/settings.xml.h:34 #| msgid "Minimum level to log" msgid "Minimum level to log:" msgstr "Niveau minimum à journaliser:" #: ui/xml/settings.xml.h:35 msgid "Type:" msgstr "Type:" #: ui/xml/settings.xml.h:36 msgid "Logging" msgstr "Journalisation" #: ui/xml/settings.xml.h:37 msgid "Refresh Information" msgstr "Actualiser les informations" #: ui/xml/settings.xml.h:38 msgid "Restart Checker" msgstr "RedÊmarrer le vÊrificateur" #: ui/xml/settings.xml.h:39 msgid "Stop Checker" msgstr "ArrÃĒter le vÊrificateur" #: ui/xml/settings.xml.h:40 msgid "Other Information" msgstr "Information complÊmentaire" #: ui/xml/settings.xml.h:41 msgid "Checker type:" msgstr "Type de vÊrificateur:" #: ui/xml/settings.xml.h:42 ui/settings.py:43 msgid "Unknown" msgstr "Inconnu" #: ui/xml/settings.xml.h:43 msgid "Process ID:" msgstr "Identifiant de processus;" #: ui/xml/settings.xml.h:44 msgid "Memory usage: " msgstr "MÊmoire occupÊe : " #: ui/xml/settings.xml.h:45 #| msgid "Memory usage: " msgid "Locale: " msgstr "Localisation: " #: ui/xml/settings.xml.h:46 msgid "Status Checker" msgstr "VÊrificateur d'Êtat" #: ui/xml/settings.xml.h:47 msgid "Configuration Editor" msgstr "Editeur de configuration" #: ui/xml/settings.xml.h:48 msgid "Git" msgstr "Git" #: ui/xml/add.xml.h:4 #| msgid "Show unversioned files" msgid "Show ignored files" msgstr "Montrer les fichiers ignorÊs" #: ui/xml/dialogs/delete_confirmation.xml.h:1 msgid "Delete Confirmation" msgstr "Confirmation de la suppression" #: ui/xml/dialogs/delete_confirmation.xml.h:3 ui/xml/properties.xml.h:6 #| msgid "Delete" msgid "_Delete" msgstr "_Supprimer" #: ui/xml/dialogs/delete_confirmation.xml.h:4 msgid "The item(s) will be sent to the trash can." msgstr "Les objets seront envoyÊs à la corbeille." #: ui/xml/dialogs/delete_confirmation.xml.h:6 msgid "" "Are you sure you want to delete %item%?" msgstr "" "Êtes vous sur de vouloir supprimer %item%?" #: ui/xml/dialogs/certificate.xml.h:1 msgid "Check Certificate" msgstr "VÊrifier le certificat" #: ui/xml/dialogs/certificate.xml.h:2 msgid "Accept Once" msgstr "Accepter temporairement" #: ui/xml/dialogs/certificate.xml.h:3 msgid "Accept Forever" msgstr "Accepter dÊfinitivement" #: ui/xml/dialogs/certificate.xml.h:4 msgid "Deny" msgstr "Refuser" #: ui/xml/dialogs/certificate.xml.h:5 msgid "Fingerprint:" msgstr "Empreinte :" #: ui/xml/dialogs/certificate.xml.h:6 msgid "Valid:" msgstr "Valide:" #: ui/xml/dialogs/certificate.xml.h:7 msgid "Issuer:" msgstr "Émetteur :" #: ui/xml/dialogs/certificate.xml.h:8 ui/widget.py:1310 msgid "Host:" msgstr "Hôte :" #: ui/xml/dialogs/certificate.xml.h:9 #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:6 msgid "Realm:" msgstr "Domaine:" #: ui/xml/dialogs/certificate.xml.h:10 msgid "Certificate Details" msgstr "DÊtails du certificat" #: ui/xml/dialogs/name_email_prompt.xml.h:1 msgid "Name and Email" msgstr "Nom et E-mail" #: ui/xml/dialogs/name_email_prompt.xml.h:4 msgid "Enter Name and Email Details" msgstr "Veuillez saisir votre nom et email" #: ui/xml/dialogs/name_email_prompt.xml.h:5 msgid "Email:" msgstr "E-mail :" #: ui/xml/dialogs/name_email_prompt.xml.h:6 ui/xml/property_page.xml.h:4 #: ui/tags.py:98 msgid "Name:" msgstr "Nom:" #: ui/xml/dialogs/confirmation.xml.h:1 msgid "Confirmation" msgstr "Confirmation" #: ui/xml/dialogs/confirmation.xml.h:2 #| msgid "No" msgid "_No" msgstr "_Non" #: ui/xml/dialogs/confirmation.xml.h:3 msgid "_Yes" msgstr "_Oui" #: ui/xml/dialogs/confirmation.xml.h:4 ui/dialog.py:316 msgid "Are you sure you want to continue?" msgstr "Êtes vous sur de vouloir continuer ?" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:1 msgid "SSL Client Certification" msgstr "SSL Client Certification" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:4 msgid "Save Authentication" msgstr "Sauvegarder l'authentification" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:5 msgid "Path:" msgstr "Chemin :" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:7 msgid "Please provide your ssl certification file" msgstr "Merci de fournir vos fichier de certification ssl" #: ui/xml/dialogs/previous_messages.xml.h:4 msgid "Previous Messages" msgstr "Messages prÊcÊdents" #: ui/xml/dialogs/previous_messages.xml.h:5 ui/xml/log.xml.h:13 msgid "Message" msgstr "Message" #: ui/xml/dialogs/mark_resolved_prompt.xml.h:1 #| msgid "Resolved" msgid "Mark Resolved" msgstr "Marquer comme RÊsolu" #: ui/xml/dialogs/mark_resolved_prompt.xml.h:2 #| msgid "Resolved" msgid "Unresolved" msgstr "Non-rÊsolu" #: ui/xml/dialogs/mark_resolved_prompt.xml.h:3 msgid "Resolved" msgstr "RÊsolu" #: ui/xml/dialogs/mark_resolved_prompt.xml.h:4 #| msgid "Commit to:" msgid "Mark Conflict As" msgstr "Marquer le conflit comme" #: ui/xml/dialogs/property.xml.h:1 msgid "Property" msgstr "PropriÊtÊ" #: ui/xml/dialogs/property.xml.h:4 msgid "Apply property recursively" msgstr "Appliquer la propriÊtÊ rÊcursivement" #: ui/xml/dialogs/property.xml.h:5 msgid "Value:" msgstr "Valeur:" #: ui/xml/dialogs/property.xml.h:6 msgid "Property:" msgstr "PropriÊtÊ :" #: ui/xml/dialogs/property.xml.h:7 msgid "Edit Property Details" msgstr "Éditer les dÊtails de la propriÊtÊ" #: ui/xml/dialogs/error_notification.xml.h:1 msgid "RabbitVCS Error" msgstr "Erreur RabbitVCS" #: ui/xml/dialogs/error_notification.xml.h:3 msgid "RabbitVCS Error" msgstr "Erreur RabbitVCS" #: ui/xml/dialogs/conflict_decision.xml.h:1 #| msgid "Conflicted" msgid "Edit Conflicts" msgstr "Editer les conflits" #: ui/xml/dialogs/conflict_decision.xml.h:2 msgid "Cancel" msgstr "Annuler" #: ui/xml/dialogs/conflict_decision.xml.h:3 msgid "Accept Mine" msgstr "Accepter le mien" #: ui/xml/dialogs/conflict_decision.xml.h:4 msgid "Accept Theirs" msgstr "Accepter le leur" #: ui/xml/dialogs/conflict_decision.xml.h:5 msgid "A conflict was found in the following file:" msgstr "Un conflit a ÊtÊ trouvÊ dans le fichier suivant :" #: ui/xml/dialogs/create_folder.xml.h:1 msgid "Create Folder..." msgstr "CrÊer un dossierâ€Ļ" #: ui/xml/dialogs/create_folder.xml.h:4 msgid "Folder Name" msgstr "Nom du dossier" #: ui/xml/dialogs/loading.xml.h:1 #| msgid "Loading..." msgid "Loading" msgstr "Chargement" #: ui/xml/ignore.xml.h:1 msgid "Ignore" msgstr "Ignorer" #: ui/xml/ignore.xml.h:4 msgid "Ignore and exclude files from being tracked" msgstr "Ignorer et exclure les fichiers à ne pas suivre" #: ui/xml/clean.xml.h:4 msgid "Force" msgstr "Forcer" #: ui/xml/clean.xml.h:5 msgid "Dry run" msgstr "Simulation" #: ui/xml/clean.xml.h:6 #| msgid "Include ignored files" msgid "Remove only ignored files" msgstr "N'enlever que les fichiers ignorÊs" #: ui/xml/clean.xml.h:7 #| msgid "Include ignored files" msgid "Remove ignored files, too" msgstr "Enlever aussi les fichiers ignorÊs" #: ui/xml/clean.xml.h:8 msgid "Remove directories" msgstr "Enlever les rÊpertoires" #: ui/xml/clean.xml.h:9 msgid "Remove untracked files from the working tree" msgstr "Enlever les fichiers non-versionnÊs de la copie de travail" #: ui/xml/clean.xml.h:10 #| msgid "Repository" msgid "Clean your Repository" msgstr "Nettoyer votre dÊpôt" #: ui/xml/properties.xml.h:3 ui/dialog.py:302 #| msgid "Save" msgid "_Save" msgstr "_Sauvegarder" #: ui/xml/properties.xml.h:4 #| msgid "New..." msgid "_New..." msgstr "_Nouveau..." #: ui/xml/properties.xml.h:5 #| msgid "Edit..." msgid "_Edit..." msgstr "_Éditer..." #: ui/xml/properties.xml.h:7 msgid "Delete properties recursively" msgstr "Supprimer les propriÊtÊs rÊcursivement" #: ui/xml/properties.xml.h:8 msgid "Selected properties will be applied recursively." msgstr "" "Les propriÊtÊs sÊlectionnÊes seront appliquÊes de manière rÊcursive." #: ui/xml/properties.xml.h:9 msgid "Properties for:" msgstr "PropriÊtÊs pour:" #: ui/xml/notification.xml.h:1 msgid "Notification Messages" msgstr "Messages de notification" #: ui/xml/notification.xml.h:4 ui/xml/annotate.xml.h:2 #| msgid "Save As..." msgid "Save _As" msgstr "Enregistrer _Sous..." #: ui/xml/git-update.xml.h:3 msgid "Fetch from all remotes" msgstr "Aller chercher dans toutes les sources distantes" #: ui/xml/git-update.xml.h:4 msgid "Apply remote changes prior to local changes (rebase)" msgstr "" "Appliquer les modifications distantes avant les changements locaux (rebase)" #: ui/xml/git-update.xml.h:5 #| msgid "Merge changes into local branch" msgid "Merge into local branch" msgstr "Fusionner dans la branche locale" #: ui/xml/git-update.xml.h:6 msgid "Apply remote changes" msgstr "Appliquer les modifications distantes" #: ui/xml/log.xml.h:3 msgid "100" msgstr "100" #: ui/xml/log.xml.h:4 msgid "Limit:" msgstr "Limite:" #: ui/xml/log.xml.h:5 msgid "_Back" msgstr "En A_rriÊre" #: ui/xml/log.xml.h:6 msgid "_Forward" msgstr "En A_vant" #: ui/xml/log.xml.h:8 ui/dialog.py:136 msgid "to" msgstr "vers" #: ui/xml/log.xml.h:9 msgid "Showing Revisions:" msgstr "Consulter une rÊvisions:" #: ui/xml/log.xml.h:10 msgid "Stop on copy" msgstr "Stopper à la copie" #: ui/xml/log.xml.h:11 msgid "Revisions Table" msgstr "Tableau de rÊvisions" #: ui/xml/log.xml.h:12 msgid "Affected File(s) (double-click to compare with base)" msgstr "" "Ficher(s) affectÊ(s) (double-clic pour comparer avec la version de " "base)" #: ui/xml/lock.xml.h:1 msgid "Lock Files" msgstr "Verrouiller les fichiers" #: ui/xml/lock.xml.h:4 msgid "Steal the locks" msgstr "Voler le verrou" #: ui/xml/lock.xml.h:6 msgid "Files to lock" msgstr "Fichiers à verrouiller" #: ui/xml/lock.xml.h:8 msgid "Please describe why you are locking these files" msgstr "Merci de dÊcrire pourquoi vous verrouillez ces fichiers" #: ui/xml/annotate.xml.h:1 msgid "Annotate" msgstr "Annoter" #: ui/xml/annotate.xml.h:4 msgid "To Revision" msgstr "Vers la rÊvision" #: ui/xml/annotate.xml.h:5 msgid "From Revision" msgstr "Depuis la rÊvision" #: ui/xml/import.xml.h:4 msgid "Include ignored files" msgstr "Inclure les fichiers ignorÊs" #: ui/xml/import.xml.h:6 msgid "Import Message" msgstr "Message d'importation" #: ui/xml/import.xml.h:7 msgid "Repository" msgstr "DÊpôt" #: ui/xml/reset.xml.h:4 msgid "None" msgstr "Aucun" #: ui/xml/reset.xml.h:5 msgid "" "Merge - Resets the index to match the tree recorded by the named " "commit,\n" "and updates the files that are different between the named commit\n" "and the current commit in the working tree" msgstr "" "Fusion - RÊinitialiser l'index pour correspondre à l'arborescence " "enregistrÊe\n" "dans le commit sÊlectionnÊ et mettre à jour les fichiers de la copie de " "travail à partir de ce dernier" #: ui/xml/reset.xml.h:8 msgid "" "Hard - Matches the working tree and index to that of the \n" "tree being switched to" msgstr "" "Fort - Faire correspondre les fichiers et l'index de la copie de " "travail à l'arborescence ciblÊe" #: ui/xml/reset.xml.h:10 msgid "" "Soft - Does not touch the index file or working tree at all, \n" "but requires them to be in good working order" msgstr "" "LÊger - Ne pas altÊrer l'index et les fichiers de la copie de " "travail, mais exiger qu'il soit en Êtat de fonctionnement" #: ui/xml/reset.xml.h:12 msgid "Mixed - Reset the index but not the working tree" msgstr "" "Mixte - RÊinitialiser l'index mais pas les fichiers de la copie de " "travail" #: ui/xml/reset.xml.h:15 #| msgid "Tags" msgid "Path" msgstr "Chemin" #: ui/xml/reset.xml.h:16 #| msgid "Revert an item to its unmodified state" msgid "Reset current HEAD to specified state." msgstr "RÊtablir l'Êtat de la tÃĒte (HEAD) à l'Êtat spÊcifiÊ." #: ui/xml/reset.xml.h:17 #| msgid "Repository" msgid "Reset your Repository" msgstr "RÊinitialiser votre dÊpôt" #: ui/xml/property_page.xml.h:1 msgid "Property status:" msgstr "Etat de la propriÊtÊ:" #: ui/xml/property_page.xml.h:2 msgid "Content status:" msgstr "Statut du contenu :" #: ui/xml/property_page.xml.h:3 msgid "VCS:" msgstr "VCS:" #: ui/rename.py:50 msgid "The requested file or folder does not exist." msgstr "Le fichier ou rÊpertoire demandÊ n'existe pas." #: ui/rename.py:54 ui/rename.py:86 ui/rename.py:115 ui/browser.py:465 msgid "Rename" msgstr "Renommer" #: ui/rename.py:54 ui/browser.py:465 msgid "New Name:" msgstr "Nouveau nom :" #: ui/rename.py:62 msgid "The new name field is required" msgstr "Le champ 'nouveau nom' est requit." #: ui/rename.py:87 ui/rename.py:116 msgid "Running Rename Command..." msgstr "ExÊcution de la commande de renommage..." #: ui/rename.py:93 ui/rename.py:122 msgid "Completed Rename" msgstr "Renommage terminÊ" #: ui/update.py:56 ui/update.py:105 ui/updateto.py:92 msgid "Updating..." msgstr "Mise à jour..." #: ui/update.py:58 ui/update.py:123 ui/updateto.py:100 msgid "Completed Update" msgstr "Mise à jour terminÊe" #: ui/revprops.py:66 ui/properties.py:153 ui/property_editor.py:158 msgid "Unable to retrieve properties list" msgstr "Impossible de rÊcupÊrer les propriÊtÊs de la liste" #: ui/widget.py:1039 msgid "Branch" msgstr "Branche" #: ui/widget.py:1044 msgid "Number" msgstr "NumÊro" #: ui/widget.py:1047 msgid "Working Copy" msgstr "Copie de travail" #: ui/widget.py:1268 msgid "Repository:" msgstr "DÊpôt :" #: ui/widget.py:1285 msgid "Branch:" msgstr "Branche :" #: ui/widget.py:1426 msgid "Add line:" msgstr "Ajouter une ligne :" #: ui/browser.py:91 msgid "Size" msgstr "Taille" #: ui/browser.py:341 msgid "Create folder..." msgstr "CrÊer un dossier..." #: ui/browser.py:346 msgid "Copy to..." msgstr "Copier vers..." #: ui/browser.py:351 msgid "Copy URL to clipboard" msgstr "Copier l'URL dans le presse-papier" #: ui/browser.py:356 msgid "Move to..." msgstr "DÊplacer vers..." #: ui/browser.py:526 msgid "Where do you want to copy the selection?" msgstr "OÚ voulez-vous copier la sÊlection ?" #: ui/browser.py:527 ui/browser.py:556 msgid "New Location:" msgstr "Nouvel emplacement :" #: ui/browser.py:555 msgid "Where do you want to move the selection?" msgstr "OÚ voulez-vous dÊplacer la sÊlection ?" #: ui/relocate.py:72 msgid "The from and to url fields are both required." msgstr "Les champs 'depuis' et 'URL' sont requis." #: ui/relocate.py:83 msgid "Running Relocate Command..." msgstr "ExÊcution de la commande de relocalisation..." #: ui/relocate.py:90 msgid "Completed Relocate" msgstr "Relocalisation terminÊe" #: ui/add.py:216 ui/add.py:241 msgid "Running Add Command..." msgstr "ExÊcution de la commande d'Ajout..." #: ui/add.py:218 ui/add.py:243 msgid "Completed Add" msgstr "Ajout terminÊ" #: ui/updateto.py:80 msgid "Rollback To Revision" msgstr "Retour à la RÊvision" #: ui/updateto.py:81 msgid "Rolling Back..." msgstr "Retour en arrière..." #: ui/updateto.py:89 msgid "Completed Rollback" msgstr "Annulation terminÊe" #: ui/updateto.py:91 msgid "Update To Revision" msgstr "Mettre à jour vers la rÊvision" #: ui/updateto.py:117 #| msgid "Where do you want to copy the selection?" msgid "What revision/branch do you want to checkout?" msgstr "Quelle branche/rÊvision voulez-vous copier ?" #: ui/updateto.py:138 msgid "Checkout" msgstr "Checkout" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "Mise à jour %s..." #: ui/updateto.py:145 msgid "Completed Checkout" msgstr "Checkout terminÊ" #: ui/create.py:52 msgid "Repository successfully created" msgstr "DÊpôt crÊÊ avec succès" #: ui/create.py:54 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" "Une erreur c'est produite durant la crÊation du dÊpôt. Veuillez vÊrifier que " "le rÊpertoire est vide." #: ui/create.py:69 msgid "Setting up repository..." msgstr "Mise en place du dÊpot..." #: ui/create.py:71 #| msgid "Create Repository here" msgid "Completed repository setup" msgstr "Mise en place du dÊpot terminÊe" #: ui/tags.py:62 msgid "Tag Manager" msgstr "Gestionnaire de Tags" #: ui/tags.py:63 msgid "Tags" msgstr "Tags" #: ui/tags.py:74 msgid "Tag" msgstr "Tag" #: ui/tags.py:127 ui/tags.py:188 ui/merge.py:520 msgid "Message:" msgstr "Message:" #: ui/tags.py:145 ui/tags.py:295 msgid "Save" msgstr "Sauvegarder" #: ui/tags.py:153 msgid "Tagger:" msgstr "Etiquetter" #: ui/tags.py:165 ui/merge.py:497 msgid "Date:" msgstr "Date :" #: ui/tags.py:286 msgid "Add Tag" msgstr "Ajouter un Tag" #: ui/tags.py:304 msgid "Tag Detail" msgstr "DÊtail du Tag" #: ui/property_page.py:146 ui/property_page.py:152 msgid "Repository URL" msgstr "URL du dÊpôt" #: ui/properties.py:56 #, python-format msgid "Properties - %s" msgstr "PropriÊtÊs - %s" #: ui/properties.py:64 ui/property_editor.py:114 msgid "Value" msgstr "Valeur" #: ui/properties.py:174 msgid "There was a problem saving your properties." msgstr "Une erreur est survenue durant la sauvegarde de vos propriÊtÊs." #: ui/merge.py:103 msgid "Running Merge Test" msgstr "ExÊcution du test de fusion..." #: ui/merge.py:104 msgid "Completed Merge Test" msgstr "Test de fusion terminÊ" #: ui/merge.py:106 msgid "Running Merge Command" msgstr "ExÊcution de la commande de fusion" #: ui/merge.py:107 ui/merge.py:566 msgid "Completed Merge" msgstr "Fusion terminÊe" #: ui/merge.py:118 ui/merge.py:559 msgid "Merge" msgstr "Fusionner" #: ui/merge.py:474 msgid "No active branch" msgstr "Pas de branche active" #: ui/merge.py:485 msgid "Author:" msgstr "Auteur :" #: ui/merge.py:560 #| msgid "Running Merge Command" msgid "Running Merge Command..." msgstr "ExÊcution de la commande de fusion..." #: ui/dialog.py:35 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" "Une erreur s'est produite dans l'extension RabbitVCS de Nautilus. Merci de " "contacter l'Êquipe RabbitVCS en prÊcisant les dÊtails de " "l'erreur ci-dessous :" #: ui/dialog.py:106 msgid "Select a Folder" msgstr "SÊlectionnez un dossier" #: ui/dialog.py:276 msgid "Select a File" msgstr "SÊlectionnez un fichier" #: ui/dialog.py:282 #| msgid "Open" msgid "_Open" msgstr "_Ouvrir" #: ui/dialog.py:296 msgid "Save As..." msgstr "Enregistrer sous..." #: ui/dialog.py:344 msgid "the selected item(s)" msgstr "le(s) objet(s) sÊlectionnÊ(s)" #: ui/dialog.py:415 msgid "Added a folder to the repository" msgstr "Ajouter un rÊpertoire au dÊpot" #: ui/annotate.py:58 msgid "Cannot annotate a directory" msgstr "Impossible d'annoter le dossier" #: ui/annotate.py:64 #, python-format msgid "Annotate - %s" msgstr "Annoter - %s" #: ui/annotate.py:131 ui/annotate.py:235 msgid "Line" msgstr "Ligne" #: ui/annotate.py:132 ui/annotate.py:236 msgid "Text" msgstr "Texte" #: ui/annotate.py:149 msgid "The from revision field must be an integer" msgstr "Le champ 'depuis la rÊvision' est requis." #: ui/property_editor.py:57 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" "Remarque : les modifications apportÊes aux propriÊtÊs sont appliquÊes " "immÊdiatement. Vous pouvez vÊrifier et annuler les modifications en " "utilisant le menu contextuel pour chaque ÊlÊment.\n" #: ui/property_editor.py:62 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" "Voulez-vous supprimer les propriÊtÊs sÊlectionnÊes de l'ensemble des " "fichiers et des sous-rÊpertoires\n" "sous ce rÊpertoire ?" #: ui/property_editor.py:104 msgid "File is not under version control." msgstr "Le fichier n'est pas versionnÊ" #: ui/property_editor.py:114 msgid "Reserved" msgstr "RÊservÊ" #: ui/property_editor.py:114 msgid "Status" msgstr "État" #: ui/property_editor.py:182 msgid "Unable to set new value for property." msgstr "Impossible de dÊfinir une nouvelle valeur pour la propriÊtÊ." #: ui/cleanup.py:57 msgid "Cleaning Up..." msgstr "Nettoyage..." #: ui/cleanup.py:59 msgid "Completed Cleanup" msgstr "Nettoyage terminÊ" #: ui/import.py:41 #, python-format msgid "Import - %s" msgstr "Importation - %s" #: ui/import.py:63 msgid "The repository URL field is required." msgstr "Le champ 'URL du dÊpôt' est requit." #: ui/import.py:76 msgid "Running Import Command..." msgstr "ExÊcution de la commande d'importation..." #: ui/import.py:84 msgid "Completed Import" msgstr "Importation terminÊe" #: ui/clone.py:60 ui/export.py:73 ui/export.py:142 msgid "The repository URL and destination path are both required fields." msgstr "Les champs 'URL du dÊpôt' et 'chemin de destination' sont requis." #: ui/clone.py:69 msgid "Running Clone Command..." msgstr "Execution de la commande de clonage..." #: ui/clone.py:76 msgid "Completed Clone" msgstr "Clonage terminÊ" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" "Il y a eu une erreur de communication avec le service vÊrificateur d'Êtats." #: ui/settings.py:124 msgid "Config file:" msgstr "Fichier de configuration :" #: ui/settings.py:300 msgid "Select a program" msgstr "SÊlectionnez un programme" #: ui/settings.py:309 msgid "Are you sure you want to clear your repository paths?" msgstr "Êtes vous sur de vouloir nettoyer les chemins du dÊpôt ?" #: ui/settings.py:316 msgid "Repository paths cleared" msgstr "Chemins du dÊpôt nettoyÊs" #: ui/settings.py:320 msgid "Are you sure you want to clear your previous messages?" msgstr "Êtes vous sur de vouloir nettoyer les messages prÊcÊdents ?" #: ui/settings.py:327 msgid "Previous messages cleared" msgstr "Messages prÊcèdents nettoyÊs" #: ui/settings.py:331 msgid "Are you sure you want to clear your authentication information?" msgstr "" "Êtes vous sur de vouloir nettoyer vos informations d'authentification ?" #: ui/settings.py:348 msgid "Authentication information cleared" msgstr "Informations d'authentification nettoyÊes" #: ui/commit.py:267 #, python-format msgid "Found %(changed)d changed and %(unversioned)d unversioned item(s)" msgstr "" "%(changed)d ÊlÊments modifiÊs et %(unversioned)d ÊlÊments non-inclus ont ÊtÊ " "trouvÊs" #: ui/commit.py:319 ui/commit.py:387 msgid "Running Commit Command..." msgstr "ExÊcution de la commande d'Envoi..." #: ui/commit.py:332 ui/commit.py:396 msgid "Completed Commit" msgstr "Envoi terminÊ" #: ui/diff.py:311 msgid "View diff as side-by-side comparison" msgstr "Voir une comparaison côte à côte du diff" #: ui/export.py:46 ui/export.py:125 #, python-format msgid "Export - %s" msgstr "Exporter - %s" #: ui/export.py:93 ui/export.py:162 msgid "Export" msgstr "Exporter" #: ui/export.py:94 ui/export.py:163 msgid "Running Export Command..." msgstr "ExÊcution de la commande d'exportation..." #: ui/export.py:105 ui/export.py:171 msgid "Completed Export" msgstr "Exportation terminÊe" #~ msgid "Resolve" #~ msgstr "RÊsoudre" #~ msgid "Apply Patch" #~ msgstr "Appliquer le correctif" #~ msgid "Apply Patch To Directory..." #~ msgstr "Appliquer le correctif pour le repertoire..." #~ msgid "Applying Patch File..." #~ msgstr "Application du fichier correctif..." #~ msgid "Patch File Applied" #~ msgstr "Fichier correctif appliquÊ" #~ msgid "Branch Manager" #~ msgstr "Gestionnaire de branches" #~ msgid "Branches" #~ msgstr "Branches" #~ msgid "Start Point:" #~ msgstr "Point de dÊpart :" #~ msgid "Keep old branch's history" #~ msgstr "Conserver l'historique de l'ancienne branche" #~ msgid "Add Branch" #~ msgstr "Ajouter une branche" #~ msgid "Branch Detail" #~ msgstr "DÊtail de la branche" #~ msgid "View unified diff" #~ msgstr "Voir le diff unifiÊ" #~ msgid "Compare side by side" #~ msgstr "Comparaison côte à côte" #~ msgid "More Actions..." #~ msgstr "Plus d'actions..." #~ msgid "Change" #~ msgstr "Changement" #~ msgid "Property Change" #~ msgstr "Changement de propriÊtÊ" #~ msgid "Open from second revision" #~ msgstr "Ouvrir depuis la seconde rÊvision" #~ msgid "English" #~ msgstr "Anglais" #~ msgid "You must supply a destination path." #~ msgstr "Vous devez spÊcifier un chemin de destination." #~ msgid "Branch/tag" #~ msgstr "Branch/tag" #~ msgid "Running Branch/tag Command..." #~ msgstr "ExÊcution de la commande Branch/tag..." #~ msgid "Completed Branch/tag" #~ msgstr "Branch/tag terminÊ" #~ msgid "The repository location is a required field." #~ msgstr "Le champ 'emplacement du dÊpôt' est requit." #~ msgid "Switch" #~ msgstr "Basculement" #~ msgid "Running Switch Command..." #~ msgstr "ExÊcution de la commande de basculement..." #~ msgid "Completed Switch" #~ msgstr "Basculement terminÊ" #~ msgid "Checkout - %s" #~ msgstr "Checkout - %s" #~ msgid "Running Checkout Command..." #~ msgstr "ExÊcution de la commande Checkout..." #~ msgid "Create Patch" #~ msgstr "CrÊer un correctif" #~ msgid "The given path is not a working copy" #~ msgstr "Le chemin indiquÊ n'est pas une copie de travail" #~ msgid "Creating Patch File..." #~ msgstr "CrÊation du fichier correctif" #~ msgid "Patch File Created" #~ msgstr "Fichier correctif crÊÊ" #~ msgid "URL/Path:" #~ msgstr "URL/Chemin :" #~ msgid "Please add your authentication details" #~ msgstr "Merci d'ajouter vos dÊtails d'authentification" #~ msgid "Authentication" #~ msgstr "Authentification" #~ msgid "How do you want to handle this?" #~ msgstr "Comment voulez-vous procÊder ?" #~ msgid "Login:" #~ msgstr "Identifiant :" #~ msgid "Merge Manually" #~ msgstr "Merger manuellement" #~ msgid "Password:" #~ msgstr "Mot de passe :" #~ msgid "Text Change" #~ msgstr "Changement du texte" #~ msgid "Pull" #~ msgstr "RÊcupÊrer" #~ msgid "label" #~ msgstr "label" #~ msgid "Links" #~ msgstr "Liens" #~ msgid "RabbitVCS" #~ msgstr "RabbitVCS" #~ msgid "Authors:" #~ msgstr "Auteurs :" #~ msgid "Thanks:" #~ msgstr "Remerciements :" #~ msgid "Log" #~ msgstr "Journal" #~ msgid "" #~ "Cleanup Requested....\n" #~ "\n" #~ "Begin working copy cleanup?" #~ msgstr "" #~ "Nettoyage demandÊ....\n" #~ "\n" #~ "Commencer le nettoyage de la copie de travail ?" #~ msgid "Language:" #~ msgstr "Langage:" #~ msgid "Update Local Repository" #~ msgstr "Mettre à jour le DÊpôt local" #~ msgid "Completed" #~ msgstr "TerminÊ" #~ msgid "Switch Details" #~ msgstr "DÊtails du basculement" #~ msgid "Create copy from" #~ msgstr "CrÊer une copie depuis" #~ msgid "Program used to browse repositories" #~ msgstr "Programme utilisÊ pour parcourir les dÊpôts" #~ msgid "Show new version on the right side" #~ msgstr "Afficher la nouvelle version sur le cotÊ droit" #~ msgid "Update Depth" #~ msgstr "Mise à jour en profondeur" #~ msgid "Added" #~ msgstr "AjoutÊ" #~ msgid "Copied" #~ msgstr "CopiÊ" #~ msgid "Deleted" #~ msgstr "SupprimÊ" #~ msgid "Restored" #~ msgstr "RestaurÊ" #~ msgid "Reverted" #~ msgstr "Revert effectuÊ" #~ msgid "Failed Revert" #~ msgstr "Revert ÊchouÊ" #~ msgid "Skipped" #~ msgstr "PassÊ" #~ msgid "Updated" #~ msgstr "À jour" #~ msgid "External" #~ msgstr "Externe" #~ msgid "Modified" #~ msgstr "ModifiÊ" #~ msgid "Replaced" #~ msgstr "RemplacÊ" #~ msgid "Changed" #~ msgstr "ChangÊ" #~ msgid "Annotated" #~ msgstr "AnnotÊ" #~ msgid "Unlocked" #~ msgstr "DÊverrouillÊ" #~ msgid "Failed Lock" #~ msgstr "Impossible de verrouiller" #~ msgid "Failed Unlock" #~ msgstr "Impossible de dÊverrouiller" #~ msgid "Inapplicable" #~ msgstr "Inapplicable" #~ msgid "Unchanged" #~ msgstr "InchangÊ" #~ msgid "Missing" #~ msgstr "Manquant" #~ msgid "Obstructed" #~ msgstr "BloquÊ" #~ msgid "Merged" #~ msgstr "RÊuni" rabbitvcs-0.19/po/he.po000066400000000000000000001136321445560650400150130ustar00rootroot00000000000000# Hebrew translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-02-09 10:19+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Hebrew \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "" msgstr[1] "" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "" msgstr[1] "" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "" msgstr[1] "" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "" msgstr[1] "" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "" msgstr[1] "" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "" msgstr[1] "" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "שליחה" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "הוספה" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "הוספה אל רשימ×Ē ×”×”×Ē×ĸלמו×Ē" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "" #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "" #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "מחיקה" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "פ×Ēור" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "שחזור" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "" #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "" #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "ניקיון" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "ייבוא" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "" #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "" #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "" #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "" #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "" #: util/contextmenuitems.py:545 msgid "Help" msgstr "" #: util/contextmenuitems.py:546 msgid "View help" msgstr "" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "" #: util/contextmenuitems.py:563 msgid "Open" msgstr "פ×Ēיחה" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "סייר אל" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "מ×ĸדכן..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "ה×ĸדכון הושלם" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "× ×Ēיב" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "סיומ×Ē" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "בט×ĸינה..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "נמ×Ļאו %d פריטים" #: ui/add.py:157 msgid "Running Add Command..." msgstr "מרי×Ĩ פקוד×Ē ×”×•×Ą×¤×”..." #: ui/add.py:159 msgid "Completed Add" msgstr "ההוספה הס×Ēיימה" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "יי×Ļוא - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "" #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "יי×Ļוא" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "מרי×Ĩ פקוד×Ē ×™×™×Ļוא..." #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "יי×Ļוא הושלם" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "" #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "×Ēאריך" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "הוד×ĸה" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "ייבוא - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "שדה כ×Ēוב×Ē ×”×ž×§×•×¨ נדרש." #: ui/import.py:81 msgid "Running Import Command..." msgstr "מרי×Ĩ פקוד×Ē ×™×™×‘×•×..." #: ui/import.py:89 msgid "Completed Import" msgstr "ייבוא הס×Ēיים" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "שנה ׊ם" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "" #: ui/rename.py:60 msgid "The new name field is required" msgstr "שדה השם הינו הכרחי" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "מרי×Ĩ פקוד×Ē ×Š×™× ×•×™ ׊ם..." #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "שינוי השם הושלם" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "מ×Ļב טקץט" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "מ×Ļב הגדרה" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "מרי×Ē ×¤×§×•×“×Ē ×Š×œ×™×—×”..." #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "שליחה הושלמה" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "" #: ui/merge.py:91 msgid "Completed Merge" msgstr "" #: ui/merge.py:102 msgid "Merge" msgstr "" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "בחיר×Ē ×Ą×¤×¨×™×™×”" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "אל" #: ui/dialog.py:261 msgid "Select a File" msgstr "בחיר×Ē ×§×•×‘×Ĩ" #: ui/dialog.py:280 msgid "Save As..." msgstr "" #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "מקם מחדש" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "מרי×Ĩ פקוד×Ē ×ž×™×§×•× מחדש..." #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "המיקום מחדש הס×Ēיים" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "מהדורה" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "יו×Ļר" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "מרי×Ĩ פקוד×Ē ×¤×Ēור..." #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "" #: ui/changes.py:49 msgid "More Actions..." msgstr "" #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "" #: ui/changes.py:279 msgid "Property Change" msgstr "" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "כן" #: ui/changes.py:321 msgid "No" msgstr "" #: ui/changes.py:410 msgid "Open from first revision" msgstr "" #: ui/changes.py:415 msgid "Open from second revision" msgstr "" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "לא ני×Ēן לכ×Ēוב ה×ĸרה לספרייה" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "ה×ĸרה - %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "שורה" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "טקץט" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "פ×ĸולה" #: ui/log.py:338 msgid "Copy From Path" msgstr "" #: ui/log.py:338 msgid "Copy From Revision" msgstr "" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "" #: ui/log.py:791 msgid "View diff between revisions" msgstr "" #: ui/log.py:796 msgid "Compare with working copy" msgstr "" #: ui/log.py:806 msgid "Compare revisions" msgstr "" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "" #: ui/log.py:837 msgid "Edit log message..." msgstr "" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1047 msgid "Edit author" msgstr "" #: ui/log.py:1059 msgid "Edit log message" msgstr "" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "אנגלי×Ē" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "בחיר×Ē ×Ēוכנה" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "האם א×Ēה בטוח שבר×Ļונך למחוק א×Ē × ×Ēיבי המאגר שלך?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "× ×Ēיבי המאגר נמחקו" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "האם א×Ēה בטוח שבר×Ļונך למחוק א×Ē ×”×”×•×“×ĸה הקודמ×Ē ×Š×œ×š?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "ההוד×ĸה הקודמ×Ē × ×ž×—×§×”" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "האם א×Ēה בטוח שב×Ļרונך למחוק א×Ē × ×Ēוני האימו×Ē ×Š×œ×š?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "× ×Ēוני האימו×Ē × ×ž×—×§×•" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "יש לספק × ×Ēיב י×ĸד." #: ui/branch.py:115 msgid "Branch/tag" msgstr "" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "" #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "" #: ui/lock.py:73 msgid "Locked" msgstr "× ×ĸול" #: ui/lock.py:167 msgid "Get Lock" msgstr "× ×ĸל" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "מרי×Ĩ פקוד×Ē × ×ĸילה..." #: ui/lock.py:177 msgid "Completed Lock" msgstr "× ×ĸילה הס×Ēיימה" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "" #: ui/switch.py:80 msgid "Switch" msgstr "" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "" #: ui/switch.py:89 msgid "Completed Switch" msgstr "" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "" #: ui/widget.py:860 msgid "Number" msgstr "" #: ui/widget.py:861 msgid "Working Copy" msgstr "" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "" #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "י×Ļיר×Ē ×Ēיקון" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "הנ×Ēיב שני×Ēן אינו ה×ĸ×Ē×§ פו×ĸל" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "יו×Ļר קוב×Ĩ ×Ēיקון..." #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:112 msgid "Reserved" msgstr "" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "" #: ui/action.py:338 msgid "Finished" msgstr "הס×Ēיים" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - הסיים" #: ui/action.py:365 msgid "Log Message" msgstr "" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "" #: ui/browser.py:89 msgid "Size" msgstr "" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "" #: ui/browser.py:353 msgid "Copy to..." msgstr "" #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "" #: ui/browser.py:363 msgid "Move to..." msgstr "" #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "מנקה..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "הניקיון הס×Ēיים" #: ui/create.py:46 msgid "Repository successfully created" msgstr "" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "" #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "" #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "" #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "" #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "" #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "ה×Ļג×Ē ×“×™×•×•×—" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" rabbitvcs-0.19/po/hr.po000066400000000000000000001325301445560650400150260ustar00rootroot00000000000000# Croatian translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-04-10 08:37+0000\n" "Last-Translator: Vedran Miletić \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i sekunda" msgstr[1] "%i sekunda" msgstr[2] "%i sekundi" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i minuta" msgstr[1] "%i minute" msgstr[2] "%i minuta" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i sat" msgstr[1] "%i sati" msgstr[2] "%i sati" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i dan" msgstr[1] "%i dana" msgstr[2] "%i dana" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i tjedan" msgstr[1] "%i tjedana" msgstr[2] "%i tjedana" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i mjesec" msgstr[1] "%i mjeseci" msgstr[2] "%i mjeseci" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i godina" msgstr[1] "%i godina" msgstr[2] "%i godina" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "Pronađi greÅĄku" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "GreÅĄke" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "Otvori komandni prozor" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "OsvjeÅži status" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "Pronađi greÅĄke u povratku" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "Povrati na staro sve ÅĄto pronađeÅĄ" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "Učini nevaÅžećim" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "Prinudno pozovi invalidate_extension_info()" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "Dodaj oznaku" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "Dodaje oznaku ikone" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "Preuzmi..-" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "Preuzmi radnu kopiju" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "AÅžuriraj" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "Obnovi radnu kopiju" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "Pohrani" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "Pohrani izmjene u skladiÅĄte" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "Preglednik skladiÅĄta" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "Pregledaj stablo skladiÅĄta" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "Provjeri izmjene..." #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "Provjeri izmjene napravljene u skladiÅĄtu" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "Izbornik razlika..." #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "Popis opcija usporedbe" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "PrikaÅži razliku prema osnovi" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "Pogledaj izmjene datoteke" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "Pogledaj razlike između datoteka/mapa" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "Pogledaj razliku između dvije datoteke" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "Pogedaj razliku od proÅĄle inačice" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "Pogledaj izmjene u datoteci od zadnje promjene" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "Usporedi s osnovnom" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "Usporedi s osnovom koristeći usporedni alat (jedan do drugog)" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "Usporedi datoteke/mape" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "Usporedi razlike između dvije stavke" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "Usporedi s prethodnom inačicom" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "Usporedi s proÅĄlom revizijom" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "PokaÅži promjene..." #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "PrikaÅži promjene između staza i revizija" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "PrikaÅži dnevnik" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "Pokazuje informacije iz dnevnika za datoteku" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Dodaj" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "Rasporedi stavke za dodavanje u skladiÅĄte" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "Dodaj na listu zanemarenih" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "Obnovi na reviziju..." #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "Obnavlja datoteku na određenu reviziju" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "Promijeni ime..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "PriloÅži stavku za promjenu imena u skladiÅĄtu" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "ObriÅĄi" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "Pripremi stavku kako bi se obrisala iz skladiÅĄta" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "Vrati izvorno" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "Vrati na staro stavku - poniÅĄti promjene" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "RazrijeÅĄi" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "Označi razrijeÅĄenom stavku u sukobu" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "Vrati" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "Vrati nedostajeće" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "Premjesti..." #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "Premjesti radnu kopiju na drugi posluÅžitelj" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "Zaključaj..." #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "Lokalno zaključava stavke" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "Oslobodi..." #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "Otključaj stavku" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Očisti" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "Očisti radnu kopiju" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "Izvozâ€Ļ" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "Izvezi radnu kopiju ili skladiÅĄte bez informacije o verzijama" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "Ovdje napravi skladiÅĄte" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "Napravi skladiÅĄte u mapi" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "Uvezi" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "Uvezi stavku u skladiÅĄte" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "Grana/oznaka..." #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "Kopiraj stavku na drugo mjesto unutar skladiÅĄta" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "Zamijeni..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "Zamijeni sidriÅĄte radne kopije u skladiÅĄtu" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "Stopi..." #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "Čarobnjak s koracima za stapanje" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "Označi..." #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "Dodaj biljeÅĄke datoteci" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "Napravi zakrpu..." #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "Napravi objedinjenu datoteku razlika sa svim vaÅĄim promjenama" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "Primjeni zakrpu..." #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "Primijenjuje datoteku objedinjenih razlika na radnu kopiju" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "Svojstva" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "Pogledaj svojstva stavke" #: util/contextmenuitems.py:545 msgid "Help" msgstr "Pomoć" #: util/contextmenuitems.py:546 msgid "View help" msgstr "Pogledaj pomoć" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "Postavke" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "Pogledaj ili promijeni RabiitVCS postavke" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "O programu" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "O RabiitVCS programu" #: util/contextmenuitems.py:563 msgid "Open" msgstr "Otvori" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "Otvori datoteku" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "Pregledaj" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "Pregledaj datoteku ili mapu" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "PoniÅĄti promjene svojstva" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "Vrati vrijednost svojstva na originalnu" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "PoniÅĄti promjene svojstva (poniruće)" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "Vrati vrijednost svojstva na originalnu (poniruće)" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "ObriÅĄi svojstvo" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "ObriÅĄi ovo svojstvo" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "ObriÅĄi ovo svojstvo (poniruće)" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "Zanemari predmet po imenu" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "Zanemari stavku prema nastavku" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "AÅžuriram..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "AÅžuriranje zavrÅĄeno" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "AÅžuriraj na inačicu" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "Preuzmi" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "Preuzimanje zavrÅĄeno" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "Staza" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "ProÅĄirenje" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Učitavanje..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "Pronađeno %d stavaka" #: ui/add.py:157 msgid "Running Add Command..." msgstr "Dodavanje..." #: ui/add.py:159 msgid "Completed Add" msgstr "ZavrÅĄeno dodavanje" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "Revizija:" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "Izvoz - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "URL skladiÅĄta i odrediÅĄna staza su obavezna polja." #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Izvoz" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "Izvoz u tijeku..." #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "Izvoz zavrÅĄen" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "Primijeni zakrpu" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "Primijeni zakrpu na mapu..." #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "Primjena zakrpe..." #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "Zakrpa primijenjena" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "Datum" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "Poruka" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "Uvezi - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "URL skladiÅĄta je obavezno polje." #: ui/import.py:81 msgid "Running Import Command..." msgstr "Izrada uvoza u tijeku..." #: ui/import.py:89 msgid "Completed Import" msgstr "ZavrÅĄen uvoz" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "Promijeni naziv" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "Novo ime:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "Polje novog imena je obavezno" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "Promjena naziva u tijeku..." #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "Promjena naziva zavrÅĄena" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "Status teksta" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "Status svojstva" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "Pohranjivanje u tijeku..." #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "Pohrana zavrÅĄena" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "Status" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "Pogedaj razliku usporedno" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "Testiranje stapanja" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "ZavrÅĄen test stapanja" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "IzvrÅĄavanje stapanja" #: ui/merge.py:91 msgid "Completed Merge" msgstr "Stapanje zavrÅĄeno" #: ui/merge.py:102 msgid "Merge" msgstr "Stopi" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" "Dogodila se greÅĄka u RabbitVCS Nautilus proÅĄirenju. Molimo javite RabbitVCS timu detalje greÅĄke:" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Odaberi mapu" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "do" #: ui/dialog.py:261 msgid "Select a File" msgstr "Odaberi datoteku" #: ui/dialog.py:280 msgid "Save As..." msgstr "Spremi kao..." #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "Da li sigurno Åželite nastaviti?" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "odabrana(e) stavka(e)" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "Mapa je dodana u skladiÅĄte" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "IzvrÅĄavanje vraćanja...." #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "Vraćanje zavrÅĄeno" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "Polja url-ova su obavezna." #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "Premjesti" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "IzvrÅĄava se premjeÅĄtanje..." #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "ZavrÅĄeno premjeÅĄtanje" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "Inačica" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "Autor" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "Vidi ukupnu razliku" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "Usporedi jedno do drugog" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "IzvrÅĄavanje razrijeÅĄavanja..." #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "RazrijeÅĄavanje zavrÅĄeno" #: ui/changes.py:49 msgid "More Actions..." msgstr "ViÅĄe akcija..." #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "Promijeni" #: ui/changes.py:279 msgid "Property Change" msgstr "Promjena svojstva" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Da" #: ui/changes.py:321 msgid "No" msgstr "Ne" #: ui/changes.py:410 msgid "Open from first revision" msgstr "Otvori iz prve revizije" #: ui/changes.py:415 msgid "Open from second revision" msgstr "Otvori iz druge revizije" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "Ne moÅžete označiti mapu" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "Označi - %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Redak" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Tekst" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "Polje inačice treba sadrÅžavati broj" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "Dnevnik - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "Nije primjenjivo" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "Akcija" #: ui/log.py:338 msgid "Copy From Path" msgstr "Kopiraj sa staze" #: ui/log.py:338 msgid "Copy From Revision" msgstr "Kopiraj iz inačice" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "Pogledaj razliku u odnosu na radnu kopiju" #: ui/log.py:791 msgid "View diff between revisions" msgstr "Pogledaj razliku između inačica" #: ui/log.py:796 msgid "Compare with working copy" msgstr "Usporedi s radnom kopijlom" #: ui/log.py:806 msgid "Compare revisions" msgstr "Usporedi inačice" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "Pogledaj razlike između revizija" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "Uredi autora..." #: ui/log.py:837 msgid "Edit log message..." msgstr "Uredi poruku dnevnika..." #: ui/log.py:841 msgid "Edit revision properties..." msgstr "Uredi svojstva revizije..." #: ui/log.py:1047 msgid "Edit author" msgstr "Uredi autora" #: ui/log.py:1059 msgid "Edit log message" msgstr "Uredi poruku dnevnika" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "Napoznato" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "Engleski" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "Odaberite program" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "Da li ste sigurni da Åželite očistiti staze skladiÅĄta?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "SkladiÅĄne staze očiÅĄÄ‡ene" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "Da li se sigruni da Åželite očistiti vaÅĄe prethodne poruke?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "Prethodne poruke očiÅĄÄ‡ene" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "Da li sigurno Åželite očistiti vaÅĄe autentikacijske podatke?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "Autentikacijski podaci očiÅĄÄ‡eni" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "U nemogućnosti pribaviti popis svojstava" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "Trebate odabrati odrediÅĄnu stazu." #: ui/branch.py:115 msgid "Branch/tag" msgstr "Grana/oznaka" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "Izrada grane/oznake" #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "ZavrÅĄena izrada grane/oznake" #: ui/lock.py:73 msgid "Locked" msgstr "Zaključano" #: ui/lock.py:167 msgid "Get Lock" msgstr "Zaključaj" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "Zaključavanje..." #: ui/lock.py:177 msgid "Completed Lock" msgstr "Zaključano" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "Lokacija skladiÅĄta je obavezno polje." #: ui/switch.py:80 msgid "Switch" msgstr "Zamijeni" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "Zamijena u tijeku" #: ui/switch.py:89 msgid "Completed Switch" msgstr "Zamjena izvrÅĄena" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "najnovije" #: ui/widget.py:860 msgid "Number" msgstr "Broj" #: ui/widget.py:861 msgid "Working Copy" msgstr "Radna verzija" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "PosluÅžitelj" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "Preuzimanje - %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "Preuzimanje u tijeku..." #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "Naziv" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "Izradi zakrpu" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "Odabrana staza nije radna kopija" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "Izrada zakrpe..." #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "Zakrpa napravljena" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "Svojstva - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "Vrijednost" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "Snimanje svojstava nije uspjelo." #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" "Napomena: promjene svojstava se primjenjuju odmah. MoÅžete provjeriti " "i poniÅĄtiti promjene koristeći skočni izbornik za svaku stavku.\n" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" "ÅŊelite li obrisati označena svojstva iz svih datatoteka \n" "i poddirektorija u ovoj mapi?" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "Datoteka nije pod sustavom kontrola verzija." #: ui/property_editor.py:112 msgid "Reserved" msgstr "Rezervirano" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "Nije moguće postaviti novu vrijednost stvojstva." #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "Mime tip" #: ui/action.py:338 msgid "Finished" msgstr "ZavrÅĄeno" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - ZavrÅĄeno" #: ui/action.py:365 msgid "Log Message" msgstr "Komentar za dnevnik" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "Otključaj" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "Otključavanje u tijeku..." #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "Otključavanje zavrÅĄeno" #: ui/browser.py:89 msgid "Size" msgstr "Veličina" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "Napravi mapu..." #: ui/browser.py:353 msgid "Copy to..." msgstr "Kopiraj u..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "Kopiraj URL u spremnik" #: ui/browser.py:363 msgid "Move to..." msgstr "Premjesti..." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "Gdje Åželite kopirati odabrano?" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "Nova lokacija:" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "Gdje Åželite premjestiti odabrano?" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "ČiÅĄÄ‡enje..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "ZavrÅĄeno čiÅĄÄ‡enje" #: ui/create.py:46 msgid "Repository successfully created" msgstr "SkladiÅĄte uspjeÅĄno napravljeno" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" "Dogodila se pogreÅĄka prilikom kreiranja skladiÅĄta. Provjerite da li je " "odabrana mapa prazna." #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Svojstva za:" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "Odabrana svojstva biti će primijenjena ponirući." #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "ObriÅĄi svojstva ponirući" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "Uredi..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "Novo..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "URL staza:" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "OsvjeÅži" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "Dodaj poruku" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "Detalji o certifikatu" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "Uredi vrijednost svojstva" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "Ime mape" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "Poruka" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "Molim dopunite svojim autentikacijskim podacima" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "Molimo, postavite dateteku s ssl certifikatom" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "Prethodne poruke" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" "Da li sigurno Åželite obrisati %item%?" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "RabbitVCS greÅĄka" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "Prihvati za stalno" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "Prihvati za ovaj put" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "Primijeni svojstvo ponirući" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "Prijava" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "Provjeri certifikat" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "Potvrda" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "Izradi mapu..." #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "Potvrda brisanja" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "Uskrati" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "Otisak prsta:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "Izdavač:" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "Login:" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "Zaporka:" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "Putanja:" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "Prethodne poruke" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "Svojstvo" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "Svojstvo:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "RabbitVCS greÅĄka" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "Područje:" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "SSL Client Certification" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "Spremi autentikaciju" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "Promjena teksta" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "Stavke će biti biti prebačeni u smeće" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "Ispravno:" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "Vrijednost:" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "Poveznice" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "Informacija o verziji" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Autori:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Zahvale:" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "Datoteka(e) promjene (dvoklik za usporedbu s osnovom)" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "Tablica inačica" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Ograničenje:" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "Dnevnik" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "OsvjeÅži" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "Prikazuje inačice:" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "Zaustavi se na kopiranju" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "Potrebno je čiÅĄÄ‡enje...\n" "\n" "Da li Åželite pokrenuti čiÅĄÄ‡enje?" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "Prijava korisnika" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "Poruke dnevnika" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "Mogućnosti dnevnika" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "Program za usporedbu datoteka" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "URL Povijest" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "Pregledaj..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "IzbriÅĄi podatke za prijavu korisnika" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "Omogući oznake" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "Omogući svojstva datoteka" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "Omogući poniruću provjeru statusa" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "Vanjski programi" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "Općenito" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "Jezik:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "Pisanje dnevnika" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "Najmanja razina logiranja" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "Broj zapamćenih URL-ova" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "Broj spremljenih poruka" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "Spremljeni podaci" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "PrikaÅži RabbitVCS alate za traÅženje greÅĄaka (debugging)" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "Debug izbornik se koristi za traÅženje greÅĄaka unutar RabbitVCSa" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "Tip:" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "Datoteke za zaključavanje" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "Molim opiÅĄite zaÅĄto zaključavate ove datoteke" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "Zaključaj datoteke" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "Označi sve / Makni sve oznake" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "Preuzmi lokote" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "Od inančice" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "Do inačice" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "PribiljeÅži" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "Promijenjene datoteke (dvoklik za usporedbu s osnovom)" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "Pohrani u:" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "PrikaÅži datoteke bez verzije" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Obavijesne poruke" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "Udaljeni URI:" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "Radna kopija:" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "Dodaj novo svojstvo" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "Zatvori dijalog." #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "Editor za svojstva" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "OsvjeÅži popis svojstava." #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "Promijeni skladiÅĄte za radnu kopiju" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "Od:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "Do:" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "Mogućnosti" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "Inačica" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "Preskoči vanjska skladiÅĄta" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "Ponirući" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "Uvoz poruke" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "SkladiÅĄte" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "Uključi zanemarene datoteke" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "Od URL-a" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "Do: (URL i inačica za stapanje)" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "Raspon inačica" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "Do: (URL i inačica za stapanje)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "URL od kojeg stapamo" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "Radna kopija" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "Odaberite ovu metodu ako imate neke promjene u grani i Åželite stopiti svoje " "promjene s drugom granom." #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "Odaberite ovu metodu ako Åželite stopiti dvije različite grane u vaÅĄu radnu " "kopiju." #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "Zanemari porijeklo" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "Pomoćnik stapanja" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "Stopi raspon inačica" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "Stopi dva različita stabla" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "Samo zabiljeÅži stapanje" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "PrikaÅži dnevnik" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "Test stapanja" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" "Koristite dnevnik za odabir revizija koje Åželite stopiti. MoÅžete i upisati " "revizije odvojene zarezima, a raspon revizija je moguće upisati koristeći " "crticu '-'. \n" "\n" "Primjer: 4-7,9,11,15-HEAD\n" "\n" "Za stapanje svih revizija, polje ostavite nepopunjeno." rabbitvcs-0.19/po/hu.po000066400000000000000000001542331445560650400150350ustar00rootroot00000000000000# Hungarian translation of rabbit-vcs # Copyright (C) 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the rabbit-vcs-package. # Laszlo Csordas , 2010. # SÃĄndor Petrovics, 2018 msgid "" msgstr "" "Project-Id-Version: rabbit-vcs 0.17.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-02-08 20:40+0100\n" "PO-Revision-Date: 2018-02-10 21:00+0100\n" "Last-Translator: csola48 \n" "Language-Team: hungarian \n" "Language: hu_HU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-Basepath: ..\n" "X-Poedit-SearchPath-0: .\n" #: clients/caja/RabbitVCS.py:218 clients/nautilus-3.0/RabbitVCS.py:214 #: clients/nautilus/RabbitVCS.py:145 clients/nemo/RabbitVCS.py:214 #: extension/RabbitVCS.py:214 msgid "RVCS Status" msgstr "RVCS Állapot" #: clients/caja/RabbitVCS.py:224 clients/nautilus-3.0/RabbitVCS.py:220 #: clients/nautilus/RabbitVCS.py:151 clients/nemo/RabbitVCS.py:220 #: extension/RabbitVCS.py:220 msgid "RVCS Revision" msgstr "RVCS ReviziÃŗ" #: clients/caja/RabbitVCS.py:230 clients/nautilus-3.0/RabbitVCS.py:226 #: clients/nautilus/RabbitVCS.py:157 clients/nemo/RabbitVCS.py:226 #: extension/RabbitVCS.py:226 msgid "RVCS Author" msgstr "RVCS Szerző" #: clients/caja/RabbitVCS.py:236 clients/nautilus-3.0/RabbitVCS.py:232 #: clients/nautilus/RabbitVCS.py:163 clients/nemo/RabbitVCS.py:232 #: extension/RabbitVCS.py:232 msgid "RVCS Age" msgstr "RVCS Életkor" #: clients/gedit/rabbitvcs-plugin.py:456 msgid "Ignore by File Name" msgstr "MellőzÊs fÃĄjlnÊv szerint" #: clients/gedit/rabbitvcs-plugin.py:457 rabbitvcs/util/contextmenuitems.py:737 msgid "Ignore item by filename" msgstr "TÊtel mellőzÊse fÃĄjl nÊv szerint" #: clients/gedit/rabbitvcs-plugin.py:461 msgid "Ignore by File Extension" msgstr "MellőzÊs fÃĄjlkiterjesztÊs szerint" #: clients/gedit/rabbitvcs-plugin.py:462 msgid "Ignore item by extension" msgstr "TÊtel mellőzÊse kiterjesztÊs szerint" #: rabbitvcs/services/statuschecker.py:40 msgid "Simple status checker" msgstr "EgyszerÅą ÃĄllapot-ellenőrző" #: rabbitvcs/ui/__init__.py:57 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" "A --vcs [svn|git] opciÃŗ hasznÃĄlatÃĄval meg kell adnia egy verziÃŗkÃļvető " "rendszer" #: rabbitvcs/ui/action.py:120 rabbitvcs/ui/log.py:390 rabbitvcs/ui/log.py:676 msgid "Action" msgstr "EsemÊny" #: rabbitvcs/ui/action.py:120 rabbitvcs/ui/add.py:80 rabbitvcs/ui/browser.py:90 #: rabbitvcs/ui/changes.py:280 rabbitvcs/ui/changes.py:381 #: rabbitvcs/ui/checkmods.py:109 rabbitvcs/ui/checkmods.py:172 #: rabbitvcs/ui/commit.py:84 rabbitvcs/ui/createpatch.py:89 #: rabbitvcs/ui/lock.py:71 rabbitvcs/ui/log.py:390 rabbitvcs/ui/log.py:676 #: rabbitvcs/ui/markresolved.py:62 rabbitvcs/ui/revert.py:74 #: rabbitvcs/ui/stage.py:65 rabbitvcs/ui/unlock.py:62 #: rabbitvcs/ui/unstage.py:64 msgid "Path" msgstr "Útvonal" #: rabbitvcs/ui/action.py:120 msgid "Mime Type" msgstr "Mime típus" #: rabbitvcs/ui/action.py:376 msgid "Finished" msgstr "Befejezve" #: rabbitvcs/ui/action.py:380 #, python-format msgid "%s - Finished" msgstr "%s - Befejezve" #: rabbitvcs/ui/action.py:403 msgid "Log Message" msgstr "NaplÃŗ bejegyzÊs" #: rabbitvcs/ui/add.py:80 rabbitvcs/ui/checkmods.py:109 #: rabbitvcs/ui/checkmods.py:172 rabbitvcs/ui/commit.py:84 #: rabbitvcs/ui/createpatch.py:89 rabbitvcs/ui/lock.py:71 #: rabbitvcs/ui/markresolved.py:62 rabbitvcs/ui/revert.py:74 #: rabbitvcs/ui/stage.py:65 rabbitvcs/ui/unlock.py:62 #: rabbitvcs/ui/unstage.py:64 msgid "Extension" msgstr "KiterjesztÊs" #: rabbitvcs/ui/add.py:103 rabbitvcs/ui/commit.py:130 rabbitvcs/ui/lock.py:112 #: rabbitvcs/ui/push.py:119 rabbitvcs/ui/revert.py:107 #: rabbitvcs/ui/unlock.py:86 msgid "Loading..." msgstr "BetÃļltÊs..." #: rabbitvcs/ui/add.py:125 rabbitvcs/ui/commit.py:267 rabbitvcs/ui/lock.py:115 #: rabbitvcs/ui/revert.py:111 rabbitvcs/ui/unlock.py:110 #, python-format msgid "Found %d item(s)" msgstr "%d elemet talÃĄlt" #: rabbitvcs/ui/add.py:208 rabbitvcs/ui/add.py:233 rabbitvcs/ui/branches.py:281 #: rabbitvcs/ui/tags.py:270 rabbitvcs/ui/widget.py:1368 #: rabbitvcs/util/contextmenuitems.py:450 msgid "Add" msgstr "HozzÃĄadÃĄs" #: rabbitvcs/ui/add.py:209 rabbitvcs/ui/add.py:234 msgid "Running Add Command..." msgstr "HozzÃĄadÃĄs parancs fut..." #: rabbitvcs/ui/add.py:211 rabbitvcs/ui/add.py:236 msgid "Completed Add" msgstr "HozzÃĄadÃĄs befejezve" #: rabbitvcs/ui/annotate.py:58 msgid "Cannot annotate a directory" msgstr "Nem lehet jegyzetet fÅązni a kÃļnyvtÃĄrhoz" #: rabbitvcs/ui/annotate.py:64 #, python-format msgid "Annotate - %s" msgstr "Jegyzet - %s" #: rabbitvcs/ui/annotate.py:126 rabbitvcs/ui/annotate.py:227 msgid "Line" msgstr "Sor" #: rabbitvcs/ui/annotate.py:126 rabbitvcs/ui/annotate.py:227 #: rabbitvcs/ui/browser.py:90 rabbitvcs/ui/checkmods.py:174 #: rabbitvcs/ui/log.py:51 rabbitvcs/ui/log.py:373 rabbitvcs/ui/log.py:660 #: rabbitvcs/ui/widget.py:971 msgid "Revision" msgstr "RevíziÃŗ" #: rabbitvcs/ui/annotate.py:126 rabbitvcs/ui/annotate.py:227 #: rabbitvcs/ui/browser.py:90 rabbitvcs/ui/checkmods.py:174 #: rabbitvcs/ui/log.py:53 rabbitvcs/ui/log.py:373 rabbitvcs/ui/log.py:660 msgid "Author" msgstr "Szerző" #: rabbitvcs/ui/annotate.py:127 rabbitvcs/ui/annotate.py:228 #: rabbitvcs/ui/browser.py:90 rabbitvcs/ui/dialog.py:53 rabbitvcs/ui/log.py:52 #: rabbitvcs/ui/log.py:374 rabbitvcs/ui/log.py:661 rabbitvcs/ui/push.py:77 msgid "Date" msgstr "DÃĄtum" #: rabbitvcs/ui/annotate.py:127 rabbitvcs/ui/annotate.py:228 msgid "Text" msgstr "SzÃļveg" #: rabbitvcs/ui/annotate.py:142 msgid "The from revision field must be an integer" msgstr "A revíziÃŗ mező egÊsz szÃĄm kell legyen" #: rabbitvcs/ui/applypatch.py:58 rabbitvcs/ui/applypatch.py:117 #: rabbitvcs/ui/applypatch.py:147 msgid "Apply Patch" msgstr "HibajavítÃĄs alkalmazÃĄsa" #: rabbitvcs/ui/applypatch.py:78 msgid "Apply Patch To Directory..." msgstr "HibajavítÃĄs alkalmazÃĄsa a kÃļnyvtÃĄrra" #: rabbitvcs/ui/applypatch.py:118 rabbitvcs/ui/applypatch.py:148 msgid "Applying Patch File..." msgstr "HibajavítÃŗ fÃĄjl alkalmazÃĄsa..." #: rabbitvcs/ui/applypatch.py:120 rabbitvcs/ui/applypatch.py:150 msgid "Patch File Applied" msgstr "HibajavítÃŗ fÃĄjl alkalmazva" #: rabbitvcs/ui/branch.py:93 msgid "You must supply a destination path." msgstr "Meg kell adni a vÊgcÊl Ãētvonalat." #: rabbitvcs/ui/branch.py:109 msgid "Branch/tag" msgstr "Ágak/címkÊk..." #: rabbitvcs/ui/branch.py:110 msgid "Running Branch/tag Command..." msgstr "Branch/tag parancs fut..." #: rabbitvcs/ui/branch.py:112 msgid "Completed Branch/tag" msgstr "Branch/tag parancs befejezve" #: rabbitvcs/ui/branches.py:66 msgid "Branch Manager" msgstr "Ágkezelő" #: rabbitvcs/ui/branches.py:67 msgid "Branches" msgstr "Ágak" #: rabbitvcs/ui/branches.py:77 rabbitvcs/ui/widget.py:972 msgid "Branch" msgstr "Ág" #: rabbitvcs/ui/branches.py:101 rabbitvcs/ui/tags.py:96 msgid "Name:" msgstr "NÊv:" #: rabbitvcs/ui/branches.py:111 msgid "Start Point:" msgstr "Kezdőpont:" #: rabbitvcs/ui/branches.py:130 msgid "Keep old branch's history" msgstr "RÊgi ÃĄgelőzmÊnyek megtartÃĄsa" #: rabbitvcs/ui/branches.py:139 msgid "Set as active branch" msgstr "BeÃĄllítÃĄs aktív ÃĄgkÊnt" #: rabbitvcs/ui/branches.py:148 rabbitvcs/ui/branches.py:298 #: rabbitvcs/ui/tags.py:142 rabbitvcs/ui/tags.py:281 msgid "Save" msgstr "MentÊs" #: rabbitvcs/ui/branches.py:156 rabbitvcs/ui/merge.py:510 #: rabbitvcs/ui/tags.py:106 rabbitvcs/ui/tags.py:173 msgid "Revision:" msgstr "RevíziÃŗ:" #: rabbitvcs/ui/branches.py:168 rabbitvcs/ui/merge.py:522 #: rabbitvcs/ui/tags.py:125 rabbitvcs/ui/tags.py:185 msgid "Message:" msgstr "Üzenet:" #: rabbitvcs/ui/branches.py:214 rabbitvcs/ui/remotes.py:123 #: rabbitvcs/ui/tags.py:227 #, python-format msgid "Are you sure you want to delete %s?" msgstr "Biztos, hogy tÃļrÃļlni akarja ezt: %s?" #: rabbitvcs/ui/branches.py:287 msgid "Add Branch" msgstr "Ág hozzÃĄadÃĄsa" #: rabbitvcs/ui/branches.py:312 msgid "Branch Detail" msgstr "Ág rÊszletei" #: rabbitvcs/ui/browser.py:90 msgid "Size" msgstr "MÊret" #: rabbitvcs/ui/browser.py:326 msgid "Select" msgstr "KijelÃļlÊs" #: rabbitvcs/ui/browser.py:347 msgid "Create folder..." msgstr "Mappa lÊtrehozÃĄsa..." #: rabbitvcs/ui/browser.py:352 msgid "Copy to..." msgstr "MÃĄsolÃĄs..." #: rabbitvcs/ui/browser.py:357 msgid "Copy URL to clipboard" msgstr "URL mÃĄsolÃĄsa a vÃĄgÃŗlapra" #: rabbitvcs/ui/browser.py:362 msgid "Move to..." msgstr "ÁthelyezÊs..." #: rabbitvcs/ui/browser.py:471 rabbitvcs/ui/rename.py:54 #: rabbitvcs/ui/rename.py:86 rabbitvcs/ui/rename.py:115 msgid "Rename" msgstr "ÁtnevezÊs" #: rabbitvcs/ui/browser.py:471 rabbitvcs/ui/rename.py:54 msgid "New Name:" msgstr "Új nÊv:" #: rabbitvcs/ui/browser.py:532 msgid "Where do you want to copy the selection?" msgstr "HovÃĄ akarja mÃĄsolni a kijelÃļlÊst?" #: rabbitvcs/ui/browser.py:533 rabbitvcs/ui/browser.py:562 msgid "New Location:" msgstr "Új hely:" #: rabbitvcs/ui/browser.py:561 msgid "Where do you want to move the selection?" msgstr "HovÃĄ akarja ÃĄthelyezni a kijelÃļlÊst?" #: rabbitvcs/ui/changes.py:51 msgid "More Actions..." msgstr "TovÃĄbbi mÅąveletek..." #: rabbitvcs/ui/changes.py:52 rabbitvcs/ui/checkmods.py:252 msgid "View unified diff" msgstr "EgysÊges ÃļsszehasonlítÃŗ nÊzet" #: rabbitvcs/ui/changes.py:280 rabbitvcs/ui/changes.py:381 msgid "Change" msgstr "VÃĄltozÃĄs" #: rabbitvcs/ui/changes.py:280 msgid "Property Change" msgstr "TulajdonsÃĄg vÃĄltozÃĄsa" #: rabbitvcs/ui/changes.py:325 rabbitvcs/ui/lock.py:123 msgid "Yes" msgstr "Igen" #: rabbitvcs/ui/changes.py:325 msgid "No" msgstr "Nem" #: rabbitvcs/ui/changes.py:427 msgid "Open from first revision" msgstr "Az első revíziÃŗ megnyitÃĄsa" #: rabbitvcs/ui/changes.py:432 msgid "Open from second revision" msgstr "A mÃĄsodik revíziÃŗ megnyitÃĄsa" #: rabbitvcs/ui/changes.py:437 msgid "View unified diff(s)" msgstr "EgysÊges ÃļsszehasonlítÃŗ nÊzet" #: rabbitvcs/ui/changes.py:442 rabbitvcs/ui/checkmods.py:257 msgid "Compare side by side" msgstr "PÃĄrhuzamos ÃļsszehasonlítÃĄs" #: rabbitvcs/ui/checkmods.py:109 rabbitvcs/ui/property_editor.py:113 msgid "Status" msgstr "Állapot" #: rabbitvcs/ui/checkmods.py:173 rabbitvcs/ui/commit.py:85 #: rabbitvcs/ui/createpatch.py:90 rabbitvcs/ui/markresolved.py:63 msgid "Text Status" msgstr "SzÃļveg ÃĄllapot" #: rabbitvcs/ui/checkmods.py:173 rabbitvcs/ui/commit.py:85 #: rabbitvcs/ui/createpatch.py:90 rabbitvcs/ui/markresolved.py:63 msgid "Property Status" msgstr "TulajdonsÃĄg ÃĄllapot" #: rabbitvcs/ui/checkout.py:132 rabbitvcs/ui/checkout.py:206 #, python-format msgid "Checkout - %s" msgstr "LecsekkolÃĄs - %s" #: rabbitvcs/ui/checkout.py:156 rabbitvcs/ui/clone.py:59 #: rabbitvcs/ui/export.py:73 rabbitvcs/ui/export.py:142 msgid "The repository URL and destination path are both required fields." msgstr "A tÃĄrolÃŗ URL Ês a vÊgcÊl Ãētvonal mezőket ki kell tÃļlteni." #: rabbitvcs/ui/checkout.py:166 rabbitvcs/ui/updateto.py:138 msgid "Checkout" msgstr "EllenőrzÊs" #: rabbitvcs/ui/checkout.py:167 msgid "Running Checkout Command..." msgstr "EllenőrzÊs parancs fut..." #: rabbitvcs/ui/checkout.py:177 rabbitvcs/ui/updateto.py:145 msgid "Completed Checkout" msgstr "EllenőrzÊs befejezve" #: rabbitvcs/ui/clean.py:67 rabbitvcs/util/contextmenuitems.py:692 msgid "Clean" msgstr "TisztítÃĄs" #: rabbitvcs/ui/clean.py:68 msgid "Running Clean Command..." msgstr "TisztítÃĄs parancs fut..." #: rabbitvcs/ui/clean.py:78 msgid "Completed Clean" msgstr "TisztítÃĄs befejezve" #: rabbitvcs/ui/cleanup.py:56 rabbitvcs/util/contextmenuitems.py:514 msgid "Cleanup" msgstr "TisztítÃĄs" #: rabbitvcs/ui/cleanup.py:57 msgid "Cleaning Up..." msgstr "TisztítÃĄs..." #: rabbitvcs/ui/cleanup.py:59 msgid "Completed Cleanup" msgstr "TisztítÃĄs befejezve" #: rabbitvcs/ui/clone.py:48 rabbitvcs/ui/clone.py:67 #: rabbitvcs/util/contextmenuitems.py:662 msgid "Clone" msgstr "KlÃŗnozÃĄs" #: rabbitvcs/ui/clone.py:68 msgid "Running Clone Command..." msgstr "KlÃŗnozÃĄsÃĄs parancs fut..." #: rabbitvcs/ui/clone.py:75 msgid "Completed Clone" msgstr "KlÃŗnozÃĄs befejezve" #: rabbitvcs/ui/commit.py:314 rabbitvcs/ui/commit.py:382 #: rabbitvcs/ui/commit.py:445 rabbitvcs/util/contextmenuitems.py:358 msgid "Commit" msgstr "BekÃŧldÊs" #: rabbitvcs/ui/commit.py:315 rabbitvcs/ui/commit.py:383 #: rabbitvcs/ui/commit.py:446 msgid "Running Commit Command..." msgstr "BekÃŧldÊs parancs fut..." #: rabbitvcs/ui/commit.py:328 rabbitvcs/ui/commit.py:392 #: rabbitvcs/ui/commit.py:455 msgid "Completed Commit" msgstr "BekÃŧldÊs befejezve" #: rabbitvcs/ui/commit.py:409 msgid "Close Branch" msgstr "Ág lezÃĄrasa" #: rabbitvcs/ui/create.py:52 msgid "Repository successfully created" msgstr "TÃĄrolÃŗ sikeresen lÊtrehozva" #: rabbitvcs/ui/create.py:54 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "Hiba a tÃĄrolÃŗ kÊszítÊsekor. GyőződjÃļn meg rÃŗla, hogy a mappa Ãŧres." #: rabbitvcs/ui/create.py:68 rabbitvcs/util/contextmenuitems.py:657 msgid "Initialize Repository" msgstr "A tÃĄrolÃŗ inicializÃĄlÃĄsa" #: rabbitvcs/ui/create.py:69 msgid "Setting up repository..." msgstr "TÃĄrolÃŗ beÃĄllítÃĄsa..." #: rabbitvcs/ui/create.py:71 msgid "Completed repository setup" msgstr "TÃĄrolÃŗ beÃĄllítÃĄsa befejeződÃļtt" #: rabbitvcs/ui/createpatch.py:69 rabbitvcs/ui/createpatch.py:121 #: rabbitvcs/ui/createpatch.py:168 rabbitvcs/ui/createpatch.py:235 msgid "Create Patch" msgstr "HibajavítÃĄs kÊszítÊse" #: rabbitvcs/ui/createpatch.py:82 msgid "The given path is not a working copy" msgstr "A megadott Ãētvonal nem a munkapÊldÃĄnyÊ." #: rabbitvcs/ui/createpatch.py:169 rabbitvcs/ui/createpatch.py:236 msgid "Creating Patch File..." msgstr "HibajavítÃŗ fÃĄjl kÊszítÊse..." #: rabbitvcs/ui/createpatch.py:199 rabbitvcs/ui/createpatch.py:265 msgid "Patch File Created" msgstr "HibajavítÃŗ fÃĄjl elkÊszítve" #: rabbitvcs/ui/dialog.py:37 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" "Egy hiba tÃļrtÊnt a RabbitVCS Nautilus kiterjesztÊsben. Vegye fel a " "kapcsolatot RabbitVCS team a hiba alÃĄbbi rÊszletes " "leírÃĄsÃĄval:" #: rabbitvcs/ui/dialog.py:53 rabbitvcs/ui/log.py:374 rabbitvcs/ui/log.py:661 #: rabbitvcs/ui/push.py:77 msgid "Message" msgstr "Üzenet" #: rabbitvcs/ui/dialog.py:107 msgid "Select a Folder" msgstr "DossziÊ kivÃĄlasztÃĄsa" #: rabbitvcs/ui/dialog.py:137 msgid "to" msgstr "eddig" #: rabbitvcs/ui/dialog.py:277 msgid "Select a File" msgstr "FÃĄjl kivÃĄlasztÃĄsa" #: rabbitvcs/ui/dialog.py:296 msgid "Save As..." msgstr "MentÊs mÃĄskÊntâ€Ļ" #: rabbitvcs/ui/dialog.py:315 msgid "Are you sure you want to continue?" msgstr "Biztos, hogy folytatni akarja?" #: rabbitvcs/ui/dialog.py:343 msgid "the selected item(s)" msgstr "a kivÃĄlasztott tÊtel/ek/" #: rabbitvcs/ui/dialog.py:414 msgid "Added a folder to the repository" msgstr "DossziÊ hozzÃĄadÃĄsa a tÃĄrolÃŗhoz" #: rabbitvcs/ui/diff.py:323 msgid "View diff as side-by-side comparison" msgstr "ÖsszehasonlítÃŗ nÊzet, mint pÃĄrhuzamos ÃļsszehasonlítÃĄs" #: rabbitvcs/ui/export.py:46 rabbitvcs/ui/export.py:125 #, python-format msgid "Export - %s" msgstr "Export - %s" #: rabbitvcs/ui/export.py:93 rabbitvcs/ui/export.py:162 msgid "Export" msgstr "Export" #: rabbitvcs/ui/export.py:94 rabbitvcs/ui/export.py:163 msgid "Running Export Command..." msgstr "ExportÃĄlÃĄs parancs fut..." #: rabbitvcs/ui/export.py:105 rabbitvcs/ui/export.py:171 msgid "Completed Export" msgstr "ExportÃĄlÃĄs befejezve" #: rabbitvcs/ui/ignore.py:101 msgid "Ignore file:" msgstr "MellőzÃļtt fÃĄjl:" #: rabbitvcs/ui/import.py:41 #, python-format msgid "Import - %s" msgstr "Import - %s" #: rabbitvcs/ui/import.py:63 msgid "The repository URL field is required." msgstr "TÃĄrolÃŗ URL mező igÊnyelt" #: rabbitvcs/ui/import.py:75 rabbitvcs/util/contextmenuitems.py:540 msgid "Import" msgstr "Import" #: rabbitvcs/ui/import.py:76 msgid "Running Import Command..." msgstr "ImportÃĄlÃĄs parancs fut..." #: rabbitvcs/ui/import.py:84 msgid "Completed Import" msgstr "ImportÃĄlÃĄs befejezve" #: rabbitvcs/ui/lock.py:72 rabbitvcs/vcs/svn/__init__.py:208 msgid "Locked" msgstr "LezÃĄrva" #: rabbitvcs/ui/lock.py:158 msgid "Get Lock" msgstr "ZÃĄrolÃĄs" #: rabbitvcs/ui/lock.py:159 msgid "Running Lock Command..." msgstr "ZÃĄrolÃĄs parancs fut..." #: rabbitvcs/ui/lock.py:168 msgid "Completed Lock" msgstr "ZÃĄrolÃĄs befejezve" #: rabbitvcs/ui/log.py:126 #, python-format msgid "Log - %s" msgstr "NaplÃŗ - %s" #: rabbitvcs/ui/log.py:305 rabbitvcs/ui/log.py:306 msgid "N/A" msgstr "N/A" #: rabbitvcs/ui/log.py:375 msgid "Color" msgstr "Szín" #: rabbitvcs/ui/log.py:391 msgid "Copy From Path" msgstr "MÃĄsolÃĄs az ÃētvonalrÃŗl" #: rabbitvcs/ui/log.py:391 msgid "Copy From Revision" msgstr "MÃĄsolÃĄs a revíziÃŗbÃŗl" #: rabbitvcs/ui/log.py:660 msgid "Graph" msgstr "Grafikon" #: rabbitvcs/ui/log.py:972 msgid "View diff against working copy" msgstr "ÖsszehasonlítÃŗ nÊzet a munkapÊldÃĄnnyal" #: rabbitvcs/ui/log.py:977 rabbitvcs/util/contextmenuitems.py:414 msgid "View diff against previous revision" msgstr "ÖsszehasonlítÃŗ nÊzet az előző revíziÃŗval" #: rabbitvcs/ui/log.py:982 msgid "View diff between revisions" msgstr "ÖsszehasonlítÃŗ nÊzet revíziÃŗk kÃļzÃļtt" #: rabbitvcs/ui/log.py:987 msgid "Compare with working copy" msgstr "ÖsszehasonlítÃĄs a munkapÊldÃĄnnyal" #: rabbitvcs/ui/log.py:992 rabbitvcs/util/contextmenuitems.py:432 msgid "Compare with previous revision" msgstr "ÖsszehasonlítÃĄs az előző revíziÃŗval" #: rabbitvcs/ui/log.py:997 msgid "Compare revisions" msgstr "RevíziÃŗk ÃļsszehasonlítÃĄsa" #: rabbitvcs/ui/log.py:1003 msgid "Show changes against previous revision" msgstr "ÖsszehasonlítÃŗ nÊzet az előző revíziÃŗval" #: rabbitvcs/ui/log.py:1009 msgid "Show changes between revisions" msgstr "VÃĄltozÃĄsok mutatÃĄsa kÊt revíziÃŗ kÃļzÃļtt" #: rabbitvcs/ui/log.py:1014 msgid "Update to this revision" msgstr "FrissítÊs erre a reviziÃŗra" #: rabbitvcs/ui/log.py:1015 msgid "Update the selected path to this revision" msgstr "A kijelÃļlt Ãētvonal frissítÊse erre a reviziÃŗra" #: rabbitvcs/ui/log.py:1020 msgid "Revert changes from this revision" msgstr "MÃŗdosítÃĄsok visszavonÃĄsa ebbő a reviziÃŗbÃŗl" #: rabbitvcs/ui/log.py:1021 msgid "Update the selected path by reverse merging the changes" msgstr "A kijelÃļlt Ãētvonal frissítÊse a mÃŗdosítÃĄsok visszavonÃĄsÃĄval" #: rabbitvcs/ui/log.py:1026 msgid "Copy to clipboard" msgstr "MÃĄsolÃĄs a vÃĄgÃŗlapra" #: rabbitvcs/ui/log.py:1027 msgid "Copy to clipboard the full data of these revisions" msgstr "Ezen reviziÃŗk telejes adatÃĄllomÃĄnyÃĄnak vÃĄgÃŗlapra mÃĄsolÃĄsa" #: rabbitvcs/ui/log.py:1031 rabbitvcs/ui/log.py:1035 msgid "Edit author..." msgstr "Szerző szerkesztÊse..." #: rabbitvcs/ui/log.py:1039 msgid "Edit log message..." msgstr "NaplÃŗ Ãŧzenet szerkesztÊse..." #: rabbitvcs/ui/log.py:1043 msgid "Edit revision properties..." msgstr "RevíziÃŗ tulajdonsÃĄgok szerkesztÊse..." #: rabbitvcs/ui/log.py:1323 msgid "Edit author" msgstr "Szerző szerkesztÊse" #: rabbitvcs/ui/log.py:1335 msgid "Edit log message" msgstr "NaplÃŗ Ãŧzenet szerkesztÊse" #: rabbitvcs/ui/markresolved.py:49 rabbitvcs/ui/markresolved.py:103 #: rabbitvcs/util/contextmenuitems.py:485 msgid "Mark as Resolved" msgstr "MegjelÃļlÊs megoldottkÊnt" #: rabbitvcs/ui/markresolved.py:104 msgid "Running Resolved Command..." msgstr "Megoldva parancs fut..." #: rabbitvcs/ui/markresolved.py:107 msgid "Completed Mark as Resolved" msgstr "MegjelÃļlÊs megoldottkÊnt befejezve" #: rabbitvcs/ui/merge.py:106 msgid "Running Merge Test" msgstr "EgyesítÊs teszt fut" #: rabbitvcs/ui/merge.py:107 msgid "Completed Merge Test" msgstr "EgyesítÊs teszt befejezve" #: rabbitvcs/ui/merge.py:109 msgid "Running Merge Command" msgstr "EgyesítÊs parancs fut" #: rabbitvcs/ui/merge.py:110 rabbitvcs/ui/merge.py:568 msgid "Completed Merge" msgstr "EgyesítÊs befejezve" #: rabbitvcs/ui/merge.py:121 rabbitvcs/ui/merge.py:561 msgid "Merge" msgstr "EgyesítÊs" #: rabbitvcs/ui/merge.py:476 msgid "No active branch" msgstr "Nincs aktív ÃĄg" #: rabbitvcs/ui/merge.py:487 msgid "Author:" msgstr "Szerző" #: rabbitvcs/ui/merge.py:499 rabbitvcs/ui/tags.py:162 msgid "Date:" msgstr "DÃĄtum" #: rabbitvcs/ui/merge.py:562 msgid "Running Merge Command..." msgstr "EgyesítÊs parancs fut..." #: rabbitvcs/ui/properties.py:56 #, python-format msgid "Properties - %s" msgstr "TulajdonsÃĄgok - %s" #: rabbitvcs/ui/properties.py:64 rabbitvcs/ui/property_editor.py:113 #: rabbitvcs/ui/remotes.py:68 msgid "Name" msgstr "NÊv" #: rabbitvcs/ui/properties.py:64 rabbitvcs/ui/property_editor.py:113 msgid "Value" msgstr "ÉrtÊk" #: rabbitvcs/ui/properties.py:153 rabbitvcs/ui/property_editor.py:157 #: rabbitvcs/ui/revprops.py:66 msgid "Unable to retrieve properties list" msgstr "TulajdonsÃĄg lista nem ÃĄllíthatÃŗ helyre" #: rabbitvcs/ui/properties.py:174 msgid "There was a problem saving your properties." msgstr "TulajdonsÃĄgok mentÊsÊnÊl problÊma adÃŗdott." #: rabbitvcs/ui/property_editor.py:57 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" "Figyelem: a tulajdonsÃĄgok vÃĄltozÃĄsa azonnal megtÃļrtÊnik. A helyi menÃŧ " "segítsÊgÊvel tÊtelenkÊnt megtekintheti Ês visszavonhatja a vÃĄltozÃĄsokat.\n" #: rabbitvcs/ui/property_editor.py:62 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" "TÃļrÃļlni akarja a kivÃĄlasztott tulajdonsÃĄgot minden fÃĄjlban ebben " "kÃļnyvtÃĄrban\n" "Ês alkÃļnyvtÃĄraiban?" #: rabbitvcs/ui/property_editor.py:103 msgid "File is not under version control." msgstr "Ez a fÃĄjl nincs verziÃŗ kontroll alatt." #: rabbitvcs/ui/property_editor.py:113 msgid "Reserved" msgstr "Fenntartva" #: rabbitvcs/ui/property_editor.py:181 msgid "Unable to set new value for property." msgstr "A tulajdonsÃĄg Ãēj ÊrtÊkÊt nem lehet beÃĄllítani." #: rabbitvcs/ui/property_page.py:148 msgid "Repository URL" msgstr "TÃĄrolÃŗ URL" #: rabbitvcs/ui/push.py:100 rabbitvcs/util/contextmenuitems.py:672 msgid "Push" msgstr "Push" #: rabbitvcs/ui/push.py:101 msgid "Running Push Command..." msgstr "Push parancs fut..." #: rabbitvcs/ui/push.py:103 msgid "Completed Push" msgstr "Push befejezve" #: rabbitvcs/ui/push.py:161 msgid "No commits found" msgstr "Nincsenek commit-ok" #: rabbitvcs/ui/relocate.py:72 msgid "The from and to url fields are both required." msgstr "Az URL tartomÃĄny hatÃĄrainak megadÃĄsa szÃŧksÊges." #: rabbitvcs/ui/relocate.py:82 msgid "Relocate" msgstr "Áthelyez" #: rabbitvcs/ui/relocate.py:83 msgid "Running Relocate Command..." msgstr "ÁthelyezÊs parancs fut..." #: rabbitvcs/ui/relocate.py:90 msgid "Completed Relocate" msgstr "ÁthelyezÊs befejezve" #: rabbitvcs/ui/remotes.py:61 msgid "Remote Repository Manager" msgstr "TÃĄvoli tÃĄrolÃŗkezelő" #: rabbitvcs/ui/remotes.py:62 msgid "Remote Repositories" msgstr "TÃĄvoli tÃĄrolÃŗ:" #: rabbitvcs/ui/remotes.py:68 msgid "Host" msgstr "Host" #: rabbitvcs/ui/rename.py:50 msgid "The requested file or folder does not exist." msgstr "A kÊrt fÃĄjl vagy mappa nem lÊtezik." #: rabbitvcs/ui/rename.py:62 msgid "The new name field is required" msgstr "Új nÊv mező szÃŧksÊges" #: rabbitvcs/ui/rename.py:87 rabbitvcs/ui/rename.py:116 msgid "Running Rename Command..." msgstr "ÁtnevezÊs parancs fut..." #: rabbitvcs/ui/rename.py:93 rabbitvcs/ui/rename.py:122 msgid "Completed Rename" msgstr "ÁtnevezÊs befejezve" #: rabbitvcs/ui/reset.py:97 rabbitvcs/util/contextmenuitems.py:696 msgid "Reset" msgstr "Alaphelyzet" #: rabbitvcs/ui/reset.py:98 msgid "Running Reset Command..." msgstr "Alaphelyzet parancs fut..." #: rabbitvcs/ui/reset.py:105 msgid "Completed Reset" msgstr "Alaphelyzetbe ÃĄllítÃĄs kÊsz" #: rabbitvcs/ui/revert.py:177 rabbitvcs/ui/revert.py:203 #: rabbitvcs/util/contextmenuitems.py:479 msgid "Revert" msgstr "VisszaÃĄllítÃĄs" #: rabbitvcs/ui/revert.py:178 rabbitvcs/ui/revert.py:204 msgid "Running Revert Command..." msgstr "VisszavonÃĄs parancs fut" #: rabbitvcs/ui/revert.py:180 rabbitvcs/ui/revert.py:206 msgid "Completed Revert" msgstr "VisszavonÃĄs befejezve" #: rabbitvcs/ui/settings.py:44 rabbitvcs/vcs/svn/__init__.py:222 msgid "Unknown" msgstr "Ismeretlen" #: rabbitvcs/ui/settings.py:46 msgid "There was an error communicating with the status checker service." msgstr "Hiba tÃļrtÊnt a stÃĄtuszellenőrző szolgÃĄltatÃĄssal valÃŗ kommunikÃĄciÃŗban" #: rabbitvcs/ui/settings.py:136 msgid "Config file:" msgstr "BeÃĄllítÃĄsi fÃĄjl:" #: rabbitvcs/ui/settings.py:326 msgid "Select a program" msgstr "Program kivÃĄlasztÃĄsa" #: rabbitvcs/ui/settings.py:335 msgid "Are you sure you want to clear your repository paths?" msgstr "Biztos, hogy akarja tÃļrÃļlni a tÃĄrolÃŗ Ãētvonalakat?" #: rabbitvcs/ui/settings.py:342 msgid "Repository paths cleared" msgstr "TÃĄrolÃŗ Ãētvonal tÃļrÃļlve" #: rabbitvcs/ui/settings.py:346 msgid "Are you sure you want to clear your previous messages?" msgstr "Biztos, hogy akarja tÃļrÃļlni a korÃĄbbi Ãŧzeneteket?" #: rabbitvcs/ui/settings.py:353 msgid "Previous messages cleared" msgstr "Előző Ãŧzenet tÃļrÃļlve" #: rabbitvcs/ui/settings.py:357 msgid "Are you sure you want to clear your authentication information?" msgstr "Biztos, hogy akarja tÃļrÃļlni a hitelesítÊsi informÃĄciÃŗt?" #: rabbitvcs/ui/settings.py:374 msgid "Authentication information cleared" msgstr "HitelesítÊsi informÃĄciÃŗ tÃļrÃļlve" #: rabbitvcs/ui/stage.py:51 rabbitvcs/ui/stage.py:103 #: rabbitvcs/util/contextmenuitems.py:701 msgid "Stage" msgstr "Stage" #: rabbitvcs/ui/stage.py:104 msgid "Running Stage Command..." msgstr "Stage parancs fut..." #: rabbitvcs/ui/stage.py:107 msgid "Completed Stage" msgstr "Stage kÊsz" #: rabbitvcs/ui/switch.py:65 msgid "The repository location is a required field." msgstr "TÃĄrolÃŗ helye mező kitÃļltÊse kÃļtelező." #: rabbitvcs/ui/switch.py:75 msgid "Switch" msgstr "ÁtvÃĄltÃĄs" #: rabbitvcs/ui/switch.py:76 msgid "Running Switch Command..." msgstr "ÁtvÃĄltÃĄs parancs fut..." #: rabbitvcs/ui/switch.py:84 msgid "Completed Switch" msgstr "ÁtvÃĄltÃĄs kÊsz" #: rabbitvcs/ui/tags.py:64 msgid "Tag Manager" msgstr "Címkekezelő" #: rabbitvcs/ui/tags.py:65 msgid "Tags" msgstr "CímkÊk" #: rabbitvcs/ui/tags.py:76 msgid "Tag" msgstr "Címke" #: rabbitvcs/ui/tags.py:150 msgid "Tagger:" msgstr "CímkÊző:" #: rabbitvcs/ui/tags.py:272 msgid "Add Tag" msgstr "Üzenet hozzÃĄadÃĄsa" #: rabbitvcs/ui/tags.py:290 msgid "Tag Detail" msgstr "Címke rÊszletei" #: rabbitvcs/ui/unlock.py:49 rabbitvcs/ui/unlock.py:128 msgid "Unlock" msgstr "NyitÃĄs" #: rabbitvcs/ui/unlock.py:129 msgid "Running Unlock Command..." msgstr "NyitÃĄs parancs fut..." #: rabbitvcs/ui/unlock.py:132 msgid "Completed Unlock" msgstr "NyitÃĄs befejezve" #: rabbitvcs/ui/unstage.py:51 rabbitvcs/ui/unstage.py:102 #: rabbitvcs/util/contextmenuitems.py:706 msgid "Unstage" msgstr "Unstage" #: rabbitvcs/ui/unstage.py:103 msgid "Running Unstage Command..." msgstr "Unstage parancs fut..." #: rabbitvcs/ui/unstage.py:106 msgid "Completed Unstage" msgstr "Unstage befejezve" #: rabbitvcs/ui/update.py:54 rabbitvcs/ui/update.py:102 #: rabbitvcs/util/contextmenuitems.py:352 msgid "Update" msgstr "FrissítÊs" #: rabbitvcs/ui/update.py:55 rabbitvcs/ui/update.py:103 #: rabbitvcs/ui/updateto.py:92 msgid "Updating..." msgstr "FrissítÊs..." #: rabbitvcs/ui/update.py:57 rabbitvcs/ui/update.py:121 #: rabbitvcs/ui/updateto.py:100 msgid "Completed Update" msgstr "FrissítÊs befejezve" #: rabbitvcs/ui/updateto.py:80 msgid "Rollback To Revision" msgstr "VisszagÃļrgetÊs reviziÃŗra" #: rabbitvcs/ui/updateto.py:81 msgid "Rolling Back..." msgstr "VisszagÃļrgetÊs..." #: rabbitvcs/ui/updateto.py:89 msgid "Completed Rollback" msgstr "VisszagÃļrgetÊs kÊsz" #: rabbitvcs/ui/updateto.py:91 msgid "Update To Revision" msgstr "RevíziÃŗ frissítÊse" #: rabbitvcs/ui/updateto.py:117 msgid "What revision/branch do you want to checkout?" msgstr "Melyik reviziÃŗt/ÃĄgat szeretnÊ lecsekkolni?" #: rabbitvcs/ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "%s lecsekkol..." #: rabbitvcs/ui/widget.py:970 rabbitvcs/ui/widget.py:976 msgid "HEAD" msgstr "HEAD" #: rabbitvcs/ui/widget.py:977 msgid "Number" msgstr "SzÃĄm" #: rabbitvcs/ui/widget.py:980 msgid "Working Copy" msgstr "MunkapÊldÃĄny" #: rabbitvcs/ui/widget.py:1205 msgid "Repository:" msgstr "TÃĄrolÃŗ" #: rabbitvcs/ui/widget.py:1224 msgid "Branch:" msgstr "Ág:" #: rabbitvcs/ui/widget.py:1250 msgid "Host:" msgstr "Host:" #: rabbitvcs/ui/widget.py:1363 msgid "Add line:" msgstr "Sor hozzÃĄadÃĄsa" #: rabbitvcs/util/contextmenuitems.py:304 msgid "Debug" msgstr "HibakeresÊs" #: rabbitvcs/util/contextmenuitems.py:309 msgid "Bugs" msgstr "Program hiba" #: rabbitvcs/util/contextmenuitems.py:314 msgid "Open Shell" msgstr "HÊjprogram megnyitÃĄsa" #: rabbitvcs/util/contextmenuitems.py:320 msgid "Refresh Status" msgstr "Frissített ÃĄllapot" #: rabbitvcs/util/contextmenuitems.py:325 msgid "Debug Revert" msgstr "NyomkÃļvetÊs visszafelÊ" #: rabbitvcs/util/contextmenuitems.py:326 msgid "Reverts everything it sees" msgstr "Minden lÃĄthatÃŗ visszavonÃĄsa" #: rabbitvcs/util/contextmenuitems.py:332 msgid "Invalidate" msgstr "ÉrvÊnytelenítÊs" #: rabbitvcs/util/contextmenuitems.py:333 msgid "Force an invalidate_extension_info() call" msgstr "Egy ÊrvÊnytelen kiterjesztÊs informÃĄciÃŗ lehívÃĄsÃĄnak kÊnyszerítÊse" #: rabbitvcs/util/contextmenuitems.py:339 msgid "Add Emblem" msgstr "JelkÊp hozzÃĄadÃĄsa" #: rabbitvcs/util/contextmenuitems.py:340 msgid "Add an emblem" msgstr "Egy jelkÊp hozzÃĄadÃĄsa" #: rabbitvcs/util/contextmenuitems.py:346 msgid "Checkout..." msgstr "LecsekkolÃĄs..." #: rabbitvcs/util/contextmenuitems.py:347 msgid "Check out a working copy" msgstr "MunkapÊldÃĄny ellenőrzÊse" #: rabbitvcs/util/contextmenuitems.py:353 msgid "Update a working copy" msgstr "MunkapÊldÃĄny frissítÊse" #: rabbitvcs/util/contextmenuitems.py:359 msgid "Commit modifications to the repository" msgstr "MÃŗdosítÃĄs bekÃŧldÊse a tÃĄrolÃŗba" #: rabbitvcs/util/contextmenuitems.py:364 msgid "RabbitVCS" msgstr "RabbitVCS" #: rabbitvcs/util/contextmenuitems.py:369 msgid "RabbitVCS SVN" msgstr "RabbitVCS SVN" #: rabbitvcs/util/contextmenuitems.py:374 msgid "RabbitVCS Git" msgstr "RabbitVCS Git" #: rabbitvcs/util/contextmenuitems.py:379 msgid "RabbitVCS Hg" msgstr "RabbitVCS Hg" #: rabbitvcs/util/contextmenuitems.py:384 msgid "Repository Browser" msgstr "TÃĄrolÃŗ bÃļngÊszÊs" #: rabbitvcs/util/contextmenuitems.py:385 msgid "Browse a repository tree" msgstr "TÃĄrolÃŗ fa bÃļngÊszÊse" #: rabbitvcs/util/contextmenuitems.py:390 msgid "Check for Modifications..." msgstr "MÃŗdosítÃĄsok ellenőrzÊse..." #: rabbitvcs/util/contextmenuitems.py:391 msgid "Check for modifications made to the repository" msgstr "TÃĄrolÃŗhoz kÊszített mÃŗdosítÃĄsok ellenőrzÊse" #: rabbitvcs/util/contextmenuitems.py:396 msgid "Diff Menu..." msgstr "ÖsszehasonlítÃŗ menÃŧ..." #: rabbitvcs/util/contextmenuitems.py:397 msgid "List of comparison options" msgstr "ÖsszehasonlítÃŗ lista beÃĄllítÃĄsok" #: rabbitvcs/util/contextmenuitems.py:402 msgid "View diff against base" msgstr "ÖsszehasonlítÃŗ nÊzet a bÃĄzissal" #: rabbitvcs/util/contextmenuitems.py:403 msgid "View the modifications made to a file" msgstr "FÃĄjlhoz kÊszített mÃŗdosítÃĄs nÊzete" #: rabbitvcs/util/contextmenuitems.py:408 msgid "View diff between files/folders" msgstr "ÖsszehasonlítÃŗ nÊzet fÃĄjlok/dossziÊk kÃļzÃļtt" #: rabbitvcs/util/contextmenuitems.py:409 msgid "View the differences between two files" msgstr "ÖsszehasonlítÃŗ nÊzet kÊt fÃĄjl kÃļzÃļtt" #: rabbitvcs/util/contextmenuitems.py:415 msgid "View the modifications made to a file since its last change" msgstr "Egy fÃĄjl mÃŗdosítÃĄsok megtkintÊse az utolsÃŗ vÃĄltozÃĄs Ãŗta" #: rabbitvcs/util/contextmenuitems.py:420 msgid "Compare with base" msgstr "ÖsszehasonlítÃĄs a bÃĄzissal" #: rabbitvcs/util/contextmenuitems.py:421 msgid "Compare with base using side-by-side comparison tool" msgstr "ÖsszehasonlítÃĄs a bÃĄzissal a pÃĄrhuzamos ÃļsszehasonlítÃŗ eszkÃļzzel" #: rabbitvcs/util/contextmenuitems.py:426 msgid "Compare files/folders" msgstr "FÃĄjl/dossziÊ ÃļsszehasonlítÃĄsa" #: rabbitvcs/util/contextmenuitems.py:427 msgid "Compare the differences between two items" msgstr "KÃŧlÃļnbsÊgek ÃļsszehasonlítÃĄsa kÊt tÊtel kÃļzÃļtt" #: rabbitvcs/util/contextmenuitems.py:433 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" "ÖsszehasonlítÃĄs az előző revíziÃŗ hasznÃĄlatÃĄval a pÃĄrhuzamos ÃļsszehasonlítÃŗ " "eszkÃļzzel" #: rabbitvcs/util/contextmenuitems.py:438 msgid "Show Changes..." msgstr "VÃĄltozÃĄsok mutatÃĄsa..." #: rabbitvcs/util/contextmenuitems.py:439 msgid "Show changes between paths and revisions" msgstr "VÃĄltozÃĄsok mutatÃĄsa az Ãētvonal Ês a revíziÃŗ kÃļzÃļtt" #: rabbitvcs/util/contextmenuitems.py:444 msgid "Show Log" msgstr "NaplÃŗ mutatÃĄsa" #: rabbitvcs/util/contextmenuitems.py:445 msgid "Show a file's log information" msgstr "FÃĄjl naplÃŗ informÃĄciÃŗ mutatÃĄsa" #: rabbitvcs/util/contextmenuitems.py:451 msgid "Schedule items to be added to the repository" msgstr "A tÃĄrolÃŗhoz hozzÃĄadandÃŗ elemek ÃŧtemezÊse" #: rabbitvcs/util/contextmenuitems.py:456 msgid "Add to ignore list" msgstr "HozzÃĄadÃĄs a mellőzÃļtt fÃĄjl listÃĄhoz" #: rabbitvcs/util/contextmenuitems.py:461 msgid "Update to revision..." msgstr "RevíziÃŗfrissítÊs..." #: rabbitvcs/util/contextmenuitems.py:462 msgid "Update a file to a specific revision" msgstr "Egy fÃĄjl frissítÊse speciÃĄlis revíziÃŗra" #: rabbitvcs/util/contextmenuitems.py:467 msgid "Rename..." msgstr "ÁtnevezÊs..." #: rabbitvcs/util/contextmenuitems.py:468 msgid "Schedule an item to be renamed on the repository" msgstr "A tÃĄrolÃŗban ÃĄtnevezendő elemek ÃŧtemezÊse" #: rabbitvcs/util/contextmenuitems.py:473 msgid "Delete" msgstr "TÃļrlÊs" #: rabbitvcs/util/contextmenuitems.py:474 msgid "Schedule an item to be deleted from the repository" msgstr "A tÃĄrolÃŗbÃŗl tÃļrlendő elemek ÃŧtmezÊse" #: rabbitvcs/util/contextmenuitems.py:480 msgid "Revert an item to its unmodified state" msgstr "Egy tÊtel visszaÃĄllítÃĄs a mÃŗdosítÃĄs elÃļtti ÃĄllapotÃĄra" #: rabbitvcs/util/contextmenuitems.py:486 msgid "Mark a conflicted item as resolved" msgstr "Egy konfliktusos tÊtel megoldottkÊnt valÃŗ megjelÃļlÊse" #: rabbitvcs/util/contextmenuitems.py:491 msgid "Restore" msgstr "VisszaÃĄllítva" #: rabbitvcs/util/contextmenuitems.py:492 msgid "Restore a missing item" msgstr "HiÃĄnyzÃŗ tÊtel visszaÃĄllítÃĄsa" #: rabbitvcs/util/contextmenuitems.py:496 msgid "Relocate..." msgstr "ÁthelyezÊs..." #: rabbitvcs/util/contextmenuitems.py:497 msgid "Relocate your working copy" msgstr "MunkapÊldÃĄny ÃĄthelyezÊse" #: rabbitvcs/util/contextmenuitems.py:502 msgid "Get Lock..." msgstr "ZÃĄrolÃĄs..." #: rabbitvcs/util/contextmenuitems.py:503 msgid "Locally lock items" msgstr "Helyi zÃĄrolt tÊtelek" #: rabbitvcs/util/contextmenuitems.py:508 msgid "Release Lock..." msgstr "ZÃĄrolÃĄs felodÃĄsa..." #: rabbitvcs/util/contextmenuitems.py:509 msgid "Release lock on an item" msgstr "Egy tÊtel zÃĄrolÃĄsÃĄnak feloldÃĄsa" #: rabbitvcs/util/contextmenuitems.py:515 msgid "Clean up working copy" msgstr "MunkapÊldÃĄny tisztítÃĄsa" #: rabbitvcs/util/contextmenuitems.py:520 msgid "Export..." msgstr "Export..." #: rabbitvcs/util/contextmenuitems.py:521 msgid "Export a working copy or repository with no versioning information" msgstr "Egy munkapÊldÃĄny vagy tÃĄrolÃŗ exportÃĄlÃĄsa verziÃŗinformÃĄciÃŗ nÊlkÃŧl" #: rabbitvcs/util/contextmenuitems.py:534 msgid "Create Repository here" msgstr "TÃĄrolÃŗ kÊszítÊse ide" #: rabbitvcs/util/contextmenuitems.py:535 msgid "Create a repository in a folder" msgstr "TÃĄrolÃŗ kÊszítÊse ebben a mappÃĄban" #: rabbitvcs/util/contextmenuitems.py:541 msgid "Import an item into a repository" msgstr "Egy tÊtel importÃĄlÃĄsa a tÃĄrolÃŗba" #: rabbitvcs/util/contextmenuitems.py:550 msgid "Branch/tag..." msgstr "Ágak/címkÊk..." #: rabbitvcs/util/contextmenuitems.py:551 msgid "Copy an item to another location in the repository" msgstr "Egy tÊtel mÃĄsolÃĄsa mÃĄsik helyre a tÃĄrolÃŗban" #: rabbitvcs/util/contextmenuitems.py:556 msgid "Switch..." msgstr "ÁtvÃĄltÃĄs..." #: rabbitvcs/util/contextmenuitems.py:557 msgid "Change the repository location of a working copy" msgstr "MunkapÊldÃĄny helyÊnek megvÃĄltoztatÃĄsa a tÃĄrolÃŗban" #: rabbitvcs/util/contextmenuitems.py:562 msgid "Merge..." msgstr "EgyesítÊs..." #: rabbitvcs/util/contextmenuitems.py:563 msgid "A wizard with steps for merging" msgstr "EgyesítővarÃĄzslÃŗ" #: rabbitvcs/util/contextmenuitems.py:568 msgid "Annotate..." msgstr "Jegyzet..." #: rabbitvcs/util/contextmenuitems.py:569 msgid "Annotate a file" msgstr "Jegyzet egy fÃĄjlhoz" #: rabbitvcs/util/contextmenuitems.py:574 msgid "Create Patch..." msgstr "HibajavítÃĄs kÊszítÊse..." #: rabbitvcs/util/contextmenuitems.py:575 msgid "Creates a unified diff file with all changes you made" msgstr "" "EgysÊges ÃļsszehasonlítÃŗ fÃĄjl kÊszítÊse, amely minden vÃĄltozÃĄst tartalmaz" #: rabbitvcs/util/contextmenuitems.py:580 msgid "Apply Patch..." msgstr "HibajavítÃĄs alkalmazÃĄsa..." #: rabbitvcs/util/contextmenuitems.py:581 msgid "Applies a unified diff file to the working copy" msgstr "EgysÊges ÃļsszehasonlítÃŗ fÃĄjl alkalmazÃĄsa a munkapÊldÃĄnyban" #: rabbitvcs/util/contextmenuitems.py:586 msgid "Properties" msgstr "TulajdonsÃĄgok" #: rabbitvcs/util/contextmenuitems.py:587 msgid "View the properties of an item" msgstr "Egy tÊtel tulajdonsÃĄgainak megtekintÊse" #: rabbitvcs/util/contextmenuitems.py:592 msgid "Help" msgstr "SÃēgÃŗ" #: rabbitvcs/util/contextmenuitems.py:593 msgid "View help" msgstr "SÃēgÃŗ megjelenítÊse" #: rabbitvcs/util/contextmenuitems.py:598 msgid "Settings" msgstr "BeÃĄllítÃĄsok" #: rabbitvcs/util/contextmenuitems.py:599 msgid "View or change RabbitVCS settings" msgstr "RabbitVCS beÃĄllítÃĄsok megtekintÊse vagy mÃŗdosítÃĄsa" #: rabbitvcs/util/contextmenuitems.py:604 msgid "About" msgstr "NÊvjegy" #: rabbitvcs/util/contextmenuitems.py:605 msgid "About RabbitVCS" msgstr "RabbitVCS nÊvjegye" #: rabbitvcs/util/contextmenuitems.py:610 msgid "Open" msgstr "Megnyit" #: rabbitvcs/util/contextmenuitems.py:611 msgid "Open a file" msgstr "FÃĄjl megnyitÃĄsa" #: rabbitvcs/util/contextmenuitems.py:619 msgid "Browse to" msgstr "BÃļngÊszÊs" #: rabbitvcs/util/contextmenuitems.py:620 msgid "Browse to a file or folder" msgstr "FÃĄjl vagy dossziÊ bÃļngÊszÊse" #: rabbitvcs/util/contextmenuitems.py:625 msgid "Revert property" msgstr "TulajdonsÃĄg visszaÃĄllítÃĄsa" #: rabbitvcs/util/contextmenuitems.py:627 msgid "Revert this property to its original state" msgstr "Eredeti tulajdonsÃĄgok visszaÃĄllítÃĄsa" #: rabbitvcs/util/contextmenuitems.py:631 msgid "Revert property (recursive)" msgstr "TulajdonsÃĄgok visszaÃĄllítÃĄsa (rekurzívan)" #: rabbitvcs/util/contextmenuitems.py:633 msgid "Revert this property to its original state (recursive)" msgstr "Ezen tulajdonsÃĄg eredeti ÃĄllapotba valÃŗ visszaÃĄllítÃĄsa (rekurzívan)" #: rabbitvcs/util/contextmenuitems.py:638 msgid "Delete property" msgstr "TulajdonsÃĄg tÃļrlÊse" #: rabbitvcs/util/contextmenuitems.py:640 msgid "Delete this property" msgstr "Ezen tulajdonsÃĄg tÃļrlÊse" #: rabbitvcs/util/contextmenuitems.py:644 msgid "Delete property (recursive)" msgstr "TulajdonsÃĄg tÃļrlÊse (rekurzívan)" #: rabbitvcs/util/contextmenuitems.py:646 msgid "Delete this property (recursive)" msgstr "Ezen tulajdonsÃĄg tÃļrlÊse (rekurzívan)" #: rabbitvcs/util/contextmenuitems.py:651 msgid "Edit details" msgstr "RÊszletek szerkesztÊse" #: rabbitvcs/util/contextmenuitems.py:653 msgid "Show and edit property details" msgstr "RÊszletek megjelenítÊse Ês szerkesztÊse" #: rabbitvcs/util/contextmenuitems.py:667 msgid "Fetch/Pull" msgstr "Fetch/Pull" #: rabbitvcs/util/contextmenuitems.py:677 msgid "Branches" msgstr "Ágak" #: rabbitvcs/util/contextmenuitems.py:682 msgid "Tags" msgstr "CímkÊk" #: rabbitvcs/util/contextmenuitems.py:687 msgid "Remotes" msgstr "TÃĄvoli tÃĄrolÃŗk" #: rabbitvcs/util/contextmenuitems.py:711 msgid "Edit conflicts" msgstr "Konfliktusok szerkesztÊse" #: rabbitvcs/util/contextmenuitems.py:756 msgid "Ignore item by file extension" msgstr "MellőzÃļtt tÊtel fÃĄjl kiterjesztÊs szerint" #: rabbitvcs/util/helper.py:135 msgid "(no date)" msgstr "(nincs adat)" #: rabbitvcs/util/helper.py:139 msgid "just now" msgstr "Êpp most" #: rabbitvcs/util/helper.py:141 #, python-format msgid "%d minute(s) ago" msgstr "%d perce" #: rabbitvcs/util/helper.py:751 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i mp" msgstr[1] "%i mp" #: rabbitvcs/util/helper.py:754 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i perc" msgstr[1] "%i perc" #: rabbitvcs/util/helper.py:757 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i Ãŗra" msgstr[1] "%i Ãŗra" #: rabbitvcs/util/helper.py:760 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i nap" msgstr[1] "%i nap" #: rabbitvcs/util/helper.py:763 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i hÊt" msgstr[1] "%i hÊt" #: rabbitvcs/util/helper.py:766 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i hÃŗnap" msgstr[1] "%i hÃŗnap" #: rabbitvcs/util/helper.py:769 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i Êv" msgstr[1] "%i Êv" #: rabbitvcs/vcs/__init__.py:36 #, python-format msgid "" "The output from '%s' was not able to be processed.\n" "%s" msgstr "" "A(z) '%s' kimenetÊt nem sikerÃŧlt feldolgozni.\n" "%s" #: rabbitvcs/vcs/git/__init__.py:777 rabbitvcs/vcs/svn/__init__.py:1189 msgid "(no author)" msgstr "(nincs szerző)" #: rabbitvcs/vcs/git/__init__.py:922 rabbitvcs/vcs/svn/__init__.py:1703 msgid "Patched" msgstr "HibajavítÃĄsa kÊsz" #: rabbitvcs/vcs/git/__init__.py:926 rabbitvcs/vcs/svn/__init__.py:1707 msgid "Patch Failed" msgstr "HibajavítÃĄs nem sikerÃŧlt" #: rabbitvcs/vcs/git/__init__.py:931 rabbitvcs/vcs/svn/__init__.py:1715 msgid "Rejected Patch" msgstr "Elutasított hibajavítÃĄs" #: rabbitvcs/vcs/status.py:273 msgid "RabbitVCS status for" msgstr "RabbitVCS stÃĄtusz" #: rabbitvcs/vcs/svn/__init__.py:187 rabbitvcs/vcs/svn/__init__.py:196 #: rabbitvcs/vcs/svn/__init__.py:203 msgid "Added" msgstr "HozzÃĄadva" #: rabbitvcs/vcs/svn/__init__.py:188 msgid "Copied" msgstr "ÁtmÃĄsolva" #: rabbitvcs/vcs/svn/__init__.py:189 rabbitvcs/vcs/svn/__init__.py:195 #: rabbitvcs/vcs/svn/__init__.py:204 msgid "Deleted" msgstr "TÃļrÃļlve" #: rabbitvcs/vcs/svn/__init__.py:190 msgid "Restored" msgstr "HelyreÃĄllítva" #: rabbitvcs/vcs/svn/__init__.py:191 msgid "Reverted" msgstr "VisszaÃĄllítva" #: rabbitvcs/vcs/svn/__init__.py:192 msgid "Failed Revert" msgstr "VisszaÃĄllítÃĄs sikertelen" #: rabbitvcs/vcs/svn/__init__.py:193 msgid "Resolved" msgstr "Megoldva" #: rabbitvcs/vcs/svn/__init__.py:194 msgid "Skipped" msgstr "Kihagyva" #: rabbitvcs/vcs/svn/__init__.py:197 msgid "Updated" msgstr "Frissítve" #: rabbitvcs/vcs/svn/__init__.py:198 rabbitvcs/vcs/svn/__init__.py:200 msgid "Completed" msgstr "Befejezve" #: rabbitvcs/vcs/svn/__init__.py:199 rabbitvcs/vcs/svn/__init__.py:201 msgid "External" msgstr "KÃŧlső" #: rabbitvcs/vcs/svn/__init__.py:202 msgid "Modified" msgstr "MÃŗdosítva" #: rabbitvcs/vcs/svn/__init__.py:205 msgid "Replaced" msgstr "LecserÊlve" #: rabbitvcs/vcs/svn/__init__.py:206 rabbitvcs/vcs/svn/__init__.py:226 msgid "Changed" msgstr "MÃŗdosítva" #: rabbitvcs/vcs/svn/__init__.py:207 msgid "Annotated" msgstr "MegjegyzÊs hozzÃĄfÅązve" #: rabbitvcs/vcs/svn/__init__.py:209 msgid "Unlocked" msgstr "ZÃĄrolÃĄs feloldva" #: rabbitvcs/vcs/svn/__init__.py:210 msgid "Failed Lock" msgstr "ZÃĄrolÃĄs sikertelen" #: rabbitvcs/vcs/svn/__init__.py:211 msgid "Failed Unlock" msgstr "Sikertelen zÃĄrolÃĄs" #: rabbitvcs/vcs/svn/__init__.py:221 msgid "Inapplicable" msgstr "Nem alkalmazhatÃŗ" #: rabbitvcs/vcs/svn/__init__.py:223 msgid "Unchanged" msgstr "VÃĄltozatlan" #: rabbitvcs/vcs/svn/__init__.py:224 msgid "Missing" msgstr "HiÃĄnyzÃŗ" #: rabbitvcs/vcs/svn/__init__.py:225 msgid "Obstructed" msgstr "AkadÃĄlyba ÃŧtkÃļzik" #: rabbitvcs/vcs/svn/__init__.py:227 msgid "Merged" msgstr "Egyesítve" #: rabbitvcs/vcs/svn/__init__.py:228 msgid "Conflicted" msgstr "Konfliktusos" #~ msgid "Resolve" #~ msgstr "FeloldÃĄs" #~ msgid "Running Resolve Command..." #~ msgstr "FeloldÃĄs parancs fut..." #~ msgid "Completed Resolve" #~ msgstr "FeloldÃĄs befejezve" #~ msgid "English" #~ msgstr "angol" #~ msgid "Properties for:" #~ msgstr "TulajdonsÃĄgok ehhez:" #~ msgid "Selected properties will be applied recursively." #~ msgstr "KivÃĄlasztott tulajdonsÃĄgok rekurzívan lesznek hasznÃĄlva." #~ msgid "Delete properties recursively" #~ msgstr "Rekurzív tulajdonsÃĄgok tÃļrlÊse" #~ msgid "Edit..." #~ msgstr "SzerkesztÊs..." #~ msgid "New..." #~ msgstr "Új..." #~ msgid "URL/Path:" #~ msgstr "URL/Útvonal" #~ msgid "Load/Refresh" #~ msgstr "BetÃļltÊs/FrissítÊs" #~ msgid "URL:" #~ msgstr "URL:" #~ msgid "Add Message" #~ msgstr "Üzenet hozzÃĄadÃĄsa" #~ msgid "Certificate Details" #~ msgstr "TanÃēsítvÃĄny rÊszletei" #~ msgid "Edit Property Details" #~ msgstr "TulajdonsÃĄg rÊszleteinek szerkesztÊse" #~ msgid "Folder Name" #~ msgstr "DossziÊ neve" #~ msgid "Message" #~ msgstr "Üzenet" #~ msgid "Please add your authentication details" #~ msgstr "Adja meg az Ön azonosítÃŗit" #~ msgid "Please provide your ssl certification file" #~ msgstr "KÊrjÃŧk adja meg az Ön SSL igazolÃŗ fÃĄjljÃĄt" #~ msgid "Previous Messages" #~ msgstr "KorÃĄbbi Ãŧzenetek" #~ msgid "" #~ "Are you sure you want to delete %item%?" #~ msgstr "" #~ "Akarja tÃļrÃļlni a/z/ %item% tÊtelt?" #~ msgid "RabbitVCS Error" #~ msgstr "RabbitVCS Error" #~ msgid "Accept Forever" #~ msgstr "Mindig elfogad" #~ msgid "Accept Once" #~ msgstr "Egyszer elfogad" #~ msgid "Apply property recursively" #~ msgstr "TulajdonsÃĄg megadÃĄsa rekurzívan" #~ msgid "Authentication" #~ msgstr "HitelesítÊs" #~ msgid "Check Certificate" #~ msgstr "TanÃēsítvÃĄny ellenőrzÊse" #~ msgid "Confirmation" #~ msgstr "MegerősítÊs" #~ msgid "Create Folder..." #~ msgstr "DossziÊ kÊszítÊse..." #~ msgid "Delete Confirmation" #~ msgstr "MegerősítÊs tÃļrlÊse..." #~ msgid "Deny" #~ msgstr "Visszautasít" #~ msgid "Fingerprint:" #~ msgstr "Ujjlenyomat:" #~ msgid "Issuer:" #~ msgstr "KibocsÃĄjtÃŗ:" #~ msgid "Login:" #~ msgstr "FelhasznÃĄlÃŗ nÊv:" #~ msgid "Password:" #~ msgstr "JelszÃŗ:" #~ msgid "Path:" #~ msgstr "Útvonal:" #~ msgid "Previous Messages" #~ msgstr "Előző Ãŧzenet" #~ msgid "Property" #~ msgstr "TulajdonsÃĄg" #~ msgid "Property:" #~ msgstr "TulajdonsÃĄg:" #~ msgid "RabbitVCS Error" #~ msgstr "RabbitVCS hiba" #~ msgid "Realm:" #~ msgstr "Övezet:" #~ msgid "SSL Client Certification" #~ msgstr "SSL kliens igazolÃĄs" #~ msgid "Save Authentication" #~ msgstr "HitelesítÊs mentÊse" #~ msgid "Text Change" #~ msgstr "SzÃļveg vÃĄltozÃĄs" #~ msgid "The item(s) will be sent to the trash can." #~ msgstr "A tÊtel a kukÃĄba kerÃŧl." #~ msgid "Valid:" #~ msgstr "ÉrvÊnyesÊg:" #~ msgid "Value:" #~ msgstr "ÉrtÊk:" #~ msgid "Links" #~ msgstr "Link" #~ msgid "Version Information" #~ msgstr "VerziÃŗ informÃĄciÃŗ" #~ msgid "RabbitVCS" #~ msgstr "RabbitVCS" #~ msgid "Authors:" #~ msgstr "Szerzők:" #~ msgid "Thanks:" #~ msgstr "KÃļszÃļnet:" #~ msgid "VCS:" #~ msgstr "VCS:" #~ msgid "100" #~ msgstr "100" #~ msgid "Affected File(s) (double-click to compare with base)" #~ msgstr "" #~ "Érintett fÃĄjl/ok/ (kettős klikkantÃĄssal ÃļsszehasonlítÃĄs a bÃĄzissal)" #~ msgid "Revisions Table" #~ msgstr "RevíziÃŗs tÃĄbla" #~ msgid "Limit:" #~ msgstr "HatÃĄr:" #~ msgid "Log" #~ msgstr "NaplÃŗ" #~ msgid "Refresh" #~ msgstr "FrissítÊs" #~ msgid "Showing Revisions:" #~ msgstr "RevíziÃŗk mutatÃĄsa:" #~ msgid "Stop on copy" #~ msgstr "MÃĄsolÃĄs megÃĄllítÃĄsa" #~ msgid "" #~ "Cleanup Requested....\n" #~ "\n" #~ "Begin working copy cleanup?" #~ msgstr "" #~ "TisztítÃĄst igÊnyelt....\n" #~ "\n" #~ "Kezdődhet a munkapÊldÃĄny tisztítÃĄsa?" #~ msgid "Authentication" #~ msgstr "AzonosítÃĄs" #~ msgid "Log Messages" #~ msgstr "NaplÃŗ Ãŧzenetek" #~ msgid "Logging Options" #~ msgstr "NaplÃŗzÃĄsi beÃĄllítÃĄsok" #~ msgid "Memory usage: " #~ msgstr "MemÃŗria hasznÃĄlat:" #~ msgid "Program used to compare files" #~ msgstr "Program a fÃĄjlok ÃļsszehasonlítÃĄsÃĄhoz" #~ msgid "RabbitVCS" #~ msgstr "RabbitVCS" #~ msgid "URL History" #~ msgstr "URL előzmÊnyek" #~ msgid "Browse..." #~ msgstr "BÃļngÊszÊs..." #~ msgid "Clear your authentication information" #~ msgstr "Az Ön azonosítÃĄsi informÃĄciÃŗinak tÃļrlÊse" #~ msgid "Enable emblems" #~ msgstr "JelkÊpek engedÊlyezve" #~ msgid "Enable file attributes" #~ msgstr "FÃĄjl attributomok engedÊlyezve" #~ msgid "Enable recursive status checks" #~ msgstr "Rekurzív ÃĄllapotellenőrzÊs engedÊlyezve" #~ msgid "External Programs" #~ msgstr "KÃŧlső programok" #~ msgid "General" #~ msgstr "ÁltalÃĄnos" #~ msgid "Git" #~ msgstr "Git" #~ msgid "Language:" #~ msgstr "Nyelv:" #~ msgid "Logging" #~ msgstr "NaplÃŗzÃĄs" #~ msgid "Minimum level to log" #~ msgstr "MinimÃĄlis naplÃŗbejegyzÊs" #~ msgid "Number of URLs to remember" #~ msgstr "Megjegyzett URL-ek szÃĄma" #~ msgid "Number of messages to remember" #~ msgstr "Megjegyzett Ãŧzenetek szÃĄma" #~ msgid "Saved Data" #~ msgstr "Mentett adat" #~ msgid "Show RabbitVCS debugging tools" #~ msgstr "RabbitVCS nyomkÃļvető eszkÃļz mutatÃĄsa" #~ msgid "The debug menu is used to diagnose problems with RabbitVCS itself" #~ msgstr "A nyomkÃļvetÊs menÃŧ a problÊmÃĄk diagnÃŗzisÃĄra a RabbitVCS-t hasznÃĄlja" #~ msgid "Type:" #~ msgstr "Típus:" #~ msgid "Files to lock" #~ msgstr "ZÃĄrolt fÃĄjlok" #~ msgid "Please describe why you are locking these files" #~ msgstr "Írja le, miÊrt akarja zÃĄrolni ezeket a fÃĄjlokat?" #~ msgid "Lock Files" #~ msgstr "ZÃĄrolt fÃĄjlok" #~ msgid "Select / Deselect all" #~ msgstr "KivÃĄlasztÃĄs / Összes kivÃĄlasztÃĄs" #~ msgid "Steal the locks" #~ msgstr "ZÃĄrolÃĄsok ellopÃĄsa" #~ msgid "From Revision" #~ msgstr "RevíziÃŗtÃŗl" #~ msgid "To Revision" #~ msgstr "RevíziÃŗig" #~ msgid "Annotate" #~ msgstr "Jegyzet" #~ msgid "Changed Files (double-click to compare with base)" #~ msgstr "" #~ "VÃĄltozott fÃĄjlok (kettős klikkantÃĄssal ÃļsszehasonlítÃĄs a bÃĄzissal)" #~ msgid "Commit to:" #~ msgstr "BekÃŧldÊs" #~ msgid "Show unversioned files" #~ msgstr "VerziÃŗkezelÊsen kívÃŧli fÃĄjlok mutatÃĄsa" #~ msgid "Notification Messages" #~ msgstr "ÉrtesítÊs" #~ msgid "Remote URI:" #~ msgstr "TÃĄvoli URI:" #~ msgid "Working Copy:" #~ msgstr "MunkapÊldÃĄny:" #~ msgid "Add a new property." #~ msgstr "Egy Ãēj tulajdonsÃĄg hozzÃĄadÃĄsa" #~ msgid "Close this dialog." #~ msgstr "PÃĄrbeszÊd bezÃĄrÃĄsa." #~ msgid "Property Editor" #~ msgstr "TulajdonsÃĄg szerkesztő" #~ msgid "Refresh the list of properties." #~ msgstr "TulajdonsÃĄgok listÃĄjÃĄnak frissítÊse." #~ msgid "Change the repository of your working copy" #~ msgstr "TÃĄrolÃŗ cserÊje az Ön munkapÊldÃĄnyhoz" #~ msgid "From:" #~ msgstr "Innen:" #~ msgid "To:" #~ msgstr "Eddig:" #~ msgid "Options" #~ msgstr "OpciÃŗk" #~ msgid "Revision" #~ msgstr "RevíziÃŗ" #~ msgid "Omit Externals" #~ msgstr "KÃŧlső tÃĄrolÃŗk kihagyÃĄsa" #~ msgid "Recursive" #~ msgstr "Rekurzív" #~ msgid "Import Message" #~ msgstr "Import Ãŧzenet" #~ msgid "Repository" #~ msgstr "TÃĄrolÃŗ" #~ msgid "Include ignored files" #~ msgstr "MellőzÃļtt fÃĄjlokat tartalmaz" #~ msgid "From URL" #~ msgstr "Ettől az URL-től" #~ msgid "From: (URL and revision to merge)" #~ msgstr "Innen: (URL Ês revíziÃŗ egyesítve)" #~ msgid "Revision Range" #~ msgstr "RevíziÃŗs terÃŧlet" #~ msgid "To: (URL and revision to merge)" #~ msgstr "Eddig: (URL Ês revíziÃŗ egyesítve)" #~ msgid "URL to merge from" #~ msgstr "URL egyesítve innen" #~ msgid "Working Copy" #~ msgstr "MunkapÊldÃĄny" #~ msgid "" #~ "Choose this method if you have made some changes to a branch and wish to " #~ "merge your changes with another branch." #~ msgstr "" #~ "VÃĄlassza ezt a mÃŗdszert, ha Önnek sok vÃĄltozÃĄsa van a branchban Ês " #~ "egyesíteni kívÃĄnja a mÃŗdosítÃĄsokat egy mÃĄsik branchcsal." #~ msgid "" #~ "Choose this method if you wish to merge two different branches into your " #~ "working copy." #~ msgstr "" #~ "VÃĄlassza ezt a mÃŗdszert, ha kÊt kÃŧlÃļnbÃļző branchot kívÃĄn egyesíteni a " #~ "munkapÊldÃĄnyÃĄban." #~ msgid "Ignore ancestry" #~ msgstr "Eredet mellőzÊse" #~ msgid "Merge Assistant" #~ msgstr "EgyesítÊs segÊd" #~ msgid "Merge a range of revisions" #~ msgstr "Egy revíziÃŗs terÃŧlet egyesítÊse" #~ msgid "Merge two different trees" #~ msgstr "KÊt kÃŧlÃļnbÃļző fa egyesítÊse" #~ msgid "Only record the merge" #~ msgstr "Csak rÃļgzítÊse az egyesítÊsnek" #~ msgid "Show log" #~ msgstr "NaplÃŗ mutatÃĄsa" #~ msgid "Test Merge" #~ msgstr "EgyesítÊs teszt" #~ msgid "" #~ "Use the log dialog to select the revisions that you wish to merge. Or " #~ "write out the revisions manually, each separated by a comma. You can " #~ "specify a revision range by a dash. \n" #~ "\n" #~ "Example: 4-7,9,11,15-HEAD\n" #~ "\n" #~ "To merge all revisions, leave the box empty." #~ msgstr "" #~ "A kivÃĄlasztott revíziÃŗk egyesítÊsÊhez hasznÃĄlja a naplÃŗ bejegyzÊst vagy " #~ "írja ki a revíziÃŗkat kÊzzel azokat vesszővel elvÃĄlasztva. Egy tartomÃĄny " #~ "megadÃĄsÃĄhoz kÃļtőjelet hasznÃĄlhat.\n" #~ "\n" #~ "PÊldÃĄul: 4-7,9,11,15-HEAD\n" #~ "\n" #~ "Az Ãļsszes revíziÃŗ egyesítÊsÊhez hagyja Ãŧresen a szÃļvegdobozt." rabbitvcs-0.19/po/it.po000066400000000000000000001366241445560650400150410ustar00rootroot00000000000000# Italian translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-10-26 11:05+0000\n" "Last-Translator: timendum \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i secondo" msgstr[1] "%i secondi" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i minuto" msgstr[1] "%i minuti" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i ora" msgstr[1] "%i ore" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i giorno" msgstr[1] "%i giorni" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i settimana" msgstr[1] "%i settimane" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i mese" msgstr[1] "%i mesi" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i anno" msgstr[1] "%i anni" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "Debug" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "Bugs" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "Apri Shell" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "Aggiorna Stato" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "Debug Ripristino" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "Ripristina tutto ciÃ˛ che vedi" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "Invalida" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "Forza una chiamata a invalidate_extension_info()" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "Aggiungi icona" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "Aggiungi un'icona" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "Checkout..." #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "Preleva una Copia di Lavoro" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "Aggiorna" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "Aggiorna la Copia di Lavoro" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "Commit" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "Invia le modifiche al Repository" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "Sfoglia Repository" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "Sfoglia l'albero del repository" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "Controlla modifiche..." #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "Controlla modifiche fatte nel repository" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "Menu Differenze..." #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "Visualizza opzioni di confronto" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "Visualizza differenze con la base" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "Visualizza le modifiche fatte al file" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "Visualizza differenze tra file/cartelle" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "Visualizza differenze tra due file" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "Visualizza le differenze con la revisione precedente" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "Visualizza le modifiche fatte al file dall'ultimo cambiamento" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "Confronta con la base" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "Confronta con la base affiancando le finestre" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "Confronta file/cartelle" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "Confronta le differenze tra due oggetti" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "Compara con la versione precedente" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "Confronta con la revisione precedente affiancando le finestre" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "Visualizza modifiche..." #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "Visualizza modifiche tra percorsi e revisioni" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "Visualizza Log" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "Visualizza il file log" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Aggiungi" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "Schedula oggetti da aggiungere al repository" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "Aggiungi in ignora" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "Aggiorna alla revisione..." #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "Aggiorna il file alla specifica revisione" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "Rinonima..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "Schedula un oggetto da essere rinonimato nel repository" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "Cancella" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "Schedula un oggetto da essere cancellato dal repository" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "Ripristina" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "Ripristina gli oggetti nel loro stato non modificato" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "Risolvi" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "Segna un oggetto in conflitto come risolto" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "Ripristina" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "Ripristina oggetto mancante" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "Ricolloca..." #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "Ricolloca la tua copia di lavoro" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "Blocca..." #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "Blocca gli oggetti localmente" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "Sblocca..." #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "Sblocca l'oggetto" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Pulisci" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "Pulisci la copia di lavoro" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "Esporta..." #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" "Esporta la copia di lavoro o repository senza le informazioni di versione" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "Crea un Repository qua" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "Crea un Repositori in una cartella" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "Importa" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "Importa un oggetto in un repository" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "Branch/tag..." #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "Copia un oggetto in un altra parte del repository" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "Scambia..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "Cambia la locazione del repository della copia di lavoro" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "Merge..." #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "Procedura guidata per il merge" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "Annota..." #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "Annota un file" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "Crea Patch..." #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "Crea un file unico con le differenza di tutte le modifiche fatte" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "Applica Patch..." #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "Applica il file unico con le differenza alla copia di lavoro" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "Proprieta" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "Visualizza le proprieta di un oggetto" #: util/contextmenuitems.py:545 msgid "Help" msgstr "Aiuto" #: util/contextmenuitems.py:546 msgid "View help" msgstr "Visualizza aiuto" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "Opzioni" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "Visualizza o cambia le opzioni di RabbitVCS" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "Informazioni su" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "Informazioni su RabbitVCS" #: util/contextmenuitems.py:563 msgid "Open" msgstr "Apri" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "Apri un file" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "Sfoglia" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "Sfoglia file o cartella" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "Ripristina proprietà" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "Ripristina questa proprietà con il suo stato originale" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "Ripristina proprietà (ricorsivo)" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "Ripristina questa proprietà con il suo stato originale (ricorsivo)" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "Cancella proprietà" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "Cancella questa proprietà" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "Cancella questa proprietà (ricorsivo)" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "Ignora oggetto dal nome file" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "Ignora oggetto dall'estensione" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "Aggiornamento in corso..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "Aggiornamento completato" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "Aggiorna alla Revisione" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "Checkout" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "Checkout completato" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "Percorso" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "Estensione" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Caricamento..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "Trovati %d oggetti" #: ui/add.py:157 msgid "Running Add Command..." msgstr "Esecuzione del comando Aggiungi..." #: ui/add.py:159 msgid "Completed Add" msgstr "Aggiunta completata" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "Revisione:" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "Esporta - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "" "I campi URL e percorso di destinazione del repository sono entrambi " "obbligatori." #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Esporta" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "Esecuzione del comando di Esportazione..." #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "Esportazione Completata" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "Applica Patch" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "Applica Path Alla Cartella" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "Applica Patch al File..." #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "Patch al File Applicata" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "Data" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "Messaggio" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "Importa - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "Il campo URL del repository è obbligatorio." #: ui/import.py:81 msgid "Running Import Command..." msgstr "Esecuzione del comando di Importazione..." #: ui/import.py:89 msgid "Completed Import" msgstr "Importazione completata" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "Rinomina" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "Nuiovo Nome:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "Il campo nuovo nome è obbligatorio." #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "Esecuzione del comando Rinomina..." #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "Rinomina Completata" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "Stato Testo" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "Stato Proprieta" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "Esecuzione del comando Commit..." #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "Commit Completato" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "Status" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "Visualizza le differenze affiancate" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "Esecuzione del Merge Test..." #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "Test del Merge Completato" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "Esecuzione del comando Merge..." #: ui/merge.py:91 msgid "Completed Merge" msgstr "Merge Completato" #: ui/merge.py:102 msgid "Merge" msgstr "Merge" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" "Si è verificato un errore nell'estensione RabbitVCS Nautilus. Contatta il RabbitVCS team con i dettagli dell'errore specificati sotto:" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Seleziona una Cartella" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "a" #: ui/dialog.py:261 msgid "Select a File" msgstr "Seleziona un File" #: ui/dialog.py:280 msgid "Save As..." msgstr "Salva con nome..." #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "Sei sicuro di voler continuare ?" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "oggetti selezionati" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "Aggiungi una cartella al repository" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "Esecuzione del comando di Ripristino..." #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "Ripristino completato" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "I campi da e url sono entrambi obbligatori" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "Ricolloca" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "Esecuzione del comando di Ricollocamento" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "Ricollocamento Completato" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "Revisione" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "Autore" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "Visualizza differenze unite" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "Confronta affiancato" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "Esecuzione del comando Risolvi..." #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "Risoluzione Completata" #: ui/changes.py:49 msgid "More Actions..." msgstr "Altre azioni..." #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "Modifica" #: ui/changes.py:279 msgid "Property Change" msgstr "Cambia Proprietà" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Si" #: ui/changes.py:321 msgid "No" msgstr "No" #: ui/changes.py:410 msgid "Open from first revision" msgstr "Apri dalla prima revisione" #: ui/changes.py:415 msgid "Open from second revision" msgstr "Apri dalla seconda revisione" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "Non posso annotare una cartella" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "Annota - %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Linea" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Testo" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "Il campo da revisione deve essere un intero" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "Log - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "N/A" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "Azione" #: ui/log.py:338 msgid "Copy From Path" msgstr "Copia dal Percorso" #: ui/log.py:338 msgid "Copy From Revision" msgstr "Copia dalla Revisione" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "Visualizza le differenze con la copia di lavoro" #: ui/log.py:791 msgid "View diff between revisions" msgstr "Guarda differenze tra le versioni" #: ui/log.py:796 msgid "Compare with working copy" msgstr "Compara con la copia locale" #: ui/log.py:806 msgid "Compare revisions" msgstr "Confronta le revisioni" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "Visualizza le modifiche tra le revisioni" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "Modifica autore..." #: ui/log.py:837 msgid "Edit log message..." msgstr "Modifica messaggio di log..." #: ui/log.py:841 msgid "Edit revision properties..." msgstr "Modifica le proprietà della revisione..." #: ui/log.py:1047 msgid "Edit author" msgstr "Modifica autore" #: ui/log.py:1059 msgid "Edit log message" msgstr "Modifica messaggio di log" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "Sconosciuto" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "Inglese" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "Seleziona un programma" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "Sei sicuro di voler pulire i percorsi del tuo repository?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "Percorsi del repository puliti" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "Sei sicuro di voler cancellare i tuoi messaggi precedenti?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "Messaggi precedenti cancellati" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "" "Sei sicuro di voler cancellare le tue informazioni di autenticazione?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "Informazioni di autenticazione cancellate" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "Impossibile caricare le proprietà" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "Devi specificare un percorso di destinazione" #: ui/branch.py:115 msgid "Branch/tag" msgstr "Branch/tag" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "Esecuzione del comando Branch/tag..." #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "Branch/tag completato" #: ui/lock.py:73 msgid "Locked" msgstr "Bloccato" #: ui/lock.py:167 msgid "Get Lock" msgstr "Blocca" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "Esecuzione del comando Blocca..." #: ui/lock.py:177 msgid "Completed Lock" msgstr "Blocco Completato" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "La locazione del repository è un campo obbligatorio" #: ui/switch.py:80 msgid "Switch" msgstr "Scambia" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "Esecuzione del comando di Scambio..." #: ui/switch.py:89 msgid "Completed Switch" msgstr "Scambio completato" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "HEAD" #: ui/widget.py:860 msgid "Number" msgstr "Numero" #: ui/widget.py:861 msgid "Working Copy" msgstr "Copia lavoro" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "Host:" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "Checkout - %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "Esecuzione del comando Checkout..." #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "Nome" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "Crea Patch" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "Il percorso non è la copia di lavoro" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "Crea Patch File..." #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "Patch File Creato" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "Proprieta - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "Valore" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "Errore nel salvataggio delle proprietà" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" "Note: le modifiche alle proprietà sono applicate subito. Puoi " "rivedere o tornare indietro usando il menu contestuale per ogni elemento.\n" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" "Vuoi cancellare la proprietà selezionata da tutti i file e sotto-cartelle\n" "sotto questa cartella?" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "File senza controllo versione" #: ui/property_editor.py:112 msgid "Reserved" msgstr "Riservato" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "Impossibile inserire valore della proprietà" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "Tipo Mime" #: ui/action.py:338 msgid "Finished" msgstr "Finito" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - Finiti" #: ui/action.py:365 msgid "Log Message" msgstr "Messaggio di log" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "Sblocca" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "Esecuzione del comando Sblocca..." #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "Sblocco completato" #: ui/browser.py:89 msgid "Size" msgstr "Dimensione" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "Crea cartella" #: ui/browser.py:353 msgid "Copy to..." msgstr "Copia in..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "Copia l'URL nella clipboard" #: ui/browser.py:363 msgid "Move to..." msgstr "Sposta in..." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "Dove vuoi copiare la selezione?" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "Nuova Destinazione:" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "Dove vuoi muovere la selezione?" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "Pulizia in corso..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "Pulizia Completata" #: ui/create.py:46 msgid "Repository successfully created" msgstr "Repository creato con successo" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" "C'è stato un errore nella creazione del repository. Verifica che la cartella " "sia vuota." #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Proprieta per:" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "" "Le proprietà selezionate non possono essere applicate ricorsivamente." #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "Cancella le proprietà ricorsivamente" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "Modifica..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "Nuovo..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "URL/Path" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "Carica/Aggiorna" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "Aggiungi Messaggio" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "Dettagli del Certificato" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "Modifica Proprieta Dettagli" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "Nome Cartella" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "Messggio" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "Aggiungi i tuoi dettagli di autenticazione" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "File SSL di certificazione necessario" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "Messaggi Precedenti" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" "Sei sicuro di voler cancellare %item%?" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "Errore RabbitVCS" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "Accetta Sempre" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "Accetta una Volta" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "Applica le proprietà ricorsivamente" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "Autenticazione" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "Controlla Certificato" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "Conferma" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "Crea cartella..." #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "Cancella Conferma" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "Nega" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "Fingerprint:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "Emittente" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "Login:" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "Password:" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "Percorso:" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "Messaggi Precedenti" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "Proprieta" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "Proprieta:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "Errore RabbitVCS" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "Dominio:" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "SSL Client Certificatione" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "Salva Autenticazione" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "Testo Modificato" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "Gli oggetti verranno inviati al cestino." #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "Valido:" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "Valore:" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "Links" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "Informazioni della Versione" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Autori:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Grazie:" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "File Modificati (doppio click per confrontarli con la base)" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "Tabella Revisioni" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Limiti:" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "Log" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "Aggiorna" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "Revisioni:" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "Ferma su copia" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "Richiesta di pulizia....\n" "\n" "Iniziare una pulizia nella copia di lavoro?" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "Autenticazione" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "Messaggi del log" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "Opzioni di Log" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "Programma usato per confrontare i file" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "Cronologia URL" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "Sfoglia..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "Elimina i dati di autenticazione" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "Abilita icone" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "Abilita gli attributi dei file" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "Abilita il controllo ricorsivo degli stati" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "Programmi esterni" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "Generale" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "Lingua:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "Logging" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "Livello minimo per log" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "Numero di URL da ricordare" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "Numero di messaggi da ricordare" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "Dati salvati" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "Mostra gli strumenti di debugging di RabbitVCS" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "Il menu di debug è usato per diagnosticare problemi con RabbitVCS" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "Tipo:" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "File da bloccare" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "Descrivi perchè vuoi bloccare questi files" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "File Bloccati" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "Selezione / Deseleziona tutti" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "Ruba il bloccaggio" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "Dalla Revisione" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "Alla Revisione" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "Annota" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "File Modificati (doppio click per confrontarli con la base)" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "Commit a:" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "Visualizza i file non versionati" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Messaggi di Notifica" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "URI remota:" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "Copia di Lavoro:" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "Aggiungi una nuova proprietà." #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "Chiudi la finestra." #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "Modifica delle proprietà" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "Aggiorna la lista delle proprietà." #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "Cambia il repository della tua copia di lavoro" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "Da:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "A:" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "Opzioni" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "Revisione" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "Ometti esterni" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "Ricorsivo" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "Importa Messaggio" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "Repository" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "Includi file ignorati" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "Da URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "Da: (URL e revisione a merge)" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "Intervallo Revisioni" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "a: (URL e revisione a merge)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "URL sorgente da effettuare il Merge" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "Copia di Lavoro" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "Seleziona questo metodo se hai fatto qualche cambiamento al branch e vuoi " "effettuare un merge tra le tue modifiche e un altro branch." #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "Seleziona questo metodo se vuoi effettuare un merge tra due differenti " "branch nella tua copia di lavoro." #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "Ignora Antenati" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "Assistente al Merge" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "Effettua un Merge per un intervallo di revisioni" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "Effettua un merge di due differenti alberi" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "Registra solo il merge" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "Visualizza Log" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "Testa il Merge" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" "Usa la finestra del log per selezionare le revisioni su cui vuoi effettuare " "il merge. Oppure scrivi le revisioni manualmente, \n" "ognuna separata da una virgola. Pure specificare un intervallo con un " "trattino.\n" "\n" "Esempio: 4-7,9,11,15-HEAD\n" "\n" "Per eseguire il merge di tutte le revisioni, lascia il box vuoto." #~ msgid "Completed" #~ msgstr "Completato" #~ msgid "Create copy from" #~ msgstr "Crea copia da" #~ msgid "Program used to browse repositories" #~ msgstr "Programma usato per sfogliare i repository" #~ msgid "Destination:" #~ msgstr "Destinazione:" #~ msgid "Deleted" #~ msgstr "Cancellato" #~ msgid "Copied" #~ msgstr "Copiato" #~ msgid "Added" #~ msgstr "Aggiunto" #~ msgid "Restored" #~ msgstr "Ripristinato" #~ msgid "Resolved" #~ msgstr "Risolto" #~ msgid "Updated" #~ msgstr "Aggiornato" #~ msgid "External" #~ msgstr "Esterno" #~ msgid "Modified" #~ msgstr "Modificato" #~ msgid "Replaced" #~ msgstr "Sostituito" #~ msgid "Changed" #~ msgstr "Cambiato" #~ msgid "Skipped" #~ msgstr "Saltato" #~ msgid "Conflicted" #~ msgstr "Conflitto" #~ msgid "Unchanged" #~ msgstr "Invariato" #~ msgid "Missing" #~ msgstr "Mancante" #~ msgid "(no author)" #~ msgstr "(nessun autore)" #~ msgid "Show new version on the right side" #~ msgstr "Visualizza la nuova versione nel lato destro" #~ msgid "Update Depth" #~ msgstr "Aggiorna Profondita" #~ msgid "Failed Unlock" #~ msgstr "Sblocco fallito" #~ msgid "Failed Lock" #~ msgstr "Blocco fallito" #~ msgid "Inapplicable" #~ msgstr "Inapplicabile" #~ msgid "Annotated" #~ msgstr "Appuntato" #~ msgid "Unlocked" #~ msgstr "Sbloccato" #~ msgid "Switch Details" #~ msgstr "Dettagli Scambio" #~ msgid "Reverted" #~ msgstr "Ripristina..." #~ msgid "Failed Revert" #~ msgstr "Ripristino fallito" #~ msgid "Merged" #~ msgstr "Merged" #~ msgid "Obstructed" #~ msgstr "Bloccato" rabbitvcs-0.19/po/ja.po000066400000000000000000001313501445560650400150060ustar00rootroot00000000000000# Japanese translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-12-02 16:25+0000\n" "Last-Translator: yamafuji mitsugu \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i į§’" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i分" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i時間" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%iæ—Ĩ" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i週" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%iãƒļ月" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%iåš´" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "デバッグ" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "バグ" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "ã‚ˇã‚§ãƒĢを開く" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "įŠļ態を更新" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "į„ĄåŠšãĢする" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "invalidate_extension_info() å‘ŧãŗå‡ēしをåŧˇåˆļする" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "ã‚¨ãƒŗãƒ–ãƒŦムをčŋŊ加" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "ã‚¨ãƒŗãƒ–ãƒŦムをčŋŊ加" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "äŊœæĨ­ã‚ŗãƒ”ãƒŧをチェックã‚ĸã‚Ļト" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "更新" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "äŊœæĨ­ã‚ŗãƒ”ãƒŧを更新" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "ã‚ŗãƒŸãƒƒãƒˆ" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "ãƒŦポジトãƒĒã¸ãŽå¤‰æ›´ã‚’ã‚ŗãƒŸãƒƒãƒˆ" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "ãƒ•ã‚Ąã‚¤ãƒĢãĢ寞する変更をčĻ‹ã‚‹" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "ãƒ­ã‚°ã‚’čĄ¨į¤ē" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "ãƒ•ã‚Ąã‚¤ãƒĢãŽãƒ­ã‚°æƒ…å ąã‚’čĻ‹ã‚‹" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "čŋŊ加" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "į„ĄčĻ–ãƒĒ゚トãĢčŋŊ加" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "į‰šåŽšãŽãƒĒãƒ“ã‚¸ãƒ§ãƒŗã¸æ›´æ–°..." #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "į‰šåŽšãŽãƒĒãƒ“ã‚¸ãƒ§ãƒŗã¸æ›´æ–°..." #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "ãƒĒネãƒŧム..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "ãƒŦポジトãƒĒへぎã‚ĸイテムぎãƒĒネãƒŧムをäēˆåŽšã™ã‚‹" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "削除" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "ãƒŦポジトãƒĒへぎã‚ĸイテムぎ削除をäēˆåŽšã™ã‚‹" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "元ãĢæˆģす" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "æœĒ変更ぎįŠļ態ãĢæˆģす" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "č§Ŗæļˆ" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "įĢļ合するã‚ĸã‚¤ãƒ†ãƒ ã‚’č§Ŗæąē済ãŋãĢマãƒŧクする" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "垊元" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "再配įŊŽ..." #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "äŊœæĨ­ã‚ŗãƒ”ãƒŧを再配įŊŽ" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "ロックを取垗..." #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "ロãƒŧã‚ĢãƒĢでã‚ĸイテムをロック" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "ロックを開攞..." #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "ã‚ĸイテム上でロックを開攞" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "クãƒĒãƒŧãƒŗã‚ĸップ" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "äŊœæĨ­ã‚ŗãƒ”ãƒŧをクãƒĒãƒŧãƒŗã‚ĸップ" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "バãƒŧã‚¸ãƒ§ãƒŗæƒ…å ąį„Ąã—ã§īŧŒäŊœæĨ­ã‚ŗãƒ”ãƒŧぞたはãƒŦポジトãƒĒをエク゚ポãƒŧトする" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "ここãĢãƒŦポジトãƒĒをäŊœæˆ" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "フりãƒĢダ内ãĢãƒŦポジトãƒĒをäŊœæˆ" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "ã‚¤ãƒŗãƒãƒŧト" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "ãƒŦポジトãƒĒãĢã‚ĸã‚¤ãƒ†ãƒ ã‚’ã‚¤ãƒŗãƒãƒŧト" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "ãƒ–ãƒŠãƒŗãƒ/ã‚ŋグ..." #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "ãƒŦポジトãƒĒ内ぎåˆĨぎ場所ãĢã‚ĸã‚¤ãƒ†ãƒ ã‚’ã‚ŗãƒ”ãƒŧする" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "切りæ›ŋえ..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "äŊœæĨ­ã‚ŗãƒ”ãƒŧぎãƒŦポジトãƒĒぎ場所を変更する" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "マãƒŧジ..." #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "マãƒŧジã‚Ļã‚Ŗã‚ļãƒŧド" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "æŗ¨é‡ˆ..." #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "ãƒ•ã‚Ąã‚¤ãƒĢãĢæŗ¨é‡ˆ" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "åąžæ€§" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "ã‚ĸã‚¤ãƒ†ãƒ ãŽãƒ—ãƒ­ãƒ‘ãƒ†ã‚Ŗã‚’čĻ‹ã‚‹" #: util/contextmenuitems.py:545 msgid "Help" msgstr "ヘãƒĢプ" #: util/contextmenuitems.py:546 msgid "View help" msgstr "ヘãƒĢãƒ—ãŽé–˛čϧ" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "č¨­åŽš" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "RabbitVCSãŽč¨­åŽš" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "RabbitVCSãĢついãĻ" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "RabbitVCSãĢついãĻ" #: util/contextmenuitems.py:563 msgid "Open" msgstr "開く" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "å‚į…§" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "更新中..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "更新厌äē†" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "į‰šåŽšãŽãƒĒãƒ“ã‚¸ãƒ§ãƒŗã¸æ›´æ–°" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "チェックã‚ĸã‚Ļト" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "チェックã‚ĸã‚Ļト厌äē†" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "パ゚" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "æ‹Ąåŧĩ" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "ロãƒŧド中..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "%d個ぎã‚ĸイテムがčĻ‹ã¤ã‹ã‚Šãžã—ãŸ" #: ui/add.py:157 msgid "Running Add Command..." msgstr "čŋŊ加中..." #: ui/add.py:159 msgid "Completed Add" msgstr "čŋŊ加厌äē†" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "エク゚ポãƒŧト - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "ãƒŦポジトãƒĒぎURLとチェックã‚ĸã‚Ļãƒˆå…ˆãŽä¸Ąæ–šãŽå…Ĩ力がåŋ…čĻã§ã™īŧŽ" #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "エク゚ポãƒŧト" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "エク゚ポãƒŧト中..." #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "エク゚ポãƒŧト厌äē†" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "" #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "ãƒ–ãƒŠãƒŗãƒ čŠŗį´°" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "æ—Ĩäģ˜" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "ãƒĄãƒƒã‚ģãƒŧジ" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "ã‚¤ãƒŗãƒãƒŧト - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "ãƒŦポジトãƒĒURLをå…Ĩ力しãĻください" #: ui/import.py:81 msgid "Running Import Command..." msgstr "ã‚¤ãƒŗãƒãƒŧト中..." #: ui/import.py:89 msgid "Completed Import" msgstr "ã‚¤ãƒŗãƒãƒŧト厌äē†" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "ãƒĒネãƒŧム" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "新しい名前:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "新しい名前をå…Ĩ力しãĻください" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "ãƒĒネãƒŧãƒ ã‚’åŽŸčĄŒä¸­..." #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "ãƒĒネãƒŧムぎ厌äē†" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "テキ゚トぎįŠļ態" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "åąžæ€§ãŽįŠļ態" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "ã‚ŗãƒŸãƒƒãƒˆä¸­" #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "ã‚ŗãƒŸãƒƒãƒˆåŽŒäē†" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "įŠļ態" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "マãƒŧジテ゚ト中" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "マãƒŧジテ゚ト厌äē†" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "マãƒŧジ中" #: ui/merge.py:91 msgid "Completed Merge" msgstr "マãƒŧジ厌äē†" #: ui/merge.py:102 msgid "Merge" msgstr "マãƒŧジ" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "フりãƒĢダを選択" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "to" #: ui/dialog.py:261 msgid "Select a File" msgstr "ãƒ•ã‚Ąã‚¤ãƒĢを選択" #: ui/dialog.py:280 msgid "Save As..." msgstr "" #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "æœŦåŊ“ãĢįļšã‘ぞすか?" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "選択されたã‚ĸイテム" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "元ãĢæˆģしãĻいぞす" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "元ãĢæˆģしぞした" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "FROMãƒ•ã‚ŖãƒŧãƒĢドとURLãƒ•ã‚ŖãƒŧãƒĢãƒ‰ãŽä¸Ąæ–šãĢå…Ĩ力しãĻください" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "再配įŊŽ" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "再配įŊŽä¸­..." #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "再配įŊŽåތäē†" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "ãƒĒãƒ“ã‚¸ãƒ§ãƒŗ" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "äŊœč€…" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "č§Ŗæļˆä¸­..." #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "č§Ŗæļˆåތäē†" #: ui/changes.py:49 msgid "More Actions..." msgstr "" #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "" #: ui/changes.py:279 msgid "Property Change" msgstr "" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "はい" #: ui/changes.py:321 msgid "No" msgstr "" #: ui/changes.py:410 msgid "Open from first revision" msgstr "" #: ui/changes.py:415 msgid "Open from second revision" msgstr "" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "ãƒ‡ã‚ŖãƒŦクトãƒĒãĢæŗ¨é‡ˆã§ããžã›ã‚“" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "æŗ¨é‡ˆ - %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "行" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "テキ゚ト" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "元ãƒĒãƒ“ã‚¸ãƒ§ãƒŗį•Ēåˇã¯æ•´æ•°ã§ãĒければãĒりぞせん" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "ログ - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "N/A" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "ã‚ĸã‚¯ã‚ˇãƒ§ãƒŗ" #: ui/log.py:338 msgid "Copy From Path" msgstr "ãƒ‘ã‚šã‹ã‚‰ã‚ŗãƒ”ãƒŧ" #: ui/log.py:338 msgid "Copy From Revision" msgstr "ãƒĒãƒ“ã‚¸ãƒ§ãƒŗã‹ã‚‰ã‚ŗãƒ”ãƒŧ" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "" #: ui/log.py:791 msgid "View diff between revisions" msgstr "" #: ui/log.py:796 msgid "Compare with working copy" msgstr "" #: ui/log.py:806 msgid "Compare revisions" msgstr "" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "" #: ui/log.py:837 msgid "Edit log message..." msgstr "" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1047 msgid "Edit author" msgstr "" #: ui/log.py:1059 msgid "Edit log message" msgstr "" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "不明" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "英čĒž" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "プログナムを選択" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "æœŦåŊ“ãĢãƒŦポジトãƒĒぎパ゚をクãƒĒã‚ĸしぞすか?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "ãƒŦポジトãƒĒぎパ゚はクãƒĒã‚ĸされぞした" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "æœŦåŊ“ãĢãƒ­ã‚°ãƒĄãƒƒã‚ģãƒŧジを削除しぞすか?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "ãƒ­ã‚°ãƒĄãƒƒã‚ģãƒŧジは削除されぞした" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "æœŦåŊ“ãĢčĒč¨ŧæƒ…å ąã‚’å‰Šé™¤ã—ãžã™ã‹?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "čĒč¨ŧæƒ…å ąã¯å‰Šé™¤ã•ã‚Œãžã—ãŸ" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "é€ã‚Šå…ˆãƒ‘ã‚šã‚’č¨­åŽšã—ãĻくださいīŧŽ" #: ui/branch.py:115 msgid "Branch/tag" msgstr "ãƒ–ãƒŠãƒŗãƒ/ã‚ŋグ" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "ãƒ–ãƒŠãƒŗãƒ/ã‚ŋグ ã‚ŗãƒžãƒŗãƒ‰ã‚’åŽŸčĄŒä¸­..." #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "ãƒ–ãƒŠãƒŗãƒ/ã‚ŋグ ぎ厌äē†" #: ui/lock.py:73 msgid "Locked" msgstr "ロック" #: ui/lock.py:167 msgid "Get Lock" msgstr "ロックを取垗" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "ロック中..." #: ui/lock.py:177 msgid "Completed Lock" msgstr "ロック厌äē†" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "ãƒŦポジトãƒĒぎ場所をå…Ĩ力しãĻください" #: ui/switch.py:80 msgid "Switch" msgstr "切りæ›ŋえ" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "切りæ›ŋえ中..." #: ui/switch.py:89 msgid "Completed Switch" msgstr "切りæ›ŋえ厌äē†" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "最新" #: ui/widget.py:860 msgid "Number" msgstr "" #: ui/widget.py:861 msgid "Working Copy" msgstr "" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "ポト:" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "チェックã‚ĸã‚Ļト - %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "チェックã‚ĸã‚Ļト中..." #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "名前" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "与えられたパ゚はワãƒŧã‚­ãƒŗã‚°ã‚ŗãƒ”ãƒŧではありぞせん" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "äŋŽæ­Ŗã‚’äŊœæˆåތäē†" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "ãƒ—ãƒ­ãƒ‘ãƒ†ã‚Ŗ - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "値" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:112 msgid "Reserved" msgstr "" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "Mimeã‚ŋイプ" #: ui/action.py:338 msgid "Finished" msgstr "厌äē†" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - 厌äē†" #: ui/action.py:365 msgid "Log Message" msgstr "" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "ãƒ­ãƒƒã‚¯č§Ŗé™¤" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "ãƒ­ãƒƒã‚¯č§Ŗé™¤ä¸­" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "ãƒ­ãƒƒã‚¯č§Ŗé™¤åŽŒäē†" #: ui/browser.py:89 msgid "Size" msgstr "" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "" #: ui/browser.py:353 msgid "Copy to..." msgstr "" #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "" #: ui/browser.py:363 msgid "Move to..." msgstr "" #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "クãƒĒãƒŧãƒŗã‚ĸップ中..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "クãƒĒãƒŧãƒŗã‚ĸップ厌äē†" #: ui/create.py:46 msgid "Repository successfully created" msgstr "ãƒŦポジトãƒĒぎäŊœæˆãĢ成功しぞした" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "ãƒĒポジトãƒĒäŊœæˆä¸­ãĢエナãƒŧがį™ēį”Ÿã—ãžã—ãŸīŧŽãƒ•りãƒĢダがįŠēであるかįĸēčĒã—ãĻくださいīŧŽ" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "åąžæ€§:" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "" #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "ᎍ集..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "新čĻ..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "URL/パ゚:" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "ãƒĄãƒƒã‚ģãƒŧジぎčŋŊ加" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "č¨ŧæ˜Žæ›¸ãŽčŠŗį´°" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "ãƒ—ãƒ­ãƒ‘ãƒ†ã‚ŖãŽčŠŗį´°ã‚’įˇ¨é›†" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "ãƒĄãƒƒã‚ģãƒŧジ" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "čĒč¨ŧãŽčŠŗį´°ã‚’čŋŊ加しãĻください" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "äģĨå‰ãŽãƒĄãƒƒã‚ģãƒŧジ" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "æœŦåŊ“ãĢ%iつぎã‚ĸイテムを削除しぞすか%?" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "äģŠåžŒå—けå…Ĩれる" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "一åēĻだけ受けå…Ĩれる" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "čĒč¨ŧ" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "č¨ŧ明書をチェックする" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "įĸēčĒ" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "" #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "削除ぎįĸēčĒ" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "拒åĻ" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "ãƒ•ã‚Ŗãƒŗã‚ŦãƒŧプãƒĒãƒŗãƒˆ:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "į™ē行者:" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "ãƒ­ã‚°ã‚¤ãƒŗ:" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "パ゚ワãƒŧド:" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "äģĨå‰ãŽãƒĄãƒƒã‚ģãƒŧジ" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "åąžæ€§" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "åąžæ€§:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "領域:" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "čĒč¨ŧをäŋå­˜ã™ã‚‹" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "そぎ(それらぎ)ã‚ĸã‚¤ãƒ†ãƒ ã¯ã‚´ãƒŸįŽąã¸é€ã‚‰ã‚Œãžã™" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "有劚:" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "値:" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "é–ĸ逪ãƒĒãƒŗã‚¯" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "バãƒŧã‚¸ãƒ§ãƒŗæƒ…å ą" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "著者:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "čŦčžž:" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "ãƒĒãƒ“ã‚¸ãƒ§ãƒŗä¸€čϧ" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "期限:" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "ログ" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "更新" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "襨į¤ēしãĻいるãƒĒãƒ“ã‚¸ãƒ§ãƒŗ:" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "ã‚ŗãƒ”ãƒŧがį™ēį”Ÿã—ãŸã‚‰åœæ­ĸ" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "クãƒĒãƒŧãƒŗã‚ĸップがčĻæą‚ã•ã‚Œãžã—ãŸ....\n" "\n" "äŊœæĨ­ã‚ŗãƒ”ãƒŧをクãƒĒãƒŧãƒŗã‚ĸップしぞすか?" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "čĒč¨ŧ" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "ãƒ­ã‚°ãƒĄãƒƒã‚ģãƒŧジ" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "ログã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "ãƒ•ã‚Ąã‚¤ãƒĢぎ比čŧƒãĢäŊŋį”¨ã™ã‚‹ãƒ—ãƒ­ã‚°ãƒŠãƒ " #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "URLåąĨæ­´" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "閲čϧ..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "čĒč¨ŧåąĨ歴を削除" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "ã‚¨ãƒŗãƒ–ãƒŦムを有劚ãĢする" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "ãƒ•ã‚Ąã‚¤ãƒĢåąžæ€§ã‚’æœ‰åŠšãĢする" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "å†å¸°įš„ãĒįŠļ態チェックを有劚ãĢする" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "外部プログナム" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "一čˆŦ" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "言čĒž:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "ログ" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "æŦĄãŽãƒŦベãƒĢäģĨä¸Šã‚’č¨˜éŒ˛ã™ã‚‹" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "č¨˜éŒ˛ã™ã‚‹URLぎ数" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "č¨˜éŒ˛ã™ã‚‹ãƒĄãƒƒã‚ģãƒŧジぎ数" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "デãƒŧã‚ŋぎäŋå­˜" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "į¨ŽéĄž:" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "ãƒ­ãƒƒã‚¯ã™ãƒ•ã‚Ąã‚¤ãƒĢ" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "ãƒ•ã‚Ąã‚¤ãƒĢã‚’ãƒ­ãƒƒã‚¯ã™ã‚‹į†į”ąã‚’å…Ĩ力しãĻください" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "ãƒ­ãƒƒã‚¯ã™ã‚‹ãƒ•ã‚Ąã‚¤ãƒĢ" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "全ãĻ選択īŧå…¨ãĻ非選択" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "ロックをæ¨Ē取りする" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "元ãƒĒãƒ“ã‚¸ãƒ§ãƒŗ" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "先ãƒĒãƒ“ã‚¸ãƒ§ãƒŗ" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "æŗ¨é‡ˆ" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "ã‚ŗãƒŸãƒƒãƒˆå…ˆ:" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "バãƒŧã‚¸ãƒ§ãƒŗįŽĄį†å¤–ãŽãƒ•ã‚Ąã‚¤ãƒĢã‚’čĄ¨į¤ēする" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "通įŸĨãƒĄãƒƒã‚ģãƒŧジ" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "äŊœæĨ­ã‚ŗãƒ”ãƒŧぎãƒŦポジトãƒĒを変更する" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "元:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "先:" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "ã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "ãƒĒãƒ“ã‚¸ãƒ§ãƒŗ" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "å¤–éƒ¨å‚į…§ã‚’é™¤å¤–ã™ã‚‹" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "å†å¸°įš„" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "ãƒĄãƒƒã‚ģãƒŧã‚¸ã‚’ã‚¤ãƒŗãƒãƒŧトする" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "ãƒŦポジトãƒĒ" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "é™¤å¤–ãƒ•ã‚Ąã‚¤ãƒĢをåĢめる" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "元URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "元: (マãƒŧジするURLとãƒĒãƒ“ã‚¸ãƒ§ãƒŗ)" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "ãƒĒãƒ“ã‚¸ãƒ§ãƒŗãŽį¯„å›˛" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "先: (マãƒŧジするURLとãƒĒãƒ“ã‚¸ãƒ§ãƒŗ)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "マãƒŧジ元ぎURL" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "äŊœæĨ­ã‚ŗãƒ”ãƒŧ" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "ãƒ–ãƒŠãƒŗãƒãĢ変更を加えīŧŒãã‚Œã‚’åˆĨãŽãƒ–ãƒŠãƒŗãƒãĢ変更をマãƒŧジする場合īŧŒã“ãŽãƒĄã‚Ŋッドを選択しãĻくださいīŧŽ" #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "2ã¤ãŽį•°ãĒã‚‹ãƒ–ãƒŠãƒŗãƒã‚’äŊœæĨ­ã‚ŗãƒ”ãƒŧãĢマãƒŧジする場合īŧŒã“ãŽãƒĄã‚Ŋッドを選択しãĻくださいīŧŽ" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "įŗģįĩ࿃…å ąã‚’į„ĄčĻ–ã™ã‚‹" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "マãƒŧジã‚ĸã‚ˇã‚šã‚ŋãƒŗãƒˆ" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "ãƒĒãƒ“ã‚¸ãƒ§ãƒŗãŽį¯„å›˛ã‚’ãƒžãƒŧジ" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "į•°ãĒる2つぎツãƒĒãƒŧをマãƒŧジ" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "マãƒŧジぎãŋč¨˜éŒ˛ã™ã‚‹" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "ãƒ­ã‚°ã‚’čĄ¨į¤ē" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "マãƒŧジをテ゚トする" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" "マãƒŧジしたいãƒĒãƒ“ã‚¸ãƒ§ãƒŗãŽé¸æŠžãĢログダイã‚ĸãƒ­ã‚°ã‚’åˆŠį”¨ã™ã‚‹īŧŒã‚‚しくはīŧŒãƒžãƒŧジするãƒĒãƒ“ã‚¸ãƒ§ãƒŗã‚’ã‚ŗãƒŗãƒžã§åŒēåˆ‡ãŖãĻå…Ĩ力しãĻくださいīŧŽãƒĒãƒ“ã‚¸ãƒ§ãƒŗãŽį¯„å›˛ã¯ãƒã‚¤ãƒ•ãƒŗã§æŒ‡åŽš" "することができぞすīŧŽ\n" "\n" "例: 4-7,9,11,15-HEAD\n" "\n" "すずãĻぎãƒĒãƒ“ã‚¸ãƒ§ãƒŗã‚’ãƒžãƒŧジするãĢはīŧŒå…Ĩ力ボック゚をįŠēぎぞぞãĢしãĻくださいīŧŽ" #~ msgid "Completed" #~ msgstr "厌äē†" #~ msgid "(no author)" #~ msgstr "(äŊœč€…ãĒし)" #~ msgid "Switch Details" #~ msgstr "čŠŗį´°ãŽåˆ‡ã‚Šæ›ŋえ" #~ msgid "Create copy from" #~ msgstr "æŦĄãŽå ´æ‰€ã‹ã‚‰ã‚ŗãƒ”ãƒŧ" #~ msgid "Program used to browse repositories" #~ msgstr "ãƒŦポジトãƒĒãŽé–˛čϧãĢäŊŋį”¨ã™ã‚‹ãƒ—ãƒ­ã‚°ãƒŠãƒ " #~ msgid "Show new version on the right side" #~ msgstr "新しいバãƒŧã‚¸ãƒ§ãƒŗã‚’åŗå´ãĢ襨į¤ēする" #~ msgid "Destination:" #~ msgstr "送り先:" #~ msgid "Update Depth" #~ msgstr "更新" #~ msgid "Added" #~ msgstr "čŋŊ加" #~ msgid "Copied" #~ msgstr "ã‚ŗãƒ”ãƒŧ" #~ msgid "Deleted" #~ msgstr "削除" #~ msgid "Restored" #~ msgstr "垊元" #~ msgid "Reverted" #~ msgstr "元ãĢæˆģす" #~ msgid "Failed Revert" #~ msgstr "元ãĢæˆģせぞせんでした" #~ msgid "Resolved" #~ msgstr "č§Ŗæļˆ" #~ msgid "Skipped" #~ msgstr "゚キップ" #~ msgid "Updated" #~ msgstr "更新" #~ msgid "External" #~ msgstr "外部" #~ msgid "Modified" #~ msgstr "変更" #~ msgid "Replaced" #~ msgstr "įŊŽæ›" #~ msgid "Changed" #~ msgstr "変更" #~ msgid "Annotated" #~ msgstr "æŗ¨é‡ˆ" #~ msgid "Unlocked" #~ msgstr "ãƒ­ãƒƒã‚¯č§Ŗé™¤" #~ msgid "Failed Lock" #~ msgstr "ãƒ­ãƒƒã‚¯å¤ąæ•—" #~ msgid "Failed Unlock" #~ msgstr "ãƒ­ãƒƒã‚¯č§Ŗé™¤å¤ąæ•—" #~ msgid "Inapplicable" #~ msgstr "éŠį”¨ä¸å¯" #~ msgid "Unchanged" #~ msgstr "å¤‰æ›´į„Ą" #~ msgid "Missing" #~ msgstr "į´›å¤ą" #~ msgid "Obstructed" #~ msgstr "åĻ¨åŽŗ" #~ msgid "Merged" #~ msgstr "マãƒŧジ" #~ msgid "Conflicted" #~ msgstr "įĢļ合" rabbitvcs-0.19/po/ko.po000066400000000000000000001547021445560650400150330ustar00rootroot00000000000000# Korean translations for PACKAGE package. # Copyright (C) 2021 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Kevin Kim , 2021. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs 0.18\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-06-14 01:58+0200\n" "PO-Revision-Date: 2021-05-25 16:12+0900\n" "Last-Translator: Kevin Kim \n" "Language-Team: Korean\n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 2.3\n" #: util/helper.py:74 msgid "%I:%M%P" msgstr "" #: util/helper.py:75 msgid "%a %I:%M%p" msgstr "" #: util/helper.py:76 msgid "%b %d" msgstr "" #: util/helper.py:77 msgid "%b %d %Y" msgstr "" #: util/helper.py:199 msgid "(no date)" msgstr "(ë‚ ė§œ ė—†ėŒ)" #: util/helper.py:203 msgid "just now" msgstr "밊금" #: util/helper.py:205 #, python-format msgid "%d minute(s) ago" msgstr "%d ëļ„ ė „" #: util/helper.py:813 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i 봈" #: util/helper.py:816 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i ëļ„" #: util/helper.py:819 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i ė‹œę°„" #: util/helper.py:822 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i ėŧ" #: util/helper.py:825 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i ėŖŧ" #: util/helper.py:828 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i ę°œė›”" #: util/helper.py:831 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i 년" #: util/contextmenuitems.py:321 msgid "Debug" msgstr "디버그" #: util/contextmenuitems.py:326 msgid "Bugs" msgstr "버그" #: util/contextmenuitems.py:331 msgid "Open Python Console" msgstr "íŒŒė´ėŦ ėŊ˜ė†” 뗴揰" #: util/contextmenuitems.py:337 msgid "Refresh Status" msgstr "ėƒíƒœ ėƒˆëĄœ ęŗ ėš¨" #: util/contextmenuitems.py:342 msgid "Debug Revert" msgstr "디버그 되돌ëĻŦ기" #: util/contextmenuitems.py:343 msgid "Reverts everything it sees" msgstr "ëŗ´ė´ëŠ” ëĒ¨ë“  ę˛ƒė„ 되돌ëĻŊ니다(Revert)" #: util/contextmenuitems.py:349 msgid "Invalidate" msgstr "ëŦ´íš¨í™”" #: util/contextmenuitems.py:350 msgid "Force an invalidate_extension_info() call" msgstr "ę°•ė œëĄœ invalidate_extension_info() 호ėļœ" #: util/contextmenuitems.py:356 msgid "Add Emblem" msgstr "ė— ë¸”ëŸŧ ėļ”ę°€" #: util/contextmenuitems.py:357 msgid "Add an emblem" msgstr "ė— ë¸”ëŸŧ ėļ”ę°€" #: util/contextmenuitems.py:363 msgid "Checkout..." msgstr "랴íŦė•„ė›ƒ(Checkout)..." #: util/contextmenuitems.py:364 msgid "Check out a working copy" msgstr "ėž‘ė—…ëŗ¸(working copy) 랴íŦė•„ė›ƒ(Checkout)" #: util/contextmenuitems.py:369 ui/update.py:59 ui/update.py:108 #: ui/xml/update.xml.h:1 msgid "Update" msgstr "ė—…ë°ė´íŠ¸(Update)" #: util/contextmenuitems.py:370 msgid "Update a working copy" msgstr "ėž‘ė—…ëŗ¸(working copy) ė—…ë°ė´íŠ¸(Update)" #: util/contextmenuitems.py:375 ui/commit.py:320 ui/commit.py:388 #: ui/xml/commit.xml.h:1 msgid "Commit" msgstr "ėģ¤ë°‹(Commit)" #: util/contextmenuitems.py:376 msgid "Commit modifications to the repository" msgstr "ė €ėžĨė†Œė— 대한 ėˆ˜ė • ė‚Ŧ항 ėģ¤ë°‹" #: util/contextmenuitems.py:381 ui/xml/property_page.xml.h:5 msgid "RabbitVCS" msgstr "" #: util/contextmenuitems.py:386 msgid "RabbitVCS SVN" msgstr "SVN ė €ėžĨė†Œ" #: util/contextmenuitems.py:391 msgid "RabbitVCS Git" msgstr "Git ė €ėžĨė†Œ" #: util/contextmenuitems.py:396 msgid "RabbitVCS Hg" msgstr "Hg ė €ėžĨė†Œ" #: util/contextmenuitems.py:401 ui/xml/browser.xml.h:1 msgid "Repository Browser" msgstr "ė €ėžĨė†Œ 브ëŧėš°ė €" #: util/contextmenuitems.py:402 msgid "Browse a repository tree" msgstr "ė €ėžĨė†Œ 트ëĻŦ ė°žė•„ëŗ´ę¸°" #: util/contextmenuitems.py:407 msgid "Check for Modifications..." msgstr "ėˆ˜ė • ė‚Ŧ항 í™•ė¸ ..." #: util/contextmenuitems.py:408 msgid "Check for modifications made to the repository" msgstr "ė €ėžĨė†Œ ėˆ˜ė • ė‚Ŧ항 í™•ė¸" #: util/contextmenuitems.py:413 msgid "Diff Menu..." msgstr "Diff 메뉴 ..." #: util/contextmenuitems.py:414 msgid "List of comparison options" msgstr "비ęĩ ė˜ĩė…˜ ëĒŠëĄ" #: util/contextmenuitems.py:419 msgid "View diff against base" msgstr "ë˛ ė´ėŠ¤ė™€ ė°¨ė´ė  ëŗ´ę¸°" #: util/contextmenuitems.py:420 msgid "View the modifications made to a file" msgstr "파ėŧ ėˆ˜ė • ė‚Ŧí•­ëŗ´ę¸°" #: util/contextmenuitems.py:425 msgid "View diff between files/folders" msgstr "파ėŧ/폴더 간 ė°¨ė´ė  ëŗ´ę¸°" #: util/contextmenuitems.py:426 msgid "View the differences between two files" msgstr "두 파ėŧė˜ ė°¨ė´ė  ëŗ´ę¸°" #: util/contextmenuitems.py:431 ui/annotate.py:593 ui/log.py:1004 msgid "View diff against previous revision" msgstr "ė´ė „ ë˛„ė „ęŗŧ ė°¨ė´ė  ëŗ´ę¸°" #: util/contextmenuitems.py:432 msgid "View the modifications made to a file since its last change" msgstr "ë§ˆė§€ë§‰ ëŗ€ę˛Ŋ ė´í›„ 파ėŧ뗐 대한 ėˆ˜ė • ė‚Ŧí•­ëŗ´ę¸°" #: util/contextmenuitems.py:437 msgid "Compare with base" msgstr "ë˛ ė´ėŠ¤ė™€ 비ęĩ" #: util/contextmenuitems.py:438 msgid "Compare with base using side-by-side comparison tool" msgstr "나란히 비ęĩ 도ęĩŦëĨŧ ė‚ŦėšŠí•˜ė—Ŧ ę¸°ëŗ¸ęŗŧ 비ęĩ" #: util/contextmenuitems.py:443 msgid "Compare files/folders" msgstr "파ėŧ/폴더 비ęĩ" #: util/contextmenuitems.py:444 msgid "Compare the differences between two items" msgstr "두 항ëĒŠė˜ ė°¨ė´ė  비ęĩ" #: util/contextmenuitems.py:449 ui/log.py:1019 msgid "Compare with previous revision" msgstr "ė´ė „ ë˛„ė „ęŗŧ 비ęĩ" #: util/contextmenuitems.py:450 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "ëŗ‘ë Ŧ 비ęĩ 도ęĩŦëĨŧ ė‚ŦėšŠí•˜ė—Ŧ ė´ė „ ë˛„ė „ęŗŧ 비ęĩ" #: util/contextmenuitems.py:455 msgid "Show Changes..." msgstr "ëŗ€ę˛Ŋ ė‚Ŧ항 í‘œė‹œ ..." #: util/contextmenuitems.py:456 msgid "Show changes between paths and revisions" msgstr "ę˛ŊëĄœė™€ ėˆ˜ė •ëŗ¸ ę°„ė˜ ëŗ€ę˛Ŋ ė‚Ŧ항 í‘œė‹œ" #: util/contextmenuitems.py:461 msgid "Show Log" msgstr "로그 í‘œė‹œ" #: util/contextmenuitems.py:462 msgid "Show a file's log information" msgstr "파ėŧė˜ 로그 ė •ëŗ´ í‘œė‹œ" #: util/contextmenuitems.py:467 ui/widget.py:1528 ui/add.py:222 ui/add.py:247 #: ui/xml/add.xml.h:1 ui/tags.py:291 msgid "Add" msgstr "ėļ”ę°€" #: util/contextmenuitems.py:468 msgid "Schedule items to be added to the repository" msgstr "ė €ėžĨė†Œė— ėļ”ę°€ 할 항ëĒŠ 똈ė•Ŋ" #: util/contextmenuitems.py:473 msgid "Add to ignore list" msgstr "ëŦ´ė‹œ ëĒŠëĄė— ėļ”ę°€" #: util/contextmenuitems.py:478 msgid "Update to revision..." msgstr "ë˛„ė „ė´ë Ĩ ė—…ë°ė´íŠ¸ ..." #: util/contextmenuitems.py:479 msgid "Update a file to a specific revision" msgstr "íŠšė • ë˛„ė „ėœŧ로 파ėŧ ė—…ë°ė´íŠ¸" #: util/contextmenuitems.py:484 msgid "Rename..." msgstr "ė´ëĻ„ ëŗ€ę˛Ŋ ..." #: util/contextmenuitems.py:485 msgid "Schedule an item to be renamed on the repository" msgstr "ė €ėžĨė†Œė—ė„œ ė´ëĻ„ė„ 바ęŋ€ 항ëĒŠ 똈ė•Ŋ" #: util/contextmenuitems.py:490 msgid "Delete" msgstr "ė‚­ė œ" #: util/contextmenuitems.py:491 msgid "Schedule an item to be deleted from the repository" msgstr "ė €ėžĨė†Œė—ė„œ ė‚­ė œí•  항ëĒŠ 똈ė•Ŋ" #: util/contextmenuitems.py:496 ui/xml/revert.xml.h:1 ui/revert.py:169 #: ui/revert.py:195 msgid "Revert" msgstr "되돌ëĻŦ기" #: util/contextmenuitems.py:497 msgid "Revert an item to its unmodified state" msgstr "항ëĒŠė„ ėˆ˜ė •ë˜ė§€ ė•Šė€ ėƒíƒœëĄœ 되돌ëĻŦ기" #: util/contextmenuitems.py:502 ui/markresolved.py:49 ui/markresolved.py:83 msgid "Mark as Resolved" msgstr "해결됨ėœŧ로 í‘œė‹œ" #: util/contextmenuitems.py:503 msgid "Mark a conflicted item as resolved" msgstr "ėļŠëŒ 항ëĒŠė„ 해결됨ėœŧ로 í‘œė‹œ" #: util/contextmenuitems.py:508 msgid "Restore" msgstr "ëŗĩ뛐" #: util/contextmenuitems.py:509 msgid "Restore a missing item" msgstr "누ëŊ 된 항ëĒŠ ëŗĩ뛐" #: util/contextmenuitems.py:513 msgid "Relocate..." msgstr "ėœ„ėš˜ ëŗ€ę˛Ŋ..." #: util/contextmenuitems.py:514 msgid "Relocate your working copy" msgstr "ėž‘ė—…ëŗ¸(working copy) ėœ„ėš˜ ëŗ€ę˛Ŋ" #: util/contextmenuitems.py:519 msgid "Get Lock..." msgstr "ėž ę¸ˆ 氀렏 똤揰 ..." #: util/contextmenuitems.py:520 msgid "Locally lock items" msgstr "로ėģŦ로 항ëĒŠ ėž ę¸ˆ" #: util/contextmenuitems.py:525 msgid "Release Lock..." msgstr "ėž ę¸ˆ í•´ė œ ..." #: util/contextmenuitems.py:526 msgid "Release lock on an item" msgstr "항ëĒŠ ėž ę¸ˆ í•´ė œ" #: util/contextmenuitems.py:531 ui/cleanup.py:60 msgid "Cleanup" msgstr "ëš„ėš°ę¸°(Cleanup)" #: util/contextmenuitems.py:532 msgid "Clean up working copy" msgstr "ėž‘ė—…ëŗ¸(working copy) ëš„ėš°ę¸°(Cleanup)" #: util/contextmenuitems.py:537 msgid "Export..." msgstr "ë‚´ëŗ´ë‚´ę¸°..." #: util/contextmenuitems.py:538 msgid "Export a working copy or repository with no versioning information" msgstr "ë˛„ė „ ė •ëŗ´ė—†ė´ ėž‘ė—…ëŗ¸(working copy) 또는 ė €ėžĨė†Œ ë‚´ëŗ´ë‚´ę¸°" #: util/contextmenuitems.py:551 msgid "Create Repository here" msgstr "ė—Ŧ揰뗐 ė €ėžĨė†Œ 만들기" #: util/contextmenuitems.py:552 msgid "Create a repository in a folder" msgstr "í´ë”ė— ė €ėžĨė†Œ 만들기" #: util/contextmenuitems.py:557 ui/xml/import.xml.h:1 ui/import.py:79 msgid "Import" msgstr "ę°€ė ¸ė˜¤ę¸°" #: util/contextmenuitems.py:558 msgid "Import an item into a repository" msgstr "항ëĒŠė„ ė €ėžĨė†ŒëĄœ 氀렏 똤揰" #: util/contextmenuitems.py:567 msgid "Branch/tag..." msgstr "ë¸Œëžœėš˜/태그 ..." #: util/contextmenuitems.py:568 msgid "Copy an item to another location in the repository" msgstr "항ëĒŠė„ ė €ėžĨė†Œė˜ 다ëĨ¸ ėœ„ėš˜ëĄœ ëŗĩė‚Ŧ" #: util/contextmenuitems.py:573 msgid "Switch..." msgstr "ė „í™˜(Switch)..." #: util/contextmenuitems.py:574 msgid "Change the repository location of a working copy" msgstr "ėž‘ė—…ëŗ¸(working copy)ė˜ ė €ėžĨė†Œ ėœ„ėš˜ ëŗ€ę˛Ŋ" #: util/contextmenuitems.py:579 msgid "Merge..." msgstr "ëŗ‘í•Š(Merge)..." #: util/contextmenuitems.py:580 msgid "A wizard with steps for merging" msgstr "ë‹¨ęŗ„ëŗ„ ëŗ‘í•Š 마법ė‚Ŧ" #: util/contextmenuitems.py:585 msgid "Annotate..." msgstr "ėŖŧė„ ë‹Ŧ기 ..." #: util/contextmenuitems.py:586 msgid "Annotate a file" msgstr "파ėŧ뗐 ėŖŧė„ ë‹Ŧ기" #: util/contextmenuitems.py:591 msgid "Create Patch..." msgstr "íŒ¨ėš˜ 만들기 ..." #: util/contextmenuitems.py:592 msgid "Creates a unified diff file with all changes you made" msgstr "ëĒ¨ë“  ëŗ€ę˛Ŋ ė‚Ŧí•­ė´ í†ĩ합된 diff 파ėŧė„ 만듭니다" #: util/contextmenuitems.py:597 msgid "Apply Patch..." msgstr "íŒ¨ėš˜ ė ėšŠ ..." #: util/contextmenuitems.py:598 msgid "Applies a unified diff file to the working copy" msgstr "í†ĩ합된 diff 파ėŧė„ ėž‘ė—…ëŗ¸(working copy)뗐 ė ėšŠí•Šë‹ˆë‹¤" #: util/contextmenuitems.py:603 ui/xml/properties.xml.h:1 msgid "Properties" msgstr "ė†ė„ą" #: util/contextmenuitems.py:604 msgid "View the properties of an item" msgstr "항ëĒŠė˜ ė†ė„ąëŗ´ę¸°" #: util/contextmenuitems.py:609 msgid "Help" msgstr "ë„ė›€ë§" #: util/contextmenuitems.py:610 msgid "View help" msgstr "ë„ė›€ë§ ëŗ´ę¸°" #: util/contextmenuitems.py:615 ui/xml/settings.xml.h:1 msgid "Settings" msgstr "네렕" #: util/contextmenuitems.py:616 msgid "View or change RabbitVCS settings" msgstr "RabbitVCS 네렕 ëŗ´ę¸° 또는 ëŗ€ę˛Ŋ" #: util/contextmenuitems.py:621 msgid "About" msgstr "프로그램 ė •ëŗ´" #: util/contextmenuitems.py:622 msgid "About RabbitVCS" msgstr "RabbitVCS ė •ëŗ´" #: util/contextmenuitems.py:627 msgid "Open" msgstr "뗴揰" #: util/contextmenuitems.py:628 msgid "Open a file" msgstr "파ėŧ 뗴揰" #: util/contextmenuitems.py:636 msgid "Browse to" msgstr "ė°žė•„ëŗ´ę¸°" #: util/contextmenuitems.py:637 msgid "Browse to a file or folder" msgstr "파ėŧ 또는 폴더로 ė´ë™" #: util/contextmenuitems.py:642 msgid "Revert property" msgstr "ė†ė„ą 되돌ëĻŦ기" #: util/contextmenuitems.py:644 msgid "Revert this property to its original state" msgstr "ė´ ė†ė„ąė„ ė›ëž˜ ėƒíƒœëĄœ 되돌ëĻŦ기" #: util/contextmenuitems.py:648 msgid "Revert property (recursive)" msgstr "ė†ė„ą 되돌ëĻŦ기 (ėžŦ귀)" #: util/contextmenuitems.py:650 msgid "Revert this property to its original state (recursive)" msgstr "ė´ ė†ė„ąė„ ė›ëž˜ ėƒíƒœëĄœ 되돌ëĻŦ기 (ėžŦ귀)" #: util/contextmenuitems.py:655 msgid "Delete property" msgstr "ė†ė„ą ė‚­ė œ" #: util/contextmenuitems.py:657 msgid "Delete this property" msgstr "ė´ ė†ė„ą ė‚­ė œ" #: util/contextmenuitems.py:661 msgid "Delete property (recursive)" msgstr "ė†ė„ą ė‚­ė œ (ėžŦ귀)" #: util/contextmenuitems.py:663 msgid "Delete this property (recursive)" msgstr "ė´ ė†ė„ą ė‚­ė œ (ėžŦ귀)" #: util/contextmenuitems.py:668 msgid "Edit details" msgstr "넏ëļ€ ė •ëŗ´ ėˆ˜ė •" #: util/contextmenuitems.py:670 msgid "Show and edit property details" msgstr "ė†ė„ą 넏ëļ€ ė •ëŗ´ í‘œė‹œ 및 íŽ¸ė§‘" #: util/contextmenuitems.py:674 ui/create.py:72 msgid "Initialize Repository" msgstr "ė €ėžĨė†Œ ė´ˆę¸°í™”" #: util/contextmenuitems.py:679 ui/clone.py:51 ui/clone.py:72 msgid "Clone" msgstr "ëŗĩ렜(Clone)" #: util/contextmenuitems.py:684 msgid "Fetch/Pull" msgstr "ę°€ė ¸ė˜¤ę¸°(Fetch/Pull)" #: util/contextmenuitems.py:689 msgid "Push" msgstr "í‘¸ė‹œ(Push)" #: util/contextmenuitems.py:694 msgid "Branches" msgstr "ë¸Œëžœėš˜(Branches)" #: util/contextmenuitems.py:699 msgid "Tags" msgstr "태그(Tags)" #: util/contextmenuitems.py:704 msgid "Remotes" msgstr "ė›ę˛Š(Remotes)" #: util/contextmenuitems.py:709 ui/xml/clean.xml.h:1 ui/clean.py:69 msgid "Clean" msgstr "ëš„ėš°ę¸°(Clean)" #: util/contextmenuitems.py:713 ui/xml/reset.xml.h:1 ui/reset.py:100 msgid "Reset" msgstr "ė´ˆę¸°í™”(Reset)" #: util/contextmenuitems.py:718 ui/stage.py:52 ui/stage.py:78 msgid "Stage" msgstr "ėŠ¤í…Œė´ė§€(Stage)" #: util/contextmenuitems.py:723 ui/unstage.py:52 ui/unstage.py:78 msgid "Unstage" msgstr "ė–¸ėŠ¤í…Œė´ė§€(Unstage)" #: util/contextmenuitems.py:728 msgid "Edit conflicts" msgstr "ėļŠëŒ ėˆ˜ė •" #: util/contextmenuitems.py:754 msgid "Ignore item by filename" msgstr "파ėŧ ė´ëĻ„ėœŧ로 항ëĒŠ ëŦ´ė‹œ" #: util/contextmenuitems.py:773 msgid "Ignore item by file extension" msgstr "파ėŧ 확ėžĨėžëŗ„ëĄœ 항ëĒŠ ëŦ´ė‹œ" #: ui/dialog.py:36 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" "RabbitVCS Nautilus 확ėžĨ 기ëŠĨė—ė„œ ė•Œ 눘 ė—†ëŠ” 똤ëĨ˜ę°€ ë°œėƒí–ˆėŠĩ니다. ė•„ëž˜ 똤ëĨ˜ë‚´" "ėšŠė„ RabbitVCS team 뗐 ė•Œë ¤ėŖŧė„¸ėš”:" #: ui/dialog.py:52 ui/browser.py:101 ui/annotate.py:111 ui/log.py:57 #: ui/log.py:385 ui/log.py:676 msgid "Date" msgstr "ë‚ ė§œ" #: ui/dialog.py:52 ui/xml/dialogs/message_box.xml.h:1 ui/log.py:385 #: ui/log.py:676 msgid "Message" msgstr "ëŠ”ė„¸ė§€" #: ui/dialog.py:107 msgid "Select a Folder" msgstr "폴더 ė„ íƒ" #: ui/dialog.py:110 ui/dialog.py:282 ui/dialog.py:302 ui/xml/reset.xml.h:2 #: ui/xml/lock.xml.h:2 ui/xml/revert.xml.h:2 ui/xml/notification.xml.h:2 #: ui/xml/add.xml.h:2 ui/xml/import.xml.h:2 ui/xml/clean.xml.h:2 #: ui/xml/settings.xml.h:2 ui/xml/dialogs/property.xml.h:2 #: ui/xml/dialogs/delete_confirmation.xml.h:2 #: ui/xml/dialogs/create_folder.xml.h:2 #: ui/xml/dialogs/name_email_prompt.xml.h:2 ui/xml/dialogs/loading.xml.h:2 #: ui/xml/dialogs/previous_messages.xml.h:2 #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:2 ui/xml/git-update.xml.h:1 #: ui/xml/commit.xml.h:2 ui/xml/properties.xml.h:2 ui/xml/update.xml.h:2 #: ui/xml/relocate.xml.h:2 ui/xml/ignore.xml.h:2 msgid "_Cancel" msgstr "ėˇ¨ė†Œ(_C)" #: ui/dialog.py:111 ui/browser.py:341 ui/log.py:945 msgid "_Select" msgstr "ė„ íƒ(_S)" #: ui/dialog.py:137 ui/xml/log.xml.h:8 msgid "to" msgstr "" #: ui/dialog.py:277 msgid "Select a File" msgstr "파ėŧ ė„ íƒ" #: ui/dialog.py:283 msgid "_Open" msgstr "뗴揰(_O)" #: ui/dialog.py:297 msgid "Save As..." msgstr "다ëĨ¸ ė´ëĻ„ėœŧ로 ė €ėžĨ..." #: ui/dialog.py:303 ui/xml/properties.xml.h:3 msgid "_Save" msgstr "ė €ėžĨ(_S)" #: ui/dialog.py:317 ui/xml/dialogs/confirmation.xml.h:4 msgid "Are you sure you want to continue?" msgstr "ęŗ„ė† í•˜ė‹œę˛ ėŠĩ니까?" #: ui/dialog.py:345 msgid "the selected item(s)" msgstr "ė„ íƒëœ 항ëĒŠ(들)" #: ui/dialog.py:416 msgid "Added a folder to the repository" msgstr "ė €ėžĨė†Œė— ėļ”ę°€ëœ 폴더" #: ui/stage.py:79 msgid "Running Stage Command..." msgstr "Stage ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/stage.py:82 msgid "Completed Stage" msgstr "ėŠ¤í…Œė´ė§€(Stage) ė™„ëŖŒ" #: ui/update.py:60 ui/update.py:109 ui/updateto.py:96 msgid "Updating..." msgstr "ė—…ë°ė´íŠ¸ 뤑..." #: ui/update.py:62 ui/update.py:127 ui/updateto.py:104 msgid "Completed Update" msgstr "ė—…ë°ė´íŠ¸ ė™„ëŖŒ" #: ui/widget.py:1134 ui/widget.py:1140 ui/xml/merge.xml.h:20 msgid "HEAD" msgstr "" #: ui/widget.py:1135 ui/browser.py:101 ui/annotate.py:111 ui/xml/merge.xml.h:19 #: ui/log.py:56 ui/log.py:384 ui/log.py:675 msgid "Revision" msgstr "ëĻŦëš„ė „(Revision)" #: ui/widget.py:1136 msgid "Branch" msgstr "ë¸Œëžœėš˜(Branch)" #: ui/widget.py:1141 msgid "Number" msgstr "번호" #: ui/widget.py:1144 msgid "Working Copy" msgstr "ėž‘ė—…ëŗ¸(Working Copy)" #: ui/widget.py:1365 msgid "Repository:" msgstr "ė €ėžĨė†Œ:" #: ui/widget.py:1382 msgid "Branch:" msgstr "ë¸Œëžœėš˜:" #: ui/widget.py:1407 ui/xml/dialogs/certificate.xml.h:8 msgid "Host:" msgstr "í˜¸ėŠ¤íŠ¸:" #: ui/widget.py:1523 msgid "Add line:" msgstr "뤄 ėļ”ę°€:" #: ui/action.py:121 ui/log.py:401 ui/log.py:692 msgid "Action" msgstr "" #: ui/action.py:121 ui/browser.py:101 ui/add.py:83 ui/commit.py:88 #: ui/log.py:401 ui/log.py:692 ui/revert.py:78 ui/lock.py:76 #: ui/markresolved.py:56 msgid "Path" msgstr "ę˛Ŋ로" #: ui/action.py:121 msgid "Mime Type" msgstr "" #: ui/action.py:361 msgid "Finished" msgstr "ė™„ëŖŒ 됨" #: ui/action.py:365 #, python-format msgid "%s - Finished" msgstr "%s - ė™„ëŖŒ 됨" #: ui/action.py:391 msgid "Log Message" msgstr "로그 ëŠ”ė„¸ė§€" #: ui/unstage.py:79 msgid "Running Unstage Command..." msgstr "Unstage ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/unstage.py:82 msgid "Completed Unstage" msgstr "ė–¸ėŠ¤í…Œė´ė§€(Unstage) ė™„ëŖŒ" #: ui/relocate.py:76 msgid "The from and to url fields are both required." msgstr "from ęŗŧ url 필드는 í•„ėˆ˜ėž…ë‹ˆë‹¤." #: ui/relocate.py:86 ui/xml/relocate.xml.h:1 msgid "Relocate" msgstr "ėžŦë°°ė§€(Relocate)" #: ui/relocate.py:87 msgid "Running Relocate Command..." msgstr "ėžŦë°°ėš˜(Relocate) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/relocate.py:94 msgid "Completed Relocate" msgstr "ėžŦë°°ėš˜(Relocate) ė™„ëŖŒ" #: ui/revprops.py:71 ui/properties.py:158 ui/property_editor.py:162 msgid "Unable to retrieve properties list" msgstr "ė†ė„ą ëĒŠëĄė„ 氀렏ė˜Ŧ 눘 ė—†ėŠĩ니다" #: ui/merge.py:108 msgid "Running Merge Test" msgstr "ëŗ‘í•Š(Merge) í…ŒėŠ¤íŠ¸ 뤑" #: ui/merge.py:109 msgid "Completed Merge Test" msgstr "ëŗ‘í•Š(Merge) í…ŒėŠ¤íŠ¸ ė™„ëŖŒ" #: ui/merge.py:111 msgid "Running Merge Command" msgstr "ëŗ‘í•Š(Merge) ëĒ…ë š ė‹¤í–‰ 뤑" #: ui/merge.py:112 ui/merge.py:574 msgid "Completed Merge" msgstr "ëŗ‘í•Š(Merge) ė™„ëŖŒ" #: ui/merge.py:123 ui/merge.py:567 msgid "Merge" msgstr "ëŗ‘í•Š(Merge)" #: ui/merge.py:482 msgid "No active branch" msgstr "í™œė„ą ë¸Œëžœėš˜(Branch) ė—†ėŒ" #: ui/merge.py:493 msgid "Author:" msgstr "ėž‘ė„ąėž:" #: ui/merge.py:505 ui/tags.py:172 msgid "Date:" msgstr "ë‚ ė§œ:" #: ui/merge.py:516 ui/xml/browser.xml.h:5 ui/tags.py:115 ui/tags.py:183 msgid "Revision:" msgstr "ëĻŦëš„ė „(Revision):" #: ui/merge.py:528 ui/tags.py:134 ui/tags.py:195 msgid "Message:" msgstr "ëŠ”ė„¸ė§€:" #: ui/merge.py:568 msgid "Running Merge Command..." msgstr "ëŗ‘í•Š(Merge) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/clone.py:64 ui/export.py:78 ui/export.py:147 msgid "The repository URL and destination path are both required fields." msgstr "ė €ėžĨė†Œ URLęŗŧ ę˛Ŋ로는 í•„ėˆ˜ ėž…ë‹ˆë‹¤." #: ui/clone.py:73 msgid "Running Clone Command..." msgstr "ëŗĩ렜(Clone) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/clone.py:80 msgid "Completed Clone" msgstr "ëŗĩ렜(Clone) ė™„ëŖŒ" #: ui/browser.py:101 msgid "Size" msgstr "ėšŠëŸ‰" #: ui/browser.py:101 ui/annotate.py:111 ui/log.py:58 ui/log.py:384 #: ui/log.py:675 msgid "Author" msgstr "ėž‘ė„ąėž" #: ui/browser.py:360 msgid "Create folder..." msgstr "폴더 ėƒė„ą..." #: ui/browser.py:365 msgid "Copy to..." msgstr "ëŗĩė‚Ŧ..." #: ui/browser.py:370 msgid "Copy URL to clipboard" msgstr "클ëĻŊëŗ´ë“œė— URL ëŗĩė‚Ŧ" #: ui/browser.py:375 msgid "Move to..." msgstr "ė´ë™..." #: ui/browser.py:492 ui/rename.py:58 ui/rename.py:90 ui/rename.py:119 msgid "Rename" msgstr "ė´ëĻ„ëŗ€ę˛Ŋ" #: ui/browser.py:492 ui/rename.py:58 msgid "New Name:" msgstr "냈 ė´ëĻ„:" #: ui/browser.py:537 msgid "Where do you want to copy the selection?" msgstr "ė„ íƒí•œ ë‚´ėšŠė„ ė–´ë””ė— ëŗĩė‚Ŧí•˜ė‹œę˛ ėŠĩ니까?" #: ui/browser.py:538 ui/browser.py:567 msgid "New Location:" msgstr "냈 ėœ„ėš˜:" #: ui/browser.py:566 msgid "Where do you want to move the selection?" msgstr "ė„ íƒí•œ ë‚´ėšŠė„ ė–´ë””ė— ė´ë™í•˜ė‹œę˛ ėŠĩ니까?" #: ui/updateto.py:84 msgid "Rollback To Revision" msgstr "ëĻŦëš„ė „(Revision) 되돌ëĻŦ기" #: ui/updateto.py:85 msgid "Rolling Back..." msgstr "되돌ëĻŦ는 뤑..." #: ui/updateto.py:93 msgid "Completed Rollback" msgstr "되돌ëĻŦ기(Rollback) ė™„ëŖŒ" #: ui/updateto.py:95 msgid "Update To Revision" msgstr "ëĻŦëš„ė „(Revision) ė—…ë°ė´íŠ¸" #: ui/updateto.py:121 msgid "What revision/branch do you want to checkout?" msgstr "ė–´ë–¤ ëĻŦëš„ė „/ë¸Œëžœėš˜ëĨŧ 랴íŦė•„ė›ƒ(checkout) í•˜ė‹œę˛ ėŠĩ니까?" #: ui/updateto.py:142 msgid "Checkout" msgstr "랴íŦė•„ė›ƒ(Checkout)" #: ui/updateto.py:143 #, python-format msgid "Checking out %s..." msgstr "%s 랴íŦė•„ė›ƒ(Checkout) 뤑..." #: ui/updateto.py:149 msgid "Completed Checkout" msgstr "랴íŦė•„ė›ƒ(Checkout) ė™„ëŖŒ" #: ui/annotate.py:71 msgid "Cannot annotate a directory" msgstr "í´ë”ė— ėŖŧė„ė„ ë‹Ŧ 눘 ė—†ėŠĩ니다" #: ui/annotate.py:77 #, python-format msgid "Annotate - %s" msgstr "ėŖŧė„ ë‹Ŧ기 - %s" #: ui/annotate.py:111 msgid "Line" msgstr "뤄" #: ui/annotate.py:111 msgid "Text" msgstr "ëŗ¸ëŦ¸" #: ui/annotate.py:558 msgid "Show this revision" msgstr "ė´ ëĻŦëš„ė „ ëŗ´ę¸°" #: ui/annotate.py:559 msgid "Annotate this file's revision" msgstr "ė´ 파ėŧė˜ ëĻŦëš„ė „ė— ėŖŧė„ ë‹Ŧ기" #: ui/annotate.py:565 msgid "Annotate this revision in another window" msgstr "다ëĨ¸ ė°Ŋė—ė„œ ė´ ëĻŦëš„ė „ ėŖŧė„ ë‹Ŧ기" #: ui/annotate.py:566 msgid "Annotate this file's revision in another window" msgstr "다ëĨ¸ ė°Ŋė—ė„œ ė´ 파ėŧė˜ ëĻŦëš„ė „ ėŖŧė„ ë‹Ŧ기" #: ui/annotate.py:572 msgid "Show next revision" msgstr "ë‹¤ėŒ ëĻŦëš„ė „ ëŗ´ę¸°" #: ui/annotate.py:573 msgid "Annotate the revision following this one" msgstr "ė´ ëĻŦëš„ė „ė— ėŖŧė„ ë‹Ŧ기" #: ui/annotate.py:579 ui/log.py:999 msgid "View diff against working copy" msgstr "ėž‘ė—…ëŗ¸ęŗŧ ė°¨ė´ė  ëŗ´ę¸°" #: ui/annotate.py:580 msgid "View this revision's diff against working copy" msgstr "ėž‘ė—…ëŗ¸ęŗŧ ė´ ëĻŦëš„ė „ė˜ ė°¨ė´ė  ëŗ´ę¸°" #: ui/annotate.py:586 msgid "Compare against working copy" msgstr "ėž‘ė—…ëŗ¸ęŗŧ 비ęĩí•˜ę¸°" #: ui/annotate.py:587 msgid "Compare this revision against working copy" msgstr "ėž‘ė—…ëŗ¸ęŗŧ ė´ ëĻŦëš„ė „ 비ęĩí•˜ę¸°" #: ui/annotate.py:594 msgid "View this revision's diff against previous revision" msgstr "ė´ė „ ëĻŦëš„ė „ęŗŧ ė´ ëĻŦëš„ė „ ė°¨ė´ė  ëŗ´ę¸°" #: ui/annotate.py:600 msgid "Compare against previous revision" msgstr "ė´ė „ ëĻŦëš„ė „ęŗŧ 비ęĩí•˜ę¸°" #: ui/annotate.py:601 msgid "Compare this revision against previous revision" msgstr "ė´ė „ ëĻŦëš„ė „ęŗŧ ė´ ëĻŦëš„ė „ 비ęĩí•˜ę¸°" #: ui/annotate.py:607 ui/log.py:1009 msgid "View diff between revisions" msgstr "ëĻŦëš„ė „ 간 ė°¨ė´ė  ëŗ´ę¸°" #: ui/annotate.py:608 msgid "View diff between selected revisions" msgstr "ė„ íƒí•œ ëĻŦëš„ė „ 간 ė°¨ė´ė  ëŗ´ę¸°" #: ui/annotate.py:613 ui/log.py:1024 msgid "Compare revisions" msgstr "ëĻŦëš„ė „ 비ęĩí•˜ę¸°" #: ui/annotate.py:614 msgid "Compare selected revisions" msgstr "ė„ íƒí•œ ëĻŦëš„ė „ 비ęĩí•˜ę¸°" #: ui/add.py:84 ui/commit.py:88 ui/revert.py:78 ui/lock.py:76 #: ui/markresolved.py:57 msgid "Extension" msgstr "확ėžĨ" #: ui/add.py:117 ui/commit.py:134 ui/unlock.py:71 ui/revert.py:99 #: ui/lock.py:116 msgid "Loading..." msgstr "로딩 뤑..." #: ui/add.py:139 ui/unlock.py:95 ui/revert.py:103 ui/lock.py:119 #, python-format msgid "Found %d item(s)" msgstr "%d ę°œė˜ 항ëĒŠė„ ė°žė•˜ėŠĩ니다." #: ui/add.py:223 ui/add.py:248 msgid "Running Add Command..." msgstr "ėļ”ę°€(Add) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/add.py:225 ui/add.py:250 msgid "Completed Add" msgstr "ėļ”ę°€(Add) ė™„ëŖŒ" #: ui/ignore.py:105 msgid "Ignore file:" msgstr "파ėŧ ëŦ´ė‹œ:" #: ui/commit.py:89 ui/markresolved.py:57 msgid "Text Status" msgstr "ëŗ¸ëŦ¸ ėƒíƒœ" #: ui/commit.py:89 ui/markresolved.py:57 msgid "Property Status" msgstr "ė†ė„ą ėƒíƒœ" #: ui/commit.py:269 #, python-format msgid "Found %(changed)d changed and %(unversioned)d unversioned item(s)" msgstr "" "%(changed)d ę°œė˜ ëŗ€ę˛Ŋ된 항ëĒŠ 및 %(unversioned)d ę°œė˜ ë˛„ė „ ė—†ëŠ” 항ëĒŠė„ ė°žė•˜ėŠĩ" "니다" #: ui/commit.py:321 ui/commit.py:389 msgid "Running Commit Command..." msgstr "ėģ¤ë°‹(Commit) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/commit.py:334 ui/commit.py:398 msgid "Completed Commit" msgstr "ėģ¤ë°‹(Commit) ė™„ëŖŒ" #: ui/export.py:51 ui/export.py:130 #, python-format msgid "Export - %s" msgstr "ë‚´ëŗ´ë‚´ę¸° - %s" #: ui/export.py:98 ui/export.py:167 msgid "Export" msgstr "ë‚´ëŗ´ë‚´ę¸°(Export)" #: ui/export.py:99 ui/export.py:168 msgid "Running Export Command..." msgstr "ë‚´ëŗ´ë‚´ę¸°(Export) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/export.py:110 ui/export.py:176 msgid "Completed Export" msgstr "ë‚´ëŗ´ë‚´ę¸°(Export) ė™„ëŖŒ" #: ui/xml/browser.xml.h:2 msgid "Load/Refresh" msgstr "ëļˆëŸŦ똤揰/ėƒˆëĄœęŗ ėš¨" #: ui/xml/browser.xml.h:3 ui/xml/property_editor.xml.h:2 #: ui/xml/annotate.xml.h:3 ui/xml/log.xml.h:1 #: ui/xml/dialogs/error_notification.xml.h:2 ui/xml/manager.xml.h:1 msgid "_Close" msgstr "ë‹Ģ기(_C)" #: ui/xml/browser.xml.h:4 msgid "_Create folder here" msgstr "ė—Ŧ揰뗐 냈 폴더 ėƒė„ą(_C)" #: ui/xml/browser.xml.h:6 msgid "URL:" msgstr "" #: ui/xml/merge.xml.h:1 msgid "Merge Assistant" msgstr "ëŗ‘í•Š ë„ėš°ë¯¸" #: ui/xml/merge.xml.h:2 msgid "Choose this method if you wish to reintegrate a branch into the trunk." msgstr "ëļ„기ëĨŧ 트렁íŦ뗐 ë‹¤ė‹œ í†ĩí•Ší•˜ë ¤ëŠ´ė´ ë°Šë˛•ė„ ė„ íƒí•˜ė‹­ė‹œė˜¤." #: ui/xml/merge.xml.h:3 msgid "Reintegrate a branch" msgstr "ë¸Œëžœėš˜ ėžŦ í†ĩ합" #: ui/xml/merge.xml.h:4 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "두 ę°œė˜ 다ëĨ¸ ëļ„기ëĨŧ ėž‘ė—…ëŗ¸(working copy)뗐 ëŗ‘í•Ší•˜ë ¤ëŠ´ė´ ë°Šë˛•ė„ ė„ íƒí•˜ė‹­ė‹œė˜¤." #: ui/xml/merge.xml.h:5 msgid "Merge two different trees" msgstr "두 ę°œė˜ 다ëĨ¸ 트ëĻŦ ëŗ‘í•Š" #: ui/xml/merge.xml.h:6 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "ëļ„기ëĨŧ ėŧëļ€ ëŗ€ę˛Ŋí•˜ęŗ  ëŗ€ę˛Ŋ ė‚Ŧí•­ė„ 다ëĨ¸ ëļ„揰뙀 ëŗ‘í•Ší•˜ë ¤ëŠ” ę˛Ŋėš°ė´ ë°Šë˛•ė„ ė„ íƒí•˜" "ė‹­ė‹œė˜¤." #: ui/xml/merge.xml.h:7 msgid "Merge a range of revisions" msgstr "ë‹¤ėˆ˜ė˜ ëĻŦëš„ė „(Revision) ëŗ‘í•Š" #: ui/xml/merge.xml.h:8 msgid "Step 1: Merge Type" msgstr "1 ë‹¨ęŗ„ : ėœ í˜• ëŗ‘í•Š" #: ui/xml/merge.xml.h:9 msgid "Working Copy" msgstr "ėž‘ė—…ëŗ¸(Working Copy)" #: ui/xml/merge.xml.h:10 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" "로그 대화 ėƒėžëĨŧ ė‚ŦėšŠí•˜ė—Ŧ ëŗ‘í•Ší•˜ë ¤ëŠ” ëĻŦëš„ė „ė„ ė„ íƒí•˜ęą°ë‚˜ 각 ëĻŦëš„ė „ė„ ė‰ŧ표로 " "ęĩŦëļ„하ė—Ŧ ėˆ˜ë™ėœŧ로 ėž‘ė„ąí•˜ė‹­ė‹œė˜¤. \n" "ë‹¤ėŒęŗŧ ę°™ė´ ëŒ€ė‹œëĄœ ę°œė • ë˛”ėœ„ëĨŧ ė§€ė •í•  눘 ėžˆėŠĩ니다.\n" "\n" "똈 : 4-7,9,11,15-HEAD\n" "\n" "ëĒ¨ë“  ę°œė •ė„ ëŗ‘í•Ší•˜ë ¤ëŠ´ ėƒėžëĨŧ ëš„ė›Œ 둡니다." #: ui/xml/merge.xml.h:15 msgid "Show log" msgstr "로그 í‘œė‹œ" #: ui/xml/merge.xml.h:16 msgid "Revision Range" msgstr "ëĻŦëš„ė „(Revision) ë˛”ėœ„" #: ui/xml/merge.xml.h:17 msgid "URL to merge from" msgstr "ëŗ‘í•Ší•  URL" #: ui/xml/merge.xml.h:18 msgid "Step 2: Merge a Range of Revisions" msgstr "2 ë‹¨ęŗ„ : ë‹¤ėˆ˜ė˜ ëĻŦëš„ė „(Revision) ëŗ‘í•Š" #: ui/xml/merge.xml.h:21 msgid "To: (URL and revision to merge)" msgstr "To : (ëŗ‘í•Š 할 URL 및 ëĻŦëš„ė „)" #: ui/xml/merge.xml.h:22 msgid "From: (URL and revision to merge)" msgstr "From: (ëŗ‘í•Š 할 URL 및 ëĻŦëš„ė „)" #: ui/xml/merge.xml.h:23 msgid "Step 2: Merge two different trees" msgstr "2 ë‹¨ęŗ„ : 두 ę°œė˜ 다ëĨ¸ 트ëĻŦ ëŗ‘í•Š" #: ui/xml/merge.xml.h:24 msgid "From URL" msgstr "URLė—ė„œ" #: ui/xml/merge.xml.h:25 msgid "Step 2: Reintegrate a Branch" msgstr "2 ë‹¨ęŗ„ : ë¸Œëžœėš˜ ėžŦ í†ĩ합" #: ui/xml/merge.xml.h:26 msgid "Test Merge" msgstr "ëŗ‘í•Š í…ŒėŠ¤íŠ¸" #: ui/xml/merge.xml.h:27 msgid "Only record the merge" msgstr "ëŗ‘í•Š 만 기록" #: ui/xml/merge.xml.h:28 msgid "Ignore ancestry" msgstr "ė›ëŗ¸ ëŦ´ė‹œ" #: ui/xml/merge.xml.h:29 ui/xml/update.xml.h:6 msgid "Recursive" msgstr "ėžŦ掀렁ėœŧ로" #: ui/xml/merge.xml.h:30 ui/xml/reset.xml.h:13 ui/xml/git-update.xml.h:7 #: ui/xml/update.xml.h:7 msgid "Options" msgstr "ė˜ĩė…˜" #: ui/xml/merge.xml.h:31 msgid "Step 3: Final Options" msgstr "3 ë‹¨ęŗ„ : ėĩœėĸ… ė˜ĩė…˜" #: ui/xml/reset.xml.h:3 ui/xml/lock.xml.h:3 ui/xml/revert.xml.h:3 #: ui/xml/notification.xml.h:3 ui/xml/add.xml.h:3 ui/xml/import.xml.h:3 #: ui/xml/clean.xml.h:3 ui/xml/settings.xml.h:3 ui/xml/dialogs/property.xml.h:3 #: ui/xml/dialogs/message_box.xml.h:2 ui/xml/dialogs/create_folder.xml.h:3 #: ui/xml/dialogs/name_email_prompt.xml.h:3 #: ui/xml/dialogs/previous_messages.xml.h:3 #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:3 ui/xml/git-update.xml.h:2 #: ui/xml/commit.xml.h:3 ui/xml/update.xml.h:3 ui/xml/relocate.xml.h:3 #: ui/xml/ignore.xml.h:3 msgid "_OK" msgstr "í™•ė¸(_O)" #: ui/xml/reset.xml.h:4 msgid "None" msgstr "" #: ui/xml/reset.xml.h:5 msgid "" "Merge - Resets the index to match the tree recorded by the named " "commit,\n" "and updates the files that are different between the named commit\n" "and the current commit in the working tree" msgstr "" "Merge - ëĒ…ëĒ…ëœ ėģ¤ë°‹ėœŧ로 기록된 트ëĻŦ뙀 ėŧėš˜í•˜ë„ëĄ ė¸ëąėŠ¤ëĨŧ ėžŦė„¤ė •í•˜" "ęŗ ,\n" "다ëĨ¸ 파ėŧė„ 현ėžŦ ėž‘ė—…ė¤‘ė¸ 트ëĻŦ뗐 ė—…ë°ė´íŠ¸ 합니다" #: ui/xml/reset.xml.h:8 msgid "" "Hard - Matches the working tree and index to that of the \n" "tree being switched to" msgstr "Hard - ėž‘ė—… 트ëĻŦ 및 ėƒ‰ė¸ė„ ė „í™˜ë˜ëŠ” 트ëĻŦė˜ ėƒ‰ė¸ęŗŧ ėŧėš˜ė‹œí‚ĩ니다" #: ui/xml/reset.xml.h:10 msgid "" "Soft - Does not touch the index file or working tree at all, \n" "but requires them to be in good working order" msgstr "" "Soft - ėƒ‰ė¸ 파ėŧė´ë‚˜ ėž‘ė—… 트ëĻŦëĨŧ ė „í˜€ 건드ëĻŦė§€ ė•Šė§€ë§Œ ė œëŒ€ëĄœ ėž‘ë™í•´ė•ŧ " "합니다" #: ui/xml/reset.xml.h:12 msgid "Mixed - Reset the index but not the working tree" msgstr "Mixed - ėƒ‰ė¸ė„ ėžŦė„¤ė •í•˜ė§€ë§Œ ėž‘ė—… 트ëĻŦ는 ėžŦė„¤ė •í•˜ė§€ ė•ŠėŠĩ니다" #: ui/xml/reset.xml.h:14 ui/xml/annotate.xml.h:4 ui/xml/update.xml.h:8 msgid "Revision" msgstr "ëĻŦëš„ė „(Revision)" #: ui/xml/reset.xml.h:15 msgid "Path" msgstr "ę˛Ŋ로" #: ui/xml/reset.xml.h:16 msgid "Reset current HEAD to specified state." msgstr "현ėžŦ HEADëĨŧ ė§€ė •ëœ ėƒíƒœëĄœ ėžŦė„¤ė •í•Šë‹ˆë‹¤." #: ui/xml/reset.xml.h:17 msgid "Reset your Repository" msgstr "ė €ėžĨė†Œ ėžŦ네렕" #: ui/xml/property_editor.xml.h:1 msgid "Property Editor" msgstr "ė†ė„ą íŽ¸ė§‘ę¸°" #: ui/xml/property_editor.xml.h:3 msgid "Close this dialog." msgstr "ė´ ëŒ€í™”ėƒėž ë‹Ģ기." #: ui/xml/property_editor.xml.h:4 msgid "_Refresh" msgstr "ėƒˆëĄœęŗ ėš¨(_R)" #: ui/xml/property_editor.xml.h:5 msgid "Refresh the list of properties." msgstr "ė†ė„ą ëĒŠëĄ ėƒˆëĄœ ęŗ ėš¨." #: ui/xml/property_editor.xml.h:6 msgid "_New" msgstr "냈 ė†ė„ą(_N)" #: ui/xml/property_editor.xml.h:7 msgid "Add a new property." msgstr "냈 ė†ė„ą ėļ”ę°€." #: ui/xml/property_editor.xml.h:8 msgid "Remote URI:" msgstr "ė›ę˛Šė§€ ėŖŧė†Œ(Remote URI):" #: ui/xml/property_editor.xml.h:9 msgid "Working Copy:" msgstr "ėž‘ė—…ëŗ¸(Working Copy):" #: ui/xml/lock.xml.h:1 msgid "Lock Files" msgstr "ėž ę¸ˆ 파ėŧ" #: ui/xml/lock.xml.h:4 msgid "Steal the locks" msgstr "" #: ui/xml/lock.xml.h:5 ui/xml/revert.xml.h:4 ui/xml/add.xml.h:5 #: ui/xml/commit.xml.h:8 msgid "Select / Deselect all" msgstr "렄랴 ė„ íƒ/í•´ė œ" #: ui/xml/lock.xml.h:6 msgid "Files to lock" msgstr "ėž ę¸€ 파ėŧ" #: ui/xml/lock.xml.h:7 ui/xml/import.xml.h:5 #: ui/xml/dialogs/previous_messages.xml.h:1 ui/xml/commit.xml.h:5 msgid "Previous Messages" msgstr "ė´ė „ ëŠ”ė„¸ė§€" #: ui/xml/lock.xml.h:8 msgid "Please describe why you are locking these files" msgstr "ė´ 파ėŧė„ ėž ęˇ¸ëŠ” ė´ėœ ëĨŧ 네ëĒ…í•˜ė„¸ėš”" #: ui/xml/notification.xml.h:1 msgid "Notification Messages" msgstr "ė•ŒëĻŧ ëŠ”ė„¸ė§€" #: ui/xml/notification.xml.h:4 ui/xml/annotate.xml.h:2 msgid "Save _As" msgstr "다ëĨ¸ ė´ëĻ„ėœŧ로 ė €ėžĨ(_A)" #: ui/xml/add.xml.h:4 msgid "Show ignored files" msgstr "ė œė™¸í•œ(ignored) 파ėŧ ëŗ´ę¸°" #: ui/xml/annotate.xml.h:1 msgid "Annotate" msgstr "ėŖŧė„ ë‹Ŧ기" #: ui/xml/import.xml.h:4 msgid "Include ignored files" msgstr "ė œė™¸(ignored)한 파ėŧ íŦ함하기" #: ui/xml/import.xml.h:6 msgid "Import Message" msgstr "ę°€ė ¸ė˜¤ę¸° ëŠ”ė„¸ė§€" #: ui/xml/import.xml.h:7 msgid "Repository" msgstr "ė €ėžĨė†Œ" #: ui/xml/clean.xml.h:4 msgid "Force" msgstr "ę°•ė œ" #: ui/xml/clean.xml.h:5 msgid "Dry run" msgstr "ė‹¤í–‰ í…ŒėŠ¤íŠ¸" #: ui/xml/clean.xml.h:6 msgid "Remove only ignored files" msgstr "ė œė™¸(ignored)한 파ėŧ만 ė œęą°" #: ui/xml/clean.xml.h:7 msgid "Remove ignored files, too" msgstr "ė œė™¸(ignored)한 파ėŧ도 ė œęą°" #: ui/xml/clean.xml.h:8 msgid "Remove directories" msgstr "폴더 ė œęą°" #: ui/xml/clean.xml.h:9 msgid "Remove untracked files from the working tree" msgstr "ėž‘ė—… 트ëĻŦė—ė„œ ėļ”ė í•˜ė§€ ė•ŠëŠ” 파ėŧ ė‚­ė œ" #: ui/xml/clean.xml.h:10 msgid "Clean your Repository" msgstr "ė €ėžĨė†Œ ëš„ėš°ę¸°(Clean)" #: ui/xml/settings.xml.h:4 msgid "Version Control Systems" msgstr "ë˛„ė „ 관ëĻŦ ė‹œėŠ¤í…œ" #: ui/xml/settings.xml.h:5 msgid "Enable Subversion" msgstr "Subversion í™œė„ąí™”" #: ui/xml/settings.xml.h:6 msgid "Enable Git" msgstr "Git í™œė„ąí™”" #: ui/xml/settings.xml.h:7 msgid "Enable emblems" msgstr "ė— ë¸”ëŸŧ í™œė„ąí™”" #: ui/xml/settings.xml.h:8 msgid "Enable recursive status checks" msgstr "ėžŦ귀 ėƒíƒœ í™•ė¸ ė‚ŦėšŠ" #: ui/xml/settings.xml.h:9 msgid "Enable file attributes" msgstr "파ėŧ ė†ė„ą í™œė„ąí™”" #: ui/xml/settings.xml.h:10 msgid "Date/time format" msgstr "ë‚ ė§œ/ė‹œę°„ í˜•ė‹" #: ui/xml/settings.xml.h:11 msgid "Highlight source syntax" msgstr "ė†ŒėŠ¤ėŊ”드 í•˜ė´ëŧė´íŠ¸" #: ui/xml/settings.xml.h:12 msgid "Highlight source lines according to language syntax" msgstr "떏떴 ëŦ¸ë˛•뗐 따ëŧ ė†ŒėŠ¤ ėŊ”드 í•˜ė´ëŧė´íŒ…" #: ui/xml/settings.xml.h:13 msgid "Colorize commits and authors" msgstr "ėģ¤ë°‹ęŗŧ ėž‘ė„ąėž ėƒ‰ėƒ í‘œė‹œ" #: ui/xml/settings.xml.h:14 msgid "" "Set a unique background color of lines belonging to the same commit. Apply " "to line author's too" msgstr "동ėŧ한 ėģ¤ë°‹ė˜ ëŧė¸ ë°°ę˛Ŋėƒ‰ė„ ė„¤ė •í•Šë‹ˆë‹¤. 해당 ëŧė¸ ė €ėžė—ę˛Œë„ ė ėšŠ" #: ui/xml/settings.xml.h:15 msgid "Show RabbitVCS debugging tools" msgstr "디버깅 도ęĩŦ ëŗ´ę¸°" #: ui/xml/settings.xml.h:16 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "디버그 메뉴는 RabbitVCS ėžė˛´ė˜ ëŦ¸ė œëĨŧ ė§„ë‹¨í•˜ëŠ” 데 ė‚ŦėšŠëŠë‹ˆë‹¤" #: ui/xml/settings.xml.h:17 msgid "RabbitVCS" msgstr "" #: ui/xml/settings.xml.h:18 msgid "Default Commit Message" msgstr "ę¸°ëŗ¸ ėģ¤ë°‹ ëŠ”ė„¸ė§€" #: ui/xml/settings.xml.h:19 msgid "General" msgstr "ėŧ반" #: ui/xml/settings.xml.h:20 msgid "Configure the program to resolve conflicted files." msgstr "ėļŠëŒ 파ėŧė„ 해결하도록 í”„ëĄœęˇ¸ëž¨ė„ ęĩŦė„ąí•Šë‹ˆë‹¤." #: ui/xml/settings.xml.h:22 msgid "" "Use the following macros to configure the merge tool:\n" "%base - The common ancestor of the two files to be merged.\n" "%mine - The file you modified in your working copy.\n" "%theirs - The file being merged into your working copy.\n" "%merged - The file to store the merged result." msgstr "" "ë‹¤ėŒ 매íŦ로ëĨŧ ė‚ŦėšŠí•˜ė—Ŧ ëŗ‘í•Š 도ęĩŦëĨŧ ęĩŦė„ąí•˜ė‹­ė‹œė˜¤.\n" "% base - ëŗ‘í•Š 할 두 파ėŧė˜ ęŗĩí†ĩ ėĄ°ėƒėž…ë‹ˆë‹¤.\n" "% mine - ėž‘ė—…ëŗ¸(working copy)ė—ė„œ ėˆ˜ė • 한 파ėŧėž…ë‹ˆë‹¤.\n" "% theirs - ėž‘ė—…ëŗ¸(working copy)뗐 ëŗ‘í•Šë˜ëŠ” 파ėŧėž…ë‹ˆë‹¤.\n" "% merged - ëŗ‘í•Š 된 결ęŗŧëĨŧ ė €ėžĨ할 파ėŧėž…ë‹ˆë‹¤." #: ui/xml/settings.xml.h:27 msgid "Browse..." msgstr "ę˛€ėƒ‰..." #: ui/xml/settings.xml.h:28 msgid "Show new version on the left side" msgstr "ė™ŧėĒŊ뗐 냈 ë˛„ė „ í‘œė‹œ" #: ui/xml/settings.xml.h:29 msgid "Program used to compare files" msgstr "파ėŧ 비ęĩė— ė‚ŦėšŠë˜ëŠ” 프로그램" #: ui/xml/settings.xml.h:30 msgid "External Programs" msgstr "뙏ëļ€ í”„ëĄœęˇ¸ëž¨" #: ui/xml/settings.xml.h:31 msgid "Clear" msgstr "ė§€ėš°ę¸°" #: ui/xml/settings.xml.h:32 msgid "Clear your authentication information" msgstr "ė¸ėĻ ė •ëŗ´ ė§€ėš°ę¸°" #: ui/xml/settings.xml.h:33 msgid "Authentication" msgstr "ė¸ėĻ" #: ui/xml/settings.xml.h:34 msgid "Number of messages to remember" msgstr "기ė–ĩ할 ëŠ”ė‹œė§€ 눘" #: ui/xml/settings.xml.h:35 msgid "Log Messages" msgstr "로그 ëŠ”ė‹œė§€" #: ui/xml/settings.xml.h:36 msgid "Number of URLs to remember" msgstr "기ė–ĩ할 URL 눘" #: ui/xml/settings.xml.h:37 msgid "URL History" msgstr "URL 기록" #: ui/xml/settings.xml.h:38 msgid "Saved Data" msgstr "ė €ėžĨ된 ë°ė´í„°" #: ui/xml/settings.xml.h:39 msgid "Logging Options" msgstr "로깅 ė˜ĩė…˜" #: ui/xml/settings.xml.h:40 msgid "Minimum level to log:" msgstr "로그 ėĩœė†Œ ėˆ˜ė¤€ :" #: ui/xml/settings.xml.h:41 msgid "Type:" msgstr "ėœ í˜•:" #: ui/xml/settings.xml.h:42 msgid "Logging" msgstr "로그 기록" #: ui/xml/settings.xml.h:43 msgid "Refresh Information" msgstr "ė •ëŗ´ ėƒˆëĄœ ęŗ ėš¨" #: ui/xml/settings.xml.h:44 msgid "Restart Checker" msgstr "검ė‚Ŧ기 ėžŦė‹œėž‘" #: ui/xml/settings.xml.h:45 msgid "Stop Checker" msgstr "검ė‚Ŧ기 뤑맀" #: ui/xml/settings.xml.h:46 msgid "Other Information" msgstr "기타 ė •ëŗ´" #: ui/xml/settings.xml.h:47 msgid "Checker type:" msgstr "검ė‚Ŧ기 ėœ í˜• :" #: ui/xml/settings.xml.h:48 ui/settings.py:48 msgid "Unknown" msgstr "ė•Œ 눘 ė—†ëŠ”" #: ui/xml/settings.xml.h:49 msgid "Process ID:" msgstr " í”„ëĄœė„¸ėŠ¤ ID : " #: ui/xml/settings.xml.h:50 msgid "Memory usage: " msgstr " 메ëǍëĻŦ ė‚ŦėšŠëŸ‰ : " #: ui/xml/settings.xml.h:51 msgid "Locale: " msgstr "떏떴 : " #: ui/xml/settings.xml.h:52 msgid "Status Checker" msgstr "ėƒíƒœ 검ė‚Ŧ기" #: ui/xml/settings.xml.h:53 msgid "Configuration Editor" msgstr "ęĩŦė„ą íŽ¸ė§‘ę¸°" #: ui/xml/settings.xml.h:54 msgid "Git" msgstr "" #: ui/xml/log.xml.h:2 ui/xml/commit.xml.h:4 msgid "Refresh" msgstr "ėƒˆëĄœęŗ ėš¨" #: ui/xml/log.xml.h:3 msgid "100" msgstr "" #: ui/xml/log.xml.h:4 msgid "Limit:" msgstr "" #: ui/xml/log.xml.h:5 msgid "_Back" msgstr "뒤로(_B)" #: ui/xml/log.xml.h:6 msgid "_Forward" msgstr "ė•žėœŧ로(_F)" #: ui/xml/log.xml.h:7 ui/log.py:316 ui/log.py:317 msgid "N/A" msgstr "" #: ui/xml/log.xml.h:9 msgid "Showing Revisions:" msgstr "ëĻŦëš„ė „ í‘œė‹œ:" #: ui/xml/log.xml.h:10 msgid "Stop on copy" msgstr "ëŗĩė‚Ŧ ė¤‘ë‹¨" #: ui/xml/log.xml.h:11 msgid "Revisions Table" msgstr "ëĻŦëš„ė „ 표" #: ui/xml/log.xml.h:12 msgid "Affected File(s) (double-click to compare with base)" msgstr "똁í–Ĩė„ 받는 파ėŧ (ę¸°ëŗ¸ęŗŧ 비ęĩí•˜ë ¤ëŠ´ 더블클ëĻ­)" #: ui/xml/log.xml.h:13 ui/xml/dialogs/previous_messages.xml.h:5 msgid "Message" msgstr "ëŠ”ė„¸ė§€" #: ui/xml/property_page.xml.h:1 msgid "Property status:" msgstr "ė†ė„ą ėƒíƒœ:" #: ui/xml/property_page.xml.h:2 msgid "Content status:" msgstr "ëŗ¸ëŦ¸ ėƒíƒœ:" #: ui/xml/property_page.xml.h:3 msgid "VCS:" msgstr "" #: ui/xml/property_page.xml.h:4 ui/xml/dialogs/name_email_prompt.xml.h:6 #: ui/tags.py:105 msgid "Name:" msgstr "ė´ëĻ„:" #: ui/xml/dialogs/mark_resolved_prompt.xml.h:1 msgid "Mark Resolved" msgstr "해결됨ėœŧ로 í‘œė‹œ" #: ui/xml/dialogs/mark_resolved_prompt.xml.h:2 msgid "Unresolved" msgstr "ë¯¸í•´ę˛°" #: ui/xml/dialogs/mark_resolved_prompt.xml.h:3 msgid "Resolved" msgstr "해결" #: ui/xml/dialogs/mark_resolved_prompt.xml.h:4 msgid "Mark Conflict As" msgstr "ėļŠëŒė„ ë‹¤ėŒėœŧ로 í‘œė‹œ" #: ui/xml/dialogs/property.xml.h:1 msgid "Property" msgstr "ė†ė„ą" #: ui/xml/dialogs/property.xml.h:4 msgid "Apply property recursively" msgstr "ėžŦ掀렁ėœŧ로 ė†ė„ą ė ėšŠ" #: ui/xml/dialogs/property.xml.h:5 msgid "Value:" msgstr "값:" #: ui/xml/dialogs/property.xml.h:6 msgid "Property:" msgstr "ė†ė„ą:" #: ui/xml/dialogs/property.xml.h:7 msgid "Edit Property Details" msgstr "ė†ė„ą 넏ëļ€ ė •ëŗ´ ėˆ˜ė •" #: ui/xml/dialogs/error_notification.xml.h:1 msgid "RabbitVCS Error" msgstr "RabbitVCS 똤ëĨ˜" #: ui/xml/dialogs/error_notification.xml.h:3 msgid "RabbitVCS Error" msgstr "RabbitVCS 똤ëĨ˜" #: ui/xml/dialogs/delete_confirmation.xml.h:1 msgid "Delete Confirmation" msgstr "ė‚­ė œ í™•ė¸" #: ui/xml/dialogs/delete_confirmation.xml.h:3 ui/xml/properties.xml.h:6 msgid "_Delete" msgstr "ė‚­ė œ(_D)" #: ui/xml/dialogs/delete_confirmation.xml.h:4 msgid "The item(s) will be sent to the trash can." msgstr "ė´ 항ëĒŠė€ íœ´ė§€í†ĩėœŧ로 ëŗ´ë‚´ė§‘ë‹ˆë‹¤." #: ui/xml/dialogs/delete_confirmation.xml.h:6 msgid "" "Are you sure you want to delete %item%?" msgstr "" "ė •ë§ %item% ė„(ëĨŧ) ė‚­ė œí•˜ė‹œę˛ ėŠĩ니까?" #: ui/xml/dialogs/create_folder.xml.h:1 msgid "Create Folder..." msgstr "폴더 ėƒė„ą .." #: ui/xml/dialogs/create_folder.xml.h:4 msgid "Folder Name" msgstr "폴더 ė´ëĻ„" #: ui/xml/dialogs/create_folder.xml.h:5 ui/xml/commit.xml.h:6 msgid "Add Message" msgstr "ëŠ”ė„¸ė§€ ėļ”ę°€" #: ui/xml/dialogs/name_email_prompt.xml.h:1 msgid "Name and Email" msgstr "ė´ëĻ„ęŗŧ ė´ëŠ”ėŧ" #: ui/xml/dialogs/name_email_prompt.xml.h:4 msgid "Enter Name and Email Details" msgstr "ė´ëĻ„ 및 ė´ëŠ”ėŧ 넏ëļ€ ė •ëŗ´ ėž…ë Ĩ" #: ui/xml/dialogs/name_email_prompt.xml.h:5 msgid "Email:" msgstr "ė´ëŠ”ėŧ:" #: ui/xml/dialogs/loading.xml.h:1 msgid "Loading" msgstr "로딩 뤑" #: ui/xml/dialogs/confirmation.xml.h:1 msgid "Confirmation" msgstr "í™•ė¸" #: ui/xml/dialogs/confirmation.xml.h:2 msgid "_No" msgstr "ė•„ë‹ˆė˜¤(_N)" #: ui/xml/dialogs/confirmation.xml.h:3 msgid "_Yes" msgstr "똈(_Y)" #: ui/xml/dialogs/previous_messages.xml.h:4 msgid "Previous Messages" msgstr "ė´ė „ ëŠ”ė„¸ė§€" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:1 msgid "SSL Client Certification" msgstr "SSL 클ëŧė´ė–¸íŠ¸ ė¸ėĻ" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:4 msgid "Save Authentication" msgstr "ė¸ėĻ ė •ëŗ´ ė €ėžĨ" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:5 msgid "Path:" msgstr "ę˛Ŋ로:" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:6 #: ui/xml/dialogs/certificate.xml.h:9 msgid "Realm:" msgstr "" #: ui/xml/dialogs/ssl_client_cert_prompt.xml.h:7 msgid "Please provide your ssl certification file" msgstr "SSL ė¸ėĻ 파ėŧė„ 렜ęŗĩí•˜ė„¸ėš”." #: ui/xml/dialogs/conflict_decision.xml.h:1 msgid "Edit Conflicts" msgstr "ėļŠëŒ ėˆ˜ė •" #: ui/xml/dialogs/conflict_decision.xml.h:2 msgid "Cancel" msgstr "ėˇ¨ė†Œ" #: ui/xml/dialogs/conflict_decision.xml.h:3 msgid "Accept Mine" msgstr "내 ëŗ€ę˛Ŋ ė ėšŠ" #: ui/xml/dialogs/conflict_decision.xml.h:4 msgid "Accept Theirs" msgstr "다ëĨ¸ ė‚ŦëžŒė˜ ëŗ€ę˛Ŋ ė ėšŠ" #: ui/xml/dialogs/conflict_decision.xml.h:5 msgid "A conflict was found in the following file:" msgstr "ėļŠëŒė´ 발ę˛Ŧ된 파ėŧ:" #: ui/xml/dialogs/certificate.xml.h:1 msgid "Check Certificate" msgstr "ė¸ėĻė„œ í™•ė¸" #: ui/xml/dialogs/certificate.xml.h:2 msgid "Accept Once" msgstr "한번 í—ˆėšŠ" #: ui/xml/dialogs/certificate.xml.h:3 msgid "Accept Forever" msgstr "똁ęĩŦ렁ėœŧ로 í—ˆėšŠ" #: ui/xml/dialogs/certificate.xml.h:4 msgid "Deny" msgstr "ęą°ëļ€" #: ui/xml/dialogs/certificate.xml.h:5 msgid "Fingerprint:" msgstr "" #: ui/xml/dialogs/certificate.xml.h:6 msgid "Valid:" msgstr "" #: ui/xml/dialogs/certificate.xml.h:7 msgid "Issuer:" msgstr "" #: ui/xml/dialogs/certificate.xml.h:10 msgid "Certificate Details" msgstr "ė¸ėĻė„œ ėƒė„¸ ė •ëŗ´" #: ui/xml/git-update.xml.h:3 msgid "Fetch from all remotes" msgstr "ëĒ¨ë“  ė›ę˛Šė €ėžĨė†Œė—ė„œ 氀렏 똤揰" #: ui/xml/git-update.xml.h:4 msgid "Apply remote changes prior to local changes (rebase)" msgstr "로ėģŦ ëŗ€ę˛Ŋ 렄뗐 ė›ę˛Š ëŗ€ę˛Ŋ ė ėšŠ (rebase)" #: ui/xml/git-update.xml.h:5 msgid "Merge into local branch" msgstr "로ėģŦ ë¸Œëžœėš˜ëĄœ ëŗ‘í•Š" #: ui/xml/git-update.xml.h:6 msgid "Apply remote changes" msgstr "ė›ę˛Š ëŗ€ę˛Ŋ ė ėšŠ" #: ui/xml/commit.xml.h:7 msgid "Show unversioned files" msgstr "ë˛„ė „ ė •ëŗ´ ė—†ëŠ” 파ėŧ ëŗ´ę¸°" #: ui/xml/commit.xml.h:9 msgid "Changed Files (double-click to compare with base)" msgstr "ëŗ€ę˛Ŋ된 파ėŧ (ę¸°ëŗ¸ęŗŧ 비ęĩí•˜ë ¤ëŠ´ 더블클ëĻ­)" #: ui/xml/commit.xml.h:10 msgid "Commit to:" msgstr "" #: ui/xml/properties.xml.h:4 msgid "_New..." msgstr "냈 ė†ė„ą(_N)" #: ui/xml/properties.xml.h:5 msgid "_Edit..." msgstr "ėˆ˜ė •(_E)" #: ui/xml/properties.xml.h:7 msgid "Delete properties recursively" msgstr "ėžŦ掀렁ėœŧ로 ė†ė„ą ė‚­ė œ" #: ui/xml/properties.xml.h:8 msgid "Selected properties will be applied recursively." msgstr "ė„ íƒí•œ ė†ė„ąė´ ėžŦ掀렁ėœŧ로 ė ėšŠëŠë‹ˆë‹¤." #: ui/xml/properties.xml.h:9 msgid "Properties for:" msgstr "ė†ė„ą:" #: ui/xml/update.xml.h:4 msgid "Rollback to specified revision number" msgstr "ė§€ė •í•œ ëĻŦëš„ė „ėœŧ로 되돌ëĻŦ기(Rollback)" #: ui/xml/update.xml.h:5 msgid "Omit Externals" msgstr "뙏ëļ€ ėƒëžĩ" #: ui/xml/relocate.xml.h:4 msgid "To:" msgstr "" #: ui/xml/relocate.xml.h:5 msgid "From:" msgstr "" #: ui/xml/relocate.xml.h:6 msgid "Change the repository of your working copy" msgstr "현ėžŦ ėž‘ė—…ëŗ¸ė˜ ė €ėžĨė†Œ ëŗ€ę˛Ŋ" #: ui/xml/ignore.xml.h:1 msgid "Ignore" msgstr "ė œė™¸(Ignore)" #: ui/xml/ignore.xml.h:4 msgid "Ignore and exclude files from being tracked" msgstr "ėļ”ė ė—ė„œ 파ėŧ ė œė™¸" #: ui/tags.py:69 msgid "Tag Manager" msgstr "태그 관ëĻŦėž" #: ui/tags.py:70 msgid "Tags" msgstr "태그(Tags)" #: ui/tags.py:81 msgid "Tag" msgstr "태그(Tag)" #: ui/tags.py:152 ui/tags.py:302 msgid "Save" msgstr "ė €ėžĨ" #: ui/tags.py:160 msgid "Tagger:" msgstr "태그 ėž‘ė„ą:" #: ui/tags.py:245 ui/remotes.py:126 #, python-format msgid "Are you sure you want to delete %s?" msgstr "ė •ë§ %s ė„(ëĨŧ) ė‚­ė œí•˜ė‹œę˛ ėŠĩ니까?" #: ui/tags.py:293 msgid "Add Tag" msgstr "태그(Tag) ėļ”ę°€" #: ui/tags.py:311 msgid "Tag Detail" msgstr "태그 넏ëļ€ ė •ëŗ´" #: ui/create.py:56 msgid "Repository successfully created" msgstr "ė €ėžĨė†Œę°€ ė„ąęŗĩ렁ėœŧ로 ėƒė„ąë˜ė—ˆėŠĩ니다." #: ui/create.py:58 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" "ė €ėžĨė†ŒëĨŧ 만드는 뤑뗐 똤ëĨ˜ę°€ ë°œėƒí–ˆėŠĩ니다. 폴더가 ëš„ė–´ ėžˆëŠ”ė§€ í™•ė¸í•˜ė‹­ė‹œė˜¤." #: ui/create.py:73 msgid "Setting up repository..." msgstr "ė €ėžĨė†Œ 네렕 뤑..." #: ui/create.py:75 msgid "Completed repository setup" msgstr "ė €ėžĨė†Œ 네렕 ė™„ëŖŒ" #: ui/unlock.py:50 ui/unlock.py:113 msgid "Unlock" msgstr "ėž ę¸ˆí•´ė œ" #: ui/unlock.py:114 msgid "Running Unlock Command..." msgstr "ėž ę¸ˆí•´ė œ(Unlock) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/unlock.py:117 msgid "Completed Unlock" msgstr "ėž ę¸ˆí•´ė œ(Unlock) ė™„ëŖŒ" #: ui/rename.py:54 msgid "The requested file or folder does not exist." msgstr "ėš”ė˛­í•œ 파ėŧ 또는 폴더가 ė—†ėŠĩ니다." #: ui/rename.py:66 msgid "The new name field is required" msgstr "냈 ė´ëĻ„ 필드는 í•„ėˆ˜ėž…ë‹ˆë‹¤" #: ui/rename.py:91 ui/rename.py:120 msgid "Running Rename Command..." msgstr "ė´ëĻ„ 바꾸기 ëĒ…ë š ė‹¤í–‰ 뤑 ..." #: ui/rename.py:97 ui/rename.py:126 msgid "Completed Rename" msgstr "ė´ëĻ„ 바꾸기 ė™„ëŖŒ" #: ui/cleanup.py:61 msgid "Cleaning Up..." msgstr "ëš„ėš°ëŠ” 뤑(Clean Up)..." #: ui/cleanup.py:63 msgid "Completed Cleanup" msgstr "ëš„ėš°ę¸°(Cleanup) ė™„ëŖŒ" #: ui/__init__.py:55 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "--vcs [svn|git] ė˜ĩė…˜ė„ ė‚ŦėšŠí•˜ė—Ŧ ë˛„ė „ 관ëĻŦ ė‹œėŠ¤í…œė„ ė§€ė •í•´ė•ŧ 합니다" #: ui/log.py:132 #, python-format msgid "Log - %s" msgstr "로그 - %s" #: ui/log.py:386 msgid "Color" msgstr "ėƒ‰ėƒ" #: ui/log.py:402 msgid "Copy From Path" msgstr "ę˛ŊëĄœė—ė„œ ëŗĩė‚Ŧ" #: ui/log.py:402 msgid "Copy From Revision" msgstr "ëĻŦëš„ė „ė—ė„œ ëŗĩė‚Ŧ" #: ui/log.py:675 msgid "Graph" msgstr "그래프" #: ui/log.py:1014 msgid "Compare with working copy" msgstr "ėž‘ė—…ëŗ¸ęŗŧ 비ęĩí•˜ę¸°" #: ui/log.py:1030 msgid "Show changes against previous revision" msgstr "ė´ė „ ëĻŦëš„ė „ęŗŧ ė°¨ė´ė  ëŗ´ę¸°" #: ui/log.py:1036 msgid "Show changes between revisions" msgstr "ëĻŦëš„ė „ 간 ëŗ€ę˛Ŋ ëŗ´ę¸°" #: ui/log.py:1041 msgid "Update to this revision" msgstr "ė´ ëĻŦëš„ė „ ė—…ë°ė´íŠ¸" #: ui/log.py:1042 msgid "Update the selected path to this revision" msgstr "ė„ íƒí•œ ę˛Ŋ로ëĨŧ ė´ ë˛„ė „ėœŧ로 ė—…ë°ė´íŠ¸" #: ui/log.py:1047 msgid "Revert changes from this revision" msgstr "ė´ ë˛„ė „ė˜ ëŗ€ę˛Ŋ ė‚Ŧ항 되돌ëĻŦ기" #: ui/log.py:1048 msgid "Update the selected path by reverse merging the changes" msgstr "ëŗ€ę˛Ŋ ė‚Ŧí•­ė„ ė—­ ëŗ‘í•Ší•˜ė—Ŧ ė„ íƒí•œ ę˛Ŋ로 ė—…ë°ė´íŠ¸" #: ui/log.py:1053 msgid "Copy to clipboard" msgstr "클ëĻŊëŗ´ë“œė— ëŗĩė‚Ŧ" #: ui/log.py:1054 msgid "Copy to clipboard the full data of these revisions" msgstr "ė´ ëĻŦëš„ė „ë“¤ė˜ 렄랴 ë°ė´í„°ëĨŧ 클ëĻŊëŗ´ë“œė— ëŗĩė‚Ŧ" #: ui/log.py:1059 msgid "Edit author..." msgstr "ėž‘ė„ąėž ėˆ˜ė •..." #: ui/log.py:1064 msgid "Edit log message..." msgstr "로그 ëŠ”ė„¸ė§€ ėˆ˜ė •..." #: ui/log.py:1069 msgid "Edit revision properties..." msgstr "ëĻŦëš„ė „ ė†ė„ą ėˆ˜ė •..." #: ui/log.py:1347 msgid "(no author)" msgstr "" #: ui/log.py:1351 msgid "Edit author" msgstr "ėž‘ė„ąėž ėˆ˜ė •" #: ui/log.py:1363 msgid "Edit log message" msgstr "로그 ëŠ”ė„¸ė§€ ėˆ˜ė •" #: ui/settings.py:50 msgid "There was an error communicating with the status checker service." msgstr "ėƒíƒœ 검ė‚Ŧ ė„œëš„ėŠ¤ė™€ í†ĩė‹ í•˜ëŠ” ë™ė•ˆ 똤ëĨ˜ę°€ ë°œėƒí–ˆėŠĩ니다." #: ui/settings.py:56 msgid "default" msgstr "ę¸°ëŗ¸ę°’" #: ui/settings.py:57 msgid "locale" msgstr "ė‹ëŗ„ëœ 떏떴" #: ui/settings.py:58 msgid "ISO" msgstr "" #: ui/settings.py:167 msgid "Config file:" msgstr "네렕 파ėŧ:" #: ui/settings.py:359 msgid "Select a program" msgstr "프로그램 ė„ íƒ" #: ui/settings.py:368 msgid "Are you sure you want to clear your repository paths?" msgstr "ė €ėžĨė†Œ ę˛Ŋ로ëĨŧ ė§€ėš°ė‹œę˛ ėŠĩ니까?" #: ui/settings.py:375 msgid "Repository paths cleared" msgstr "ė €ėžĨė†Œ ę˛Ŋ로가 ė§€ė›ŒėĄŒėŠĩ니다" #: ui/settings.py:379 msgid "Are you sure you want to clear your previous messages?" msgstr "ė´ė „ ëŠ”ė„¸ė§€ëĨŧ ė§€ėš°ę˛ ėŠĩ니까?" #: ui/settings.py:386 msgid "Previous messages cleared" msgstr "ė´ė „ ëŠ”ė„¸ė§€ ė§€ė›ŒėĄŒėŠĩ니다" #: ui/settings.py:390 msgid "Are you sure you want to clear your authentication information?" msgstr "ė •ë§ ė¸ėĻ ė •ëŗ´ëĨŧ ė§€ėš°ę˛ ėŠĩ니까?" #: ui/settings.py:407 msgid "Authentication information cleared" msgstr "ė¸ėĻ ė •ëŗ´ę°€ ė§€ė›ŒėĄŒėŠĩ니다" #: ui/property_page.py:146 ui/property_page.py:152 msgid "Repository URL" msgstr "ė €ėžĨė†Œ URL" #: ui/revert.py:170 ui/revert.py:196 msgid "Running Revert Command..." msgstr "되돌ëĻŦ기(Revert) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/revert.py:172 ui/revert.py:198 msgid "Completed Revert" msgstr "되돌ëĻŦ기(Revert) ė™„ëŖŒ" #: ui/diff.py:317 msgid "View diff as side-by-side comparison" msgstr "나란히 비ęĩí•˜ė—Ŧ ė°¨ė´ė  ëŗ´ę¸°" #: ui/remotes.py:64 msgid "Remote Repository Manager" msgstr "ė›ę˛Š ė €ėžĨė†Œ 관ëĻŦėž" #: ui/remotes.py:65 msgid "Remote Repositories" msgstr "ė›ę˛Š ė €ėžĨė†Œ" #: ui/remotes.py:71 ui/properties.py:69 ui/property_editor.py:118 msgid "Name" msgstr "ė´ëĻ„" #: ui/remotes.py:71 msgid "Host" msgstr "í˜¸ėŠ¤íŠ¸" #: ui/reset.py:101 msgid "Running Reset Command..." msgstr "ëĻŦė…‹(Reset) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/reset.py:108 msgid "Completed Reset" msgstr "ëĻŦė…‹(Reset) ė™„ëŖŒ" #: ui/import.py:45 #, python-format msgid "Import - %s" msgstr "ę°€ė ¸ė˜¤ę¸° - %s" #: ui/import.py:67 msgid "The repository URL field is required." msgstr "ė €ėžĨė†Œ URL 필드는 í•„ėˆ˜ėž…ë‹ˆë‹¤." #: ui/import.py:80 msgid "Running Import Command..." msgstr "ę°€ė ¸ė˜¤ę¸°(Import) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/import.py:88 msgid "Completed Import" msgstr "ę°€ė ¸ė˜¤ę¸°(Import) ė™„ëŖŒ" #: ui/clean.py:70 msgid "Running Clean Command..." msgstr "ëš„ėš°ę¸°(Clean) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/clean.py:80 msgid "Completed Clean" msgstr "ëš„ėš°ę¸°(Clean) ė™„ëŖŒ" #: ui/lock.py:77 msgid "Locked" msgstr "ėž ęš€" #: ui/lock.py:126 msgid "Yes" msgstr "똈" #: ui/lock.py:162 msgid "Get Lock" msgstr "ėž ę¸ˆ" #: ui/lock.py:163 msgid "Running Lock Command..." msgstr "ėž ę¸ˆ(Lock) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/lock.py:172 msgid "Completed Lock" msgstr "ėž ę¸ˆ(Lock) ė™„ëŖŒ" #: ui/markresolved.py:84 msgid "Running Resolved Command..." msgstr "해결됨(Resolved) ëĒ…ë š ė‹¤í–‰ 뤑..." #: ui/markresolved.py:87 msgid "Completed Mark as Resolved" msgstr "해결됨(Resolved) ėœŧ로 í‘œė‹œ ė™„ëŖŒ" #: ui/properties.py:61 #, python-format msgid "Properties - %s" msgstr "ė†ė„ą - %s" #: ui/properties.py:69 ui/property_editor.py:118 msgid "Value" msgstr "값" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "ė†ė„ąė„ ė €ėžĨ하는 뤑뗐 ëŦ¸ė œę°€ ë°œėƒí–ˆėŠĩ니다." #: ui/property_editor.py:61 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" "및溠 : ė†ė„ą ëŗ€ę˛Ŋ ė‚Ŧí•­ė€ ėĻ‰ė‹œ ė ėšŠëŠë‹ˆë‹¤. 각 항ëĒŠė˜ ėƒí™Šė— 맞는 메뉴ëĨŧ " "ė‚ŦėšŠí•˜ė—Ŧ ëŗ€ę˛Ŋ ė‚Ŧí•­ė„ ę˛€í† í•˜ęŗ  ėˇ¨ė†Œ 할 눘 ėžˆėŠĩ니다.\n" #: ui/property_editor.py:66 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" "ëĒ¨ë“  파ėŧ 및 í•˜ėœ„ í´ë”ė—ė„œ ė„ íƒí•œ ė†ė„ąė„ ė‚­ė œ í•˜ė‹œę˛ ėŠĩ니까?\n" "ė´ 폴더 í•˜ėœ„ė˜ ëĒ¨ë“  파ėŧ 및 폴더?" #: ui/property_editor.py:108 msgid "File is not under version control." msgstr "파ėŧė´ ë˛„ė „ ė œė–´ëĨŧ ë°›ė§€ ė•ŠėŠĩ니다." #: ui/property_editor.py:118 msgid "Reserved" msgstr "똈ė•Ŋ" #: ui/property_editor.py:118 msgid "Status" msgstr "ėƒíƒœ" #: ui/property_editor.py:186 msgid "Unable to set new value for property." msgstr "ė†ė„ąė— 대한 냈 ę°’ė„ ė„¤ė •í•  눘 ė—†ėŠĩ니다." rabbitvcs-0.19/po/nb.po000066400000000000000000001325021445560650400150130ustar00rootroot00000000000000# Norwegian Bokmal translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-03-14 08:38+0000\n" "Last-Translator: Arne \n" "Language-Team: Norwegian Bokmal \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i sekund" msgstr[1] "%i sekunder" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i minutt" msgstr[1] "%i minutter" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i time" msgstr[1] "%i timer" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i dag" msgstr[1] "%i dager" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i uke" msgstr[1] "%i uker" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i mÃĨned" msgstr[1] "%i mÃĨneder" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i ÃĨr" msgstr[1] "%i ÃĨr" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "Avlus" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "Feil" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "Åpne skall" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "Oppfrisk status" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "Avlus tilbakestilling" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "Tilbakestill alt den ser" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "Innvalider" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "Tving et invalidate_extension_info() kall" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "Legg til emblem" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "Legg til et emblem" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "Sjekk ut..." #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "Sjekk ut en arbeidskopi" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "RVCS Oppdater" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "Oppdatert en arbeidskopi" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "RVCS Send inn" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "Send inn endringer til et arkiv" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "Arkivleser" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "Bla gjennom ett arkivtre" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "Sjekk for endringer..." #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "Sjekk for endringer i arkivet" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "Differansemeny..." #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "Liste over sammenlikningsopsjoner" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "Vis en differanse i forhold til basen" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "Vis endringene gjort i en fil" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "Vis differansen mellom filer/mapper" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "Vis differansen mellom to filer" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "Vis differanse i forhold til tidligere revisjon" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "Vis endringene i en fil siden den ble sist lagret" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "Sammenlikne med basen" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" "Sammenlikne med basen ved bruk av verktøy for ÃĨ sammenlikne ved siden av " "hverandre" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "Sammelikn filer/mapper" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "Sammenlikn differansen mellom to elementer" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "Sammenlikne med forrige versjon" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" "Sammenlikne med tidligere revisjon ved bruk av verktøy for ÃĨ sammenlikne ved " "siden av hverandre" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "Vis endringer..." #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "Vis endringer mellom stier og revisjoner" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "Vis logg" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "Vis en fils loggeinformasjon" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Legg til" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "Tidsplanlegg elementer som skal legges til i arkivet" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "Legg til ignoreringsliste" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "Oppdater til revisjon..." #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "Oppdatert en fil til en spesifikk revisjon" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "Endre navn..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "Tidsplanlegg et element for omnavning i arkivet" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "Slett" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "Tidsplanlegg et element for sletting fra arkivet" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "Tilbakestill" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "Tilbakestill et element til dens uendrere tilstand" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "Løs" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "Marker et element i konflikt som løst" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "Gjenopprett" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "Gjenopprett et manglende element" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "Omplasser..." #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "Omplasser din arbeidskopi" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "Ta lÃĨs..." #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "LÃĨs elementer lokalt" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "Frigi lÃĨs..." #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "Frigi lÃĨs pÃĨ et element" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Rensk opp" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "Rensk opp en arbeidskopi" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "Eksporter..." #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "Eksporter en arbeidskopi eller et arkiv uten versjonsinformasjon" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "Lag et arkiv her" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "Lag et arkiv i en mappe" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "Import" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "Importer et element til et arkiv" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "Gren/merke..." #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "Kopier et element til en annen plassering i arkivet" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "Flytt..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "Flytt plasseringen av en arbeidskopi i arkivet" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "Flett..." #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "En hjelper for fletting" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "Kommenter..." #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "Kommenter en fil" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "Lag lapp (patch)..." #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "Lager en forent differansefil med alle endringene du har gjort" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "Anvend lapp (patch)..." #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "Anvend en samlet differansefil pÃĨ arbeidskopien" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "Egenskaper" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "Vis egenskapene til et element" #: util/contextmenuitems.py:545 msgid "Help" msgstr "Hjelp" #: util/contextmenuitems.py:546 msgid "View help" msgstr "Vis hjelp" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "Innstillinger" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "Vis eller endre RabbitVCS innstillinger" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "Om" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "Om RabbitVCS" #: util/contextmenuitems.py:563 msgid "Open" msgstr "Åpne" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "Åpne en fil" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "Bla til" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "Bla til en fil eller mappe" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "Tilbakestill egenskap" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "Tilbakestill denne egenskapen til dens originale tilstand" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "Tilbakestill egenskap (rekursivt)" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" "Tilbakestill denne egenskapen til dens originale tilstand (rekursivt)" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "Slett egenskap" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "Slett denne egenskap" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "Slett denne egenskapen" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "Ignorer element basert pÃĨ filnavn" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "Ignorer element basert pÃĨ filetternavn" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "Oppdaterer..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "Fullført oppdatering" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "Oppdater til revisjon" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "Sjekk ut" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "Utsjekk fullført" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "Sti" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "Filetternavn" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Laster..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "Funnet %d element(er)" #: ui/add.py:157 msgid "Running Add Command..." msgstr "Kjører \"legg til\" kommando..." #: ui/add.py:159 msgid "Completed Add" msgstr "Fullført \"legg til\"" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "Revisjon:" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "Eksportert - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "ArkivURL og mÃĨlsti er begge pÃĨkrevde felt." #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Eksporter" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "Kjører eksportkommando..." #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "Fullført eksport" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "Anvend lapp (patch)" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "Anvend lapp (patch) pÃĨ katalog..." #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "Anvender lappefil (patch)..." #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "Lappefil anvendt" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "Dato" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "Melding" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "Importer - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "ArkivURLfelt er pÃĨkrevet" #: ui/import.py:81 msgid "Running Import Command..." msgstr "Kjører importkommando..." #: ui/import.py:89 msgid "Completed Import" msgstr "Import fullført" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "Endre navn" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "Nytt navn:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "Det nye navnefeltet er pÃĨkrevet." #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "Kjører omnavningskommando..." #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "Fullført omnavning" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "Tekststatus" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "Egenskapstatus" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "Kjører innsendingskommando..." #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "Fullført innsending" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "Status" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "Vis differanse som en \"ved siden av hverandre\" sammenlikning" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "Kjører flettetest" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "Fullført flettingstest" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "Kjører flettekommando" #: ui/merge.py:91 msgid "Completed Merge" msgstr "Fullført fletting" #: ui/merge.py:102 msgid "Merge" msgstr "Flett" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" "En feil oppstod i RabbitVCS-utvidelsen. Vennligst kontakt RabbitVCS team med feildetaljene under:" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Velg en mappe" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "til" #: ui/dialog.py:261 msgid "Select a File" msgstr "Velg en fil" #: ui/dialog.py:280 msgid "Save As..." msgstr "Lagre som..." #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "Er du sikker pÃĨ at du vil fortsette?" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "det/de valgte element" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "La til en mappe i arkivet" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "Kjører tilbakestillkommando..." #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "Fullført tilbakestill" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "Fra og til -URLfeltene er begge pÃĨkrevet." #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "Omplasser" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "Kjører omplasseringskommando..." #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "Fullført ommplassering" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "Revisjon" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "Opphavsmann" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "Vis samlet differanse" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "Sammenlikne ved siden av hverandre" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "Kjører løs-kommando..." #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "Fullfør løs" #: ui/changes.py:49 msgid "More Actions..." msgstr "Flere handlinger..." #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "Endre" #: ui/changes.py:279 msgid "Property Change" msgstr "Endre egenskap" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Ja" #: ui/changes.py:321 msgid "No" msgstr "Nei" #: ui/changes.py:410 msgid "Open from first revision" msgstr "Åpne fra første revisjon" #: ui/changes.py:415 msgid "Open from second revision" msgstr "Åpne fra andre revisjon" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "Kan ikke kommentere en katalog" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "Kommenter - %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Linje" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Tekst" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "\"Fra revisjon\" -feltet mÃĨ vÃĻre et heltall" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "Logg - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "I/T" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "Handling" #: ui/log.py:338 msgid "Copy From Path" msgstr "Kopier fra sti" #: ui/log.py:338 msgid "Copy From Revision" msgstr "Kopier fra revisjon" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "Vis differanse i forhold til arbeidskopi" #: ui/log.py:791 msgid "View diff between revisions" msgstr "Vis differanse mellom revisjoner" #: ui/log.py:796 msgid "Compare with working copy" msgstr "Sammenlikne med arbeidskopi" #: ui/log.py:806 msgid "Compare revisions" msgstr "Sammenlikne revisjoner" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "Vis endringer mellom revisjoner" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "Rediger forfatter..." #: ui/log.py:837 msgid "Edit log message..." msgstr "Rediger loggemelding..." #: ui/log.py:841 msgid "Edit revision properties..." msgstr "Rediger revisjonsegenskaper..." #: ui/log.py:1047 msgid "Edit author" msgstr "Rediger forfatter" #: ui/log.py:1059 msgid "Edit log message" msgstr "Rediger loggemelding" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "Ukjent" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "Engelsk" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "Velg et program" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "Er du sikker pÃĨ at du vil nullstille arkivstien?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "Arkivsti nullstilt" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "Er du sikker pÃĨ at du vil nullstille din forrige melding?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "Forrige melding nullstilt" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "Er du sikker pÃĨ at du vil nullstille autentiseringsinformasjonen?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "Autentiseringsinformasjonen nullstilt" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "FÃĨr ikke tak i egenskapsliste" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "Du mÃĨ oppgi en mÃĨlsti." #: ui/branch.py:115 msgid "Branch/tag" msgstr "Gren/merke" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "Kjører gren/merke-kommando..." #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "Fullført gren/merke" #: ui/lock.py:73 msgid "Locked" msgstr "LÃĨst" #: ui/lock.py:167 msgid "Get Lock" msgstr "LÃĨs" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "Kjører lÃĨsekommando..." #: ui/lock.py:177 msgid "Completed Lock" msgstr "Fullført lÃĨsing" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "Arkivplasseringen er et pÃĨkrevet felt." #: ui/switch.py:80 msgid "Switch" msgstr "Flytt" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "Kjører flyttekommando..." #: ui/switch.py:89 msgid "Completed Switch" msgstr "Fullført flytting" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "HODE" #: ui/widget.py:860 msgid "Number" msgstr "Nummer" #: ui/widget.py:861 msgid "Working Copy" msgstr "Arbeidskopi" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "Vert:" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "Sjekk ut - %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "Kjører utsjekkommando..." #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "Navn" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "Lag lapp (patch)" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "Den oppgitte stien peker ikke til en arbeidskopi" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "Lager lappefil (patch)..." #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "Lappefil (patch) laget" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "Egenskaper - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "Verdi" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "Det oppstod et problem med lagring av egenskapene." #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" "Merknad: egenskapsendringer utføres umiddelbart. Du kan se over og " "angre endringer vha. snarveimenyen pÃĨ hvert element.\n" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" "Ønsker du ÃĨ slette valgte egenskaper fra alle filer og mapper\n" "under denne mappen?" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "Fila er ikke underlagt versjonskontroll." #: ui/property_editor.py:112 msgid "Reserved" msgstr "Reservert" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "Klarer ikke ÃĨ sette ny verdi for egenskap." #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "Mimetype" #: ui/action.py:338 msgid "Finished" msgstr "Fullført" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - fullført" #: ui/action.py:365 msgid "Log Message" msgstr "Loggmelding" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "LÃĨs opp" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "Kjører lÃĨs opp kommando..." #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "Fullfør lÃĨs opp" #: ui/browser.py:89 msgid "Size" msgstr "Størrelse" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "Lag mappe..." #: ui/browser.py:353 msgid "Copy to..." msgstr "Kopier til..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "Kopier URL til utklippsbord" #: ui/browser.py:363 msgid "Move to..." msgstr "Flytt til..." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "Hvor ønsker du ÃĨ kopiere utvalget til?" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "Ny plassering" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "Hvor ønsker du ÃĨ flytte utvalget?" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "Rensker opp..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "Opprensking fullført" #: ui/create.py:46 msgid "Repository successfully created" msgstr "Arkiv vellykket opprettet" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" "En feil oppstod ved opprettelse av arkiv. Sørg for at den oppgitte mappen er " "tom." #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Egenskaper for:" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "Valgte egenskaper vil bli anvendt rekursivt." #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "Slett egenskaper rekursivt" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "Rediger..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "Ny..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "URL/Sti:" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "Last/oppdater" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "Legg til melding" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "Sertifikatdetaljer" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "Rediger egenskapsdetaljer" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "Mappenavn" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "Melding" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "" "Vennligst legg til dine autentiseringsdetaljer (identifikasjon)" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "Vennligst oppgi din ssl sertifikatfil" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "Forrige melding" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" "Er du sikker pÃĨ at du vil slette %item%?" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "RabbitVCS feil" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "Aksepter for alltid" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "Aksepter en gang" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "Anvend egenskap rekursivt" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "Autentisering" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "Sjekk sertifikat" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "Bekreftelse" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "Opprett mappe..." #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "Slettebekreftelse" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "Avvis" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "Fingeravtrykk:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "Utsteder:" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "Logg inn:" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "Passord:" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "Sti:" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "Tidligere meldinger" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "Egenskap" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "Egenskap:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "RabbitVCS feil" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "OmrÃĨde:" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "SSL klientsertifikat" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "Lagre autentisering" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "Tekstendring" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "Elementene vil bli sendt til søppeldunken." #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "Gyldig:" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "Verdi:" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "Lenker" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "Versjonsinformasjon" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Forfattere:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Takk:" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "Berørte fil(er) (dobbeltklikk for ÃĨ sammenlikne med basen)" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "Revisjonstabell" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Grense:" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "Logg" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "Oppdater" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "Viser revisjoner:" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "Stopp ved kopi" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "Opprensking forespurt...\n" "\n" "Start arbeidskopiopprensking?" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "Autentisering" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "Loggmeldinger" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "Loggeopsjoner" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "Program benyttet for ÃĨ sammenlikne filer" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "URL historikk" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "Bla gjennom..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "Fjern all autentiseringsinformasjonen" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "Muliggjør emblemer" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "Muliggjør filattributter" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "Muliggjør rekkursiv statussjekk" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "Eksterne programmer" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "Generelt" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "SprÃĨk:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "Logging" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "MinimumsnivÃĨ for logging" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "Antall URLer som huskes" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "Antall meldinger som huskes" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "Lagrede data" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "Vis RabbitVCS sine avlusingsverktøy" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" "Avlusingsmenyen benyttes for ÃĨ diangostisere problemer med RabbitVCS selv" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "Type:" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "Filer til lÃĨsing" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "Vennligst beskriv hvorfor du lÃĨser disse filene" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "LÃĨs filer" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "Velg/avvelg alt" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "Stjel lÃĨser" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "Fra revisjon" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "Til revisjon" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "Kommenter" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "Endrede filer (dobbeltklikk for ÃĨ sammenlikne med basen)" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "Send inn til:" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "Vis ikke-versjonerte filer" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Varslingsmeldinger" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "Fjerntliggende URI:" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "Arbeidskopi:" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "Legg til en egenskap." #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "Lukk dette dialogvindu." #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "Egenskpasredigering" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "Oppdatert egenskapslisten" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "Endre arkiv for arbeidskopien" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "Fra:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "Til:" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "Alternativer" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "Revisjon" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "Utelat eksterne" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "Rekursiv" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "Importmelding" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "Arkiv" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "Inkluder ignorerte filer" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "Fra URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "Fra: (URL og revisjon som skal flettes)" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "Revisjonsutvalg" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "Til: (URL og revisjon som skal flettes)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "URL det skal flettes fra" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "Arbeidskopi" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "Velg denne metoden hvis du har gjort endringer i grenen og ønsker ÃĨ flette " "dine endringer med en annen gren." #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "Velg denne metoden hvis du ønsker ÃĨ flette to forskjellige grener inn i din " "arbeidskopi." #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "Ignorer stamfedre" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "Fletteassistent" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "Flett et utvalg av revisjoner" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "Flett to forskjellige trÃĻr" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "Kun marker fletting (ikke utfør)" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "Vis logg" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "Testflett" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" "Bruk loggknappen (til høyre for revisjonsutvalgsfeltet) til ÃĨ velge " "revisjonen du ønsker ÃĨ flette. Eller skriv revisjonene manuelt, hver " "separert med komma. Du kan spesifisere et revisjonsutvalg med en bindestrek. " "\n" "\n" "Eksempel: 4-7,9,11,15-HEAD\n" "\n" "La boksen vÃĻre tom for ÃĨ flette alle revisjoner." #~ msgid "Deleted" #~ msgstr "Slettet" #~ msgid "Copied" #~ msgstr "Kopiert" rabbitvcs-0.19/po/nl.po000066400000000000000000001372751445560650400150410ustar00rootroot00000000000000# Dutch translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-12-09 15:20+0000\n" "Last-Translator: Reinout van Schouwen \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Poedit-Language: Dutch\n" #: util/helper.py:109 msgid "just now" msgstr "nu net" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "%d minu(u)t(en) geleden" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i seconde" msgstr[1] "%i seconden" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i minuut" msgstr[1] "%i minuten" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i uur" msgstr[1] "%i uur" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i dag" msgstr[1] "%i dagen" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i week" msgstr[1] "%i weken" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i maand" msgstr[1] "%i maanden" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i jaar" msgstr[1] "%i jaar" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "Debuggen" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "Fouten" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "Shell openen" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "Verversingsstatus" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "Debug-terugdraaien" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "Alles in zicht terugdraaien" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "Ongeldig maken" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "Aanroep van invalidate_extension_info() afdwingen" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "Embleem toevoegen" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "Een embleem toevoegenâ€Ļ" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "Uitcheckenâ€Ļ" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "Een werkversie uitchecken" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "Updaten" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "Een werkversie updaten" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "Commit" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "Aanpassingen committen in het repository" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "RabbitVCS SVN" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "RabbitVCS Git" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "Bladeren door repository" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "Een repository-boom doorbladeren" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "Controleren op aanpassingenâ€Ļ" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "Controleren op wijzigingen die aan het repository zijn gemaakt" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "Diff-menuâ€Ļ" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "Lijst van vergelijkingsopties" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "Diff ten opzichte van basis bekijken" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "De wijzigingen aan een bestand bekijken" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "Diff tussen bestanden/mappen bekijken" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "De verschillen tussen twee bestanden bekijken" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "Diff ten opzichte van eerdere revisie bekijken" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "De aanpassingen aan een bestand sinds de laatste wijziging bekijken" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "Vergelijken met basis" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" "Met basisversie vergelijken met behulp van naast-elkaar-vergelijkprogramma" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "Bestanden/mappen vergelijken" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "De verschillen tussen twee items vergelijken" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "Vergelijken met eerdere revisie" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" "Vergelijken met eerdere revisie met behulp van naast-elkaar-" "vergelijkprogramma" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "Wijzigingen weergevenâ€Ļ" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "Wijzigingen tussen paden en revisies tonen" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "Logboek tonen" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "De logboekinformatie over een bestand tonen" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Toevoegen" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "Items klaarzetten om toegevoegd te worden aan het repository" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "Voeg toe aan negeer lijst" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "Updaten naar revisieâ€Ļ" #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "Updaten naar een specifieke revisie" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "Hernoemenâ€Ļ" #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "Een item klaarzetten om hernoemd te worden in het repository" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "Verwijderen" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "Een item klaarzetten om verwijderd te worden uit het repository" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "Terugdraaien" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "Een item terugzetten naar zijn ongemodificeerde staat" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "Oplossen" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "Een item in conflict markeren als opgelost" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "Terugzetten" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "Een ontbrekend item herstellen" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "Verhuizenâ€Ļ" #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "Uw werkversie verhuizen" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "Blokkering verkrijgenâ€Ļ" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "Items lokaal blokkeren" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "Blokkering vrijgevenâ€Ļ" #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "Blokkering op een item vrijgeven" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Opruimen" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "Werkversie opschonen" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "Exporterenâ€Ļ" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" "Een werkversie of repository exporteren zonder versiebeheer-informatie" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "Hier een repository aanmaken" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "Repository in een map aanmaken" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "Importeren" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "Item importeren in een repository" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "Branch/tagâ€Ļ" #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "Een item kopiÃĢren naar een andere locatie in het repository" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "Wisselenâ€Ļ" #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "De repository-locatie van een werkversie wijzigen" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "Samenvoegenâ€Ļ" #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "Een wizard met samenvoegstappen" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "Annoterenâ€Ļ" #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "Een bestand annoteren" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "Patch aanmakenâ€Ļ" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" "Maakt een geÃŧnificeerd diff-bestand met al de wijzigingen die u gemaakt heeft" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "Patch toepassenâ€Ļ" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "Past een geÃŧnificeerd diff-bestand toe op de werkversie" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "Eigenschappen" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "De eigenschappen van een item bekijken" #: util/contextmenuitems.py:545 msgid "Help" msgstr "Hulp" #: util/contextmenuitems.py:546 msgid "View help" msgstr "Hulp weergeven" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "Instellingen" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "RabbitVCS-instellingen bekijken of wijzigen" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "Over" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "Info over RabbitVCS" #: util/contextmenuitems.py:563 msgid "Open" msgstr "Open" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "Bestand openen" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "Bladeren naar" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "Naar een bestand of map navigeren" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "Eigenschap terugdraaien" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "Deze eigenschap terugdraaien naar haar oorspronkelijke staat" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "Eigenschap terugdraaien (recursief)" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" "Deze eigenschap terugdraaien naar haar oorspronkelijke staat (recursief)" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "Eigenschap verwijderen" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "Deze eigenschap verwijderen" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "Eigenschap verwijderen (recursief)" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "Deze eigenschap verwijderen (recursief)" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "Details bewerken" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "Eigenschapdetails tonen en bewerken" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "Repository initialiseren" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "Klonen" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "Fetch/Pull" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "Push" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "Branches" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "Tags" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "Item negeren per bestandsnaam" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "Item negeren per extensie" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "Updaten..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "Update is voltooid" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "Terugdraaien naar revisie" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "Terugdraaienâ€Ļ" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "Terugdraaien voltooid" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "Updaten naar revisie" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "Uitchecken" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "Uitchecken van %sâ€Ļ" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "Uitchecken voltooid" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "Pad" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "Extensie" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Laden..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "%d item(s) gevonden" #: ui/add.py:157 msgid "Running Add Command..." msgstr "Wordt toegevoegd..." #: ui/add.py:159 msgid "Completed Add" msgstr "Toevoegen klaar" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "Bestand negeren:" #: ui/tags.py:62 msgid "Tag Manager" msgstr "Tagbeheer" #: ui/tags.py:63 msgid "Tags" msgstr "Tags" #: ui/tags.py:74 msgid "Tag" msgstr "Tag" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "Name:" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "Revisie:" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "Message:" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "Opslaan" #: ui/tags.py:153 msgid "Tagger:" msgstr "Tagger:" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "Datum:" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "Wilt u %s echt verwijderen?" #: ui/tags.py:275 msgid "Add Tag" msgstr "Tag toevoegen" #: ui/tags.py:293 msgid "Tag Detail" msgstr "Tagdetail" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "Exporteren — %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "De repository URL en doel pad velden zijn beide verplicht." #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Exporteren" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "Wordt geÃĢxporteerd..." #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "Export is klaar" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "Patch toepassen" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "Patch op map toepassen..." #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "Patchbestand toepassen..." #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "Patchbestand toegepast" #: ui/branches.py:62 msgid "Branch Manager" msgstr "Branchbeheer" #: ui/branches.py:63 msgid "Branches" msgstr "Branches" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "Branch" #: ui/branches.py:110 msgid "Start Point:" msgstr "Startpunt:" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "Geschiedenis van oude branch behouden" #: ui/branches.py:138 msgid "Set as active branch" msgstr "Als actieve branch instellen" #: ui/branches.py:280 msgid "Add Branch" msgstr "Branch toevoegen" #: ui/branches.py:304 msgid "Branch Detail" msgstr "Branchdetail" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "Datum" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "Boodschap" #: ui/push.py:97 msgid "Running Push Command..." msgstr "Uitvoeren Push-opdrachtâ€Ļ" #: ui/push.py:99 msgid "Completed Push" msgstr "Push voltooid" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "Importeren — %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "Het repository URL veld is verplicht." #: ui/import.py:81 msgid "Running Import Command..." msgstr "Wordt geïmporteerd..." #: ui/import.py:89 msgid "Completed Import" msgstr "Importeren klaar" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "Het bestand of de map die werd gevraagd bestaat niet." #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "Hernoemen" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "Nieuwe naam:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "Het veld 'nieuwe naam' is verplicht." #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "Uitvoeren rename-opdrachtâ€Ļ" #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "Hernoemen voltooid" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "Tekst-status" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "Eigenschapsstatus" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "Commit-opdracht uitvoerenâ€Ļ" #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "Commit voltooid" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "Status" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "Diff als naast-elkaar-vergelijking bekijken" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "Samenvoegtest draaien" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "Samenvoegtest voltooid" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "Bezig met uitvoeren van merge-opdracht" #: ui/merge.py:91 msgid "Completed Merge" msgstr "Samenvoegen voltooid" #: ui/merge.py:102 msgid "Merge" msgstr "Samenvoegen" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "Auteur:" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" "Er is een fout opgetreden in de RabbitVCS Nautilus-extensie. Neem contact op " "met het RabbitVCS-team met de hieronder vermelde " "foutdetails:" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Selecteer een map" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "naar" #: ui/dialog.py:261 msgid "Select a File" msgstr "Selecteer een bestand" #: ui/dialog.py:280 msgid "Save As..." msgstr "Opslaan alsâ€Ļ" #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "Weet je zeker dat je wil verdergaan?" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "de geselecteerde item(s)" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "Map toegevoegd aan het repository" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "Bezig met uitvoeren revert-opdrachtâ€Ļ" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "Terugdraaien voltooid" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "Uitvoeren van kloon-opdrachtâ€Ļ" #: ui/clone.py:73 msgid "Completed Clone" msgstr "Klonen voltooid" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "De 'vanaf' en 'tot' url velden zijn beide verplicht." #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "Verhuizen" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "Uitvoeren relocate-opdrachtâ€Ļ" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "Verhuizen voltooid" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "Revisie" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "Auteur" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "GeÃŧnificeerde diff bekijken" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "Naast elkaar vergelijken" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "Bezig met uitvoeren resolve-opdrachtâ€Ļ" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "Oplossen voltooid" #: ui/changes.py:49 msgid "More Actions..." msgstr "Meer acties..." #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "Verandering" #: ui/changes.py:279 msgid "Property Change" msgstr "Eigenschap-wijziging" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Ja" #: ui/changes.py:321 msgid "No" msgstr "Nee" #: ui/changes.py:410 msgid "Open from first revision" msgstr "Openen vanaf eerste revisie" #: ui/changes.py:415 msgid "Open from second revision" msgstr "Openen vanaf tweede revisie" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "Kan een map niet annoteren" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "Annoteren — %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Regel" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Tekst" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "De 'vanaf' revisie moet een integer zijn." #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "Logboek — %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "N.v.t." #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "Actie" #: ui/log.py:338 msgid "Copy From Path" msgstr "KopiÃĢren van pad" #: ui/log.py:338 msgid "Copy From Revision" msgstr "KopiÃĢren van revisie" #: ui/log.py:556 msgid "Graph" msgstr "Grafiek" #: ui/log.py:781 msgid "View diff against working copy" msgstr "Diff ten opzichte van werkversie bekijken" #: ui/log.py:791 msgid "View diff between revisions" msgstr "Diff tussen revisies tonen" #: ui/log.py:796 msgid "Compare with working copy" msgstr "Vergelijken met werkversie" #: ui/log.py:806 msgid "Compare revisions" msgstr "Revisies vergelijken" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "Wijzigingen tonen ten opzichte van vorige revisie" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "Wijzigingen tussen revisies tonen" #: ui/log.py:823 msgid "Update to this revision" msgstr "Updaten naar deze revisie" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "Het geselecteerde pad updaten naar deze revisie" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "Auteur bewerkenâ€Ļ" #: ui/log.py:837 msgid "Edit log message..." msgstr "Logboekmelding bewerkenâ€Ļ" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "Revisie-eigenschappen bewerkenâ€Ļ" #: ui/log.py:1047 msgid "Edit author" msgstr "Auteur bewerken" #: ui/log.py:1059 msgid "Edit log message" msgstr "Logboekmelding bewerken" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "Onbekend" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" "Er is een fout opgetreden bij het communiceren met de statuscontroledienst." #: ui/settings.py:59 msgid "English" msgstr "Engels" #: ui/settings.py:119 msgid "Config file:" msgstr "Configuratiebestand:" #: ui/settings.py:294 msgid "Select a program" msgstr "Selecteer een programma" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "Weet u zeker dat u uw repositorypaden wilt wissen?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "Repository paden gewist" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "Weet u zeker dat u uw vorige berichten wilt wissen?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "Vorige berichten gewist" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "Weet u zeker dat u uw authenticatie-informatie wilt wissen?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "Authenticatie-informatie gewist" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "Niet in staat eigenschappenlijst op te halen" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "Een doel pad is verplicht." #: ui/branch.py:115 msgid "Branch/tag" msgstr "Branch/tag" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "Branch/tag wordt uitgevoerd..." #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "Branch/tag is klaar" #: ui/lock.py:73 msgid "Locked" msgstr "Vergrendeld" #: ui/lock.py:167 msgid "Get Lock" msgstr "Vergrendelen" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "Wordt vergrendeld..." #: ui/lock.py:177 msgid "Completed Lock" msgstr "Vergrendelen is klaar" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "De repository-locatie is een vereist veld." #: ui/switch.py:80 msgid "Switch" msgstr "Wisselen" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "Bezig met uitvoeren switch-opdrachtâ€Ļ" #: ui/switch.py:89 msgid "Completed Switch" msgstr "Wisselen voltooid" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "HEAD" #: ui/widget.py:860 msgid "Number" msgstr "Nummer" #: ui/widget.py:861 msgid "Working Copy" msgstr "Werkversie" #: ui/widget.py:1056 msgid "Repository:" msgstr "Repository:" #: ui/widget.py:1075 msgid "Branch:" msgstr "Branch:" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "Hostcomputer:" #: ui/widget.py:1194 msgid "Add line:" msgstr "Regel toevoegen:" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "Uitchecken — %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "Uitvoeren checkout-opdrachtâ€Ļ" #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "Afstandrepository-beheer" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "Repository's op afstand" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "Naam" #: ui/remotes.py:66 msgid "Host" msgstr "Host" #: ui/property_page.py:126 msgid "Repository URL" msgstr "Repository-URL" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "Patch aanmaken" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "Het gegeven pad is geen werk kopie" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "Bezig met maken van patch-bestandâ€Ļ" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "Patch-bestand aangemaakt" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "Eigenschappen — %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "Waarde" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "Er trad een probleem op bij het opslaan van uw eigenschappen." #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" "Merk op: veranderingen aan eigenschappen worden direct doorgevoerd. U " "kunt veranderingen herzien en ongedaan maken met behulp van het contextmenu " "voor elk item.\n" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" "Wilt u de geselecteerde eigenschappen van alle bestanden en submappen\n" "onder deze map verwijderen?" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "Bestand is niet onder versiebeheer" #: ui/property_editor.py:112 msgid "Reserved" msgstr "Gereserveerd" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "Niet in staat nieuwe waarde voor eigenschap in te stellen." #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" "U dient een versiecontrolesysteem op te geven met de optie --vcs [svn|git]" #: ui/action.py:118 msgid "Mime Type" msgstr "Mime type" #: ui/action.py:338 msgid "Finished" msgstr "Klaar" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - klaar" #: ui/action.py:365 msgid "Log Message" msgstr "Logboekmelding" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "Ontgrendelen" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "Bezig met uitvoeren unlock-opdrachtâ€Ļ" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "Unlock voltooid" #: ui/browser.py:89 msgid "Size" msgstr "Grootte" #: ui/browser.py:326 msgid "Select" msgstr "Selecteren" #: ui/browser.py:348 msgid "Create folder..." msgstr "Map maken..." #: ui/browser.py:353 msgid "Copy to..." msgstr "KopiÃĢren naar..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "Locatie naar het klembord kopiÃĢren" #: ui/browser.py:363 msgid "Move to..." msgstr "Verplaatsen naar..." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "Waarheen wilt u de selectie kopiÃĢren?" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "Nieuwe locatie:" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "Waarheen wilt u de selectie verplaatsen?" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "Wordt opgeruimd..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "Opruimen voltooid" #: ui/create.py:46 msgid "Repository successfully created" msgstr "Repository succesvol aangemaakt" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" "Er is een fout opgetreden bij het aanmaken van het repository. Zorg ervoor " "dat de opgegeven map leeg is." #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Eigenschappen voor:" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "Geselecteerde eigenschappen worden recursief toegepast." #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "Eigenschappen recursief verwijderen" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "Bewerken..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "Nieuwâ€Ļ" #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "URL/Pad:" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "Laden/verversen" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "Er is een conflict gevonden in het volgende bestand:" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "Boodschap Toevoegen" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "Certificaatdetails" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "Eigenschapdetails bewerken" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "Voer naam- en e-maildetails in" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "Mapnaam" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "Bericht" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "Gelieve uw authenticatiedetails toe te voegen" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "Geef alstublieft uw ssl certification-bestand" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "Eerdere berichten" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" "Weet u zeker dat u %item% wilt " "verwijderen?" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "RabbitVCS-fout" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "Voor altijd accepteren" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "Van mij accepteren" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "Eenmalig accpeteren" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "Van hen accepteren" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "Eigenschap recursief toepassen" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "Authenticatie" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "Annuleren" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "Certificaat controleren" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "Bevestiging" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "Beslissing op conflictoplossing" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "Map aanmakenâ€Ļ" #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "Verwijderen bevestigen" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "Weigeren" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "E-mail:" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "Vingerafdruk:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "Hoe wilt u dit afhandelen?" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "Uitgever:" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "Aanmeldnaam:" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "Handmatig samenvoegen" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "Naam en e-mail" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "Wachtwoord:" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "Pad:" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "Vorige boodschappen" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "Eigenschap" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "Eigenschap:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "RabbitVCS-fout" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "Omgeving:" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "SSL-gebruikerscertificaat" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "Authenticatie opslaan" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "Tekstwijziging" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "De item(s) worden in de prullenbak gegooid." #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "Geldig:" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "Waarde:" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "Informatie over pull" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "Wijzigingen samenvoegen in lokale branch" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "Pull" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "label" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "Koppelingen" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "Versie Informatie" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Auteurs:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Met dank aan:" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "Inhoudstatus:" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "Eigenschapsstatus:" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "VCS:" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" "Betrokken bestand(en) (dubbelklik om te vergelijken met basis)" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "Revisietabel" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Limiet:" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "Logboek" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "Verversen" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "Getoonde revisies:" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "Op kopie stoppen" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "Opschonen aangevraagdâ€Ļ\n" "\n" "Beginnen met opschonen van werkversie?" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "Authenticatie" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "Checkertype:" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "Configuratie-editor" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "Logboekberichten" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "Logboek-opties" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "Geheugengebruik: " #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "Andere informatie" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "Proces-ID:" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "Programma voor bestandsvergelijking" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "URL-geschiedenis" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "Bladerenâ€Ļ" #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "Uw authenticatie-informatie wissen" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "Emblemen inschakelenâ€Ļ" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "Bestandskenmerken inschakelen" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "Recursieve statuscontroles inschakelen" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "Externe programma's" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "Algemeen" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "Git" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "Taal:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "Logboek" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "Minimumniveau voor loggen" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "Het aantal te onthouden URLs" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "Het aantal te onthouden berichten" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "Informatie verversen" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "Checker herstarten" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "Opgeslagen data" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "RabbitVCS-debughulpprogramma's tonen" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "Nieuwe versie tonen aan de linkerkant" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "Statuschecker" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "Stopchecker" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" "Het debugmenu is bedoeld om problemen met RabbitVCS zelf te diagnosticeren" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "Type:" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "Te vergrendelen bestanden" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "Beschrijf waarom u deze bestanden vergrendelt" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "Bestanden vergrendelen" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "Alles (de)selecteren" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "De blokkeringen stelen" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "Van Revisie" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "Naar Revisie" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "Annoteren" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "Bestanden negeren en uitsluiten van gevolgd worden" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "Negeren" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "Gewijzigde bestanden (dubbelklik om met basis te vergelijken)" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "Committen naar:" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "Bestanden buiten versiebeheer tonen" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Meldingen" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "URI op afstand:" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "Werkversie:" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "Nieuwe eigenschap toevoegen." #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "Dit dialoogvenster sluiten." #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "Eigenschappen-editor" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "De eigenschappenlijst verversen" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "Het repository van uw werkversie veranderen" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "Van:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "Naar:" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "Opties" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "Lokale repository updaten" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "Revisie" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "Externen overslaan" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "Recursief" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "Terugdraaien naar opgegeven revisienummer" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "Bericht importeren" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "Repository" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "Genegeerde bestanden meenemen" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "Van URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "Van: (Samen te voegen URL en revisie)" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "Revisiebereik" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "Naar: (samen te voegen URL en revisie)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "URL waarvandaan samen te voegen" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "Werkversie" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "Gebruik deze methode als u wijzigingen hebt gemaakt aan een branch en uw " "wijzigingen wilt samenvoegen met een andere branch." #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "Gebruik deze methode als u twee verschillende branches wilt samenvoegen naar " "uw werkversie." #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "Voorgeschiedenis negeren" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "Samenvoeg-assistent" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "Een reeks revisies samenvoegen" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "Twee verschillende bomen samenvoegen" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "Alleen het samvoegen opnemen" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "Toon log" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "Test-samenvoegen" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" #~ msgid "Completed" #~ msgstr "Klaar" #~ msgid "(no author)" #~ msgstr "(geen auteur)" rabbitvcs-0.19/po/oc.po000066400000000000000000001130101445560650400150060ustar00rootroot00000000000000# Occitan (post 1500) translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-05-06 06:27+0000\n" "Last-Translator: CÊdric VALMARY (Tot en Ã˛c) \n" "Language-Team: Occitan (post 1500) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i segonda" msgstr[1] "%i segondas" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i minuta" msgstr[1] "%i minutas" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i ora" msgstr[1] "%i oras" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i jorn" msgstr[1] "%i jorns" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i setmana" msgstr[1] "%i setmanas" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i mes" msgstr[1] "%i meses" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i annada" msgstr[1] "%i annadas" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "Desbugatge" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "Bugs" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "Metre a jorn" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "Validar" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Apondre" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "" #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "Tornar nomenar..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "Suprimir" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "Restablir" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "Restablir" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "" #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "" #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Netejar" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "Exportar..." #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "Importar" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "" #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "Bascuolar..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "Fusionar..." #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "" #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "Crear un correctiu..." #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "Aplicar lo correctiu..." #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "Proprietats" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "" #: util/contextmenuitems.py:545 msgid "Help" msgstr "Ajuda" #: util/contextmenuitems.py:546 msgid "View help" msgstr "" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "Paramètres" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "A prepaus" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "" #: util/contextmenuitems.py:563 msgid "Open" msgstr "Dobrir" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "Dobrir un fichièr" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "En cors de mesa a jorn..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "Camin" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "Extension" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Cargament en cors..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "" #: ui/add.py:157 msgid "Running Add Command..." msgstr "" #: ui/add.py:159 msgid "Completed Add" msgstr "" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "Revision :" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "" #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Exportar" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "" #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "" #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "Data" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "Messatge" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "Importacion - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "" #: ui/import.py:81 msgid "Running Import Command..." msgstr "" #: ui/import.py:89 msgid "Completed Import" msgstr "" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "Tornar nomenar" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "Nom novèl :" #: ui/rename.py:60 msgid "The new name field is required" msgstr "" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "" #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "" #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "Estat" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "" #: ui/merge.py:91 msgid "Completed Merge" msgstr "" #: ui/merge.py:102 msgid "Merge" msgstr "Fusionar" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "a" #: ui/dialog.py:261 msgid "Select a File" msgstr "Seleccionatz un fichièr" #: ui/dialog.py:280 msgid "Save As..." msgstr "Enregistrar jos..." #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "Revision" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "Autor" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "" #: ui/changes.py:49 msgid "More Actions..." msgstr "D'accions mai..." #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "Modificar" #: ui/changes.py:279 msgid "Property Change" msgstr "" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Òc" #: ui/changes.py:321 msgid "No" msgstr "Non" #: ui/changes.py:410 msgid "Open from first revision" msgstr "" #: ui/changes.py:415 msgid "Open from second revision" msgstr "" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Linha" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Tèxte" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "N/A" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "Accion" #: ui/log.py:338 msgid "Copy From Path" msgstr "" #: ui/log.py:338 msgid "Copy From Revision" msgstr "" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "" #: ui/log.py:791 msgid "View diff between revisions" msgstr "" #: ui/log.py:796 msgid "Compare with working copy" msgstr "" #: ui/log.py:806 msgid "Compare revisions" msgstr "" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "" #: ui/log.py:837 msgid "Edit log message..." msgstr "" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1047 msgid "Edit author" msgstr "" #: ui/log.py:1059 msgid "Edit log message" msgstr "" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "Desconegut" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "AnglÊs" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "" #: ui/branch.py:115 msgid "Branch/tag" msgstr "" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "" #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "" #: ui/lock.py:73 msgid "Locked" msgstr "Varrolhat" #: ui/lock.py:167 msgid "Get Lock" msgstr "" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "" #: ui/lock.py:177 msgid "Completed Lock" msgstr "" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "" #: ui/switch.py:80 msgid "Switch" msgstr "" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "" #: ui/switch.py:89 msgid "Completed Switch" msgstr "" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "" #: ui/widget.py:860 msgid "Number" msgstr "Numèro" #: ui/widget.py:861 msgid "Working Copy" msgstr "" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "Òste :" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "" #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "Nom" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "Proprietats - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "Valor" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:112 msgid "Reserved" msgstr "Reservat" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "Tipe MIME" #: ui/action.py:338 msgid "Finished" msgstr "Acabat" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "" #: ui/action.py:365 msgid "Log Message" msgstr "Messatge del jornal" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "Desvarrolhar" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "" #: ui/browser.py:89 msgid "Size" msgstr "Talha" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "" #: ui/browser.py:353 msgid "Copy to..." msgstr "Copiar cap a..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "Copiar l'URL dins lo quichapapièrs" #: ui/browser.py:363 msgid "Move to..." msgstr "Desplaçar cap a..." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "" #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "" #: ui/create.py:46 msgid "Repository successfully created" msgstr "" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "" #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "Modificar..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "Novèl..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL :" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "Messatge" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "Autentificacion" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "Confirmacion" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "Crear un dorsièr..." #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "Refusar" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "Nom d'utilizaire :" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "Senhal :" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "Camin :" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "Proprietat" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "Proprietat :" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "Domeni :" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "Valor :" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Autors :" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Limit :" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "Jornal" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "Refrescar" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "Autentificacion" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "PercÃŗrrer..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "Programas extèrnes" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "General" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "Lenga :" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "Archivatge" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "Tipe :" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "Anotar" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Messatges de notificacion" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "De :" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "Cap a :" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "Opcions" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "Revision" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "Recursiu" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" rabbitvcs-0.19/po/pl.po000066400000000000000000001272421445560650400150340ustar00rootroot00000000000000# Polish translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-11-18 22:00+0000\n" "Last-Translator: Mateusz Boś \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i sekundy" msgstr[1] "%i sekund" msgstr[2] "%i sekund" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i minuta" msgstr[1] "%i minut" msgstr[2] "%i minut" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i godzina" msgstr[1] "%i godzin" msgstr[2] "%i godzin" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i dzień" msgstr[1] "%i dni" msgstr[2] "%i dni" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i tydzień" msgstr[1] "%i tygodni" msgstr[2] "%i tygodni" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i miesiąc" msgstr[1] "%i miesięcy" msgstr[2] "%i miesięcy" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i rok" msgstr[1] "%i lata" msgstr[2] "%i lata" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "Debuguj" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "Błędy" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "OtwÃŗrz Powłokę" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "OdświeÅŧ Status" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "Dodaj Symbol" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "Dodaj Symbole" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "Zaktualizuj" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "Zaktualizuj kopię roboczą" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "ZatwierdÅē" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "ZatwierdÅē zmiany w repozytorium" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "Przeglądarka repozytorium" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "Przeglądaj repozytorium" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "Zobacz zmiany w pliku" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "Zobacz rÃŗÅŧnice pomiędzy plikami/folderami" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "Zobacz rÃŗÅŧnice pomiędzy dwoma plikami" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "PokaÅŧ rÃŗÅŧnice względem poprzedniej wersji" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "PorÃŗwnaj z poprzednią wersją" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "PokaÅŧ zmiany..." #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Dodaj" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "Dodaj do ignorowanych" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "Zaktualizuj do wersji..." #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "Zmień nazwę..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "Usuń" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "PrzywrÃŗÄ‡" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "RozwiąÅŧ" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "PrzywrÃŗÄ‡" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "" #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "" #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Oczyść" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "Eksportuj..." #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "Importuj" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "" #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "Przełącz..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "" #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "" #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "Właściwości" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "" #: util/contextmenuitems.py:545 msgid "Help" msgstr "Pomoc" #: util/contextmenuitems.py:546 msgid "View help" msgstr "" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "Ustawienia" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "O programie" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "O RabbitVCS" #: util/contextmenuitems.py:563 msgid "Open" msgstr "OtwÃŗrz" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "OtwÃŗrz plik" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "PrzywrÃŗÄ‡ właściwość" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "PrzywrÃŗÄ‡ właściwość do oryginalnej postaci" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "PrzywrÃŗÄ‡ właściwość (rekursywnie)" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "Usuń właściwość" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "Usuń tą właściwość" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "Usuń tą właściwość (rekursywnie)" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "Uaktualnianie..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "Uaktualniono." #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "Uaktualnij do wersji" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "Pobierz" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "Zakończono pobieranie" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "ŚcieÅŧka" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "Rozszerzenie" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Ładowanie..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "Znaleziono %d obiekt(y/Ãŗw)" #: ui/add.py:157 msgid "Running Add Command..." msgstr "Wykonywanie \"dodaj\"..." #: ui/add.py:159 msgid "Completed Add" msgstr "Zakończono \"dodaj\"" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "Wersja:" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "Eksportuj - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "ZarÃŗwno URL repozytorium, jak i ścieÅŧka docelowa są wymagane." #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Eksportuj" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "Wykonywanie \"eksport\"" #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "Zakończono \"eksport\"" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "Zastosuj łatę" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "Zastosuj łatę do katalogu..." #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "Stosowanie łaty..." #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "Łata została zastosowana" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "Data" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "Wiadomość" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "Importuj - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "Pole URL repozytorium jest wymagane" #: ui/import.py:81 msgid "Running Import Command..." msgstr "Wykonywanie \"importuj\"" #: ui/import.py:89 msgid "Completed Import" msgstr "Zakończono \"importuj\"" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "Zmień nazwę" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "Nowa nazwa:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "Pole nowa nazwa jest wymagane" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "Trwa zmienianie nazwy..." #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "Zmieniono nazwę" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "Status Tekstowy" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "Wykonywanie \"zatwierdÅē\"..." #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "Zakończono \"zatwierdÅē\"" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "Status" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "Wykonywanie 'Złącz'" #: ui/merge.py:91 msgid "Completed Merge" msgstr "Zakończono 'Złącz'" #: ui/merge.py:102 msgid "Merge" msgstr "Scal" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" "Wystąpił błąd w rozszerzeniu RabbitVCS. Proszę skontaktować się z autorami RabbitVCS podając szczegÃŗÅ‚y błędu widoczne poniÅŧej:" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Wybierz katalog" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "do" #: ui/dialog.py:261 msgid "Select a File" msgstr "Wybierz plik" #: ui/dialog.py:280 msgid "Save As..." msgstr "Zapisz jako...." #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "Czy na pewno chcesz kontynuować?" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "zaznaczone obiekty" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "Dodano katalog do repozytorium" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "Wykonywanie \"przywrÃŗÄ‡\"" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "Zakończono \"przywrÃŗÄ‡\"" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "Pola z i do są wymagane" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "Przenieś" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "Trwa przenoszenie..." #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "Przenoszenie zakończone" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "Wersja" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "Autor" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "PorÃŗwnaj obok siebie" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "Wykonywanie komendy rozwiąÅŧ" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "Zakończono \"rozwiąÅŧ\"" #: ui/changes.py:49 msgid "More Actions..." msgstr "Więcej akcji..." #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "Zmień" #: ui/changes.py:279 msgid "Property Change" msgstr "Zmiana właściwości" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Tak" #: ui/changes.py:321 msgid "No" msgstr "Nie" #: ui/changes.py:410 msgid "Open from first revision" msgstr "OtwÃŗrz z pierwszej rewizji" #: ui/changes.py:415 msgid "Open from second revision" msgstr "OtwÃŗrz z drugiej rewizji" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "Nie moÅŧna adnotować katalogu" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "Adnotuj - %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Linia" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Tekst" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "Pole od rewizji musi być liczbą całkowitą" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "Log - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "Nie dotyczy" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "Akcja" #: ui/log.py:338 msgid "Copy From Path" msgstr "Kopiuj ze ścieÅŧki" #: ui/log.py:338 msgid "Copy From Revision" msgstr "Kopiuj z wersji" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "PokaÅŧ rÃŗÅŧnice względem kopii roboczej" #: ui/log.py:791 msgid "View diff between revisions" msgstr "PokaÅŧ rÃŗÅŧnice pomiedzy wersjami" #: ui/log.py:796 msgid "Compare with working copy" msgstr "PorÃŗwnaj z kopią roboczą" #: ui/log.py:806 msgid "Compare revisions" msgstr "PorÃŗwnaj wersje" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "PokaÅŧ zmiany pomiędzy wersjami" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "Edytuj autora..." #: ui/log.py:837 msgid "Edit log message..." msgstr "Edytuj opis zmian..." #: ui/log.py:841 msgid "Edit revision properties..." msgstr "Edytuj właściwości wersji" #: ui/log.py:1047 msgid "Edit author" msgstr "Edytuj autora" #: ui/log.py:1059 msgid "Edit log message" msgstr "Edytuj opis zmian" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "Nieznane" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "angielski" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "Wybierz program" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "Czy na pewno chcesz wyczyścić ścieÅŧki do repozytoriÃŗw?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "ŚcieÅŧki do repozytoriÃŗw zostały wyczyszczone" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "Czy na pewno chcesz wyczyścić poprzednie wiadomości" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "Poprzednie wiadomości zostały wyczyszczone" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "Czy na pewno chcesz wyczyścić swoje dane autentykacji?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "Dane uwierzytelniania zostały wyczyszczone" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "Nie udało się pobrać listy właściwości" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "Musisz podać ścieÅŧkę docelową." #: ui/branch.py:115 msgid "Branch/tag" msgstr "UtwÃŗrz gałąÅē/etykietę" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "Tworzę gałąÅē/etykietę..." #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "Utworzono gałąÅē/etykietę" #: ui/lock.py:73 msgid "Locked" msgstr "Zablokowany" #: ui/lock.py:167 msgid "Get Lock" msgstr "ZaÅ‚ÃŗÅŧ blokadę" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "Wykonywanie \"zablokuj\"" #: ui/lock.py:177 msgid "Completed Lock" msgstr "Zakończono \"zablokuj\"" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "PołoÅŧenie repozytorium jest polem wymaganym" #: ui/switch.py:80 msgid "Switch" msgstr "Przełącz" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "Wykonywanie \"przełącz\"..." #: ui/switch.py:89 msgid "Completed Switch" msgstr "Zakończono \"przełącz\"" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "GŁÓWNA" #: ui/widget.py:860 msgid "Number" msgstr "Numer" #: ui/widget.py:861 msgid "Working Copy" msgstr "Kopia robocza" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "Host:" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "Pobierz - %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "Wykonywanie 'Pobierz' ..." #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "Nazwa" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "UtwÃŗrz łatę" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "Podana ścieÅŧka nie wskazuje na kopię roboczą" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "Tworzenie pliku łaty..." #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "Plik łaty został utworzony" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "Właściwości - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "Wartość" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "Wystąpił błąd przy prÃŗbie zapisu właściwości" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" "Uwaga: zmiany właściwości są stosowane natychmiast. MoÅŧesz przejrzeć " "i cofnąć zmiany uÅŧywając menu kontekstowego dla kaÅŧdego obiektu\n" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" "Czy chcesz usunąć wskazane właściwości ze wszystkich plikÃŗw i podkatalogÃŗw\n" "zawartych w tym katalogu?" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "Plik nie jest objęty kontrolą wersji" #: ui/property_editor.py:112 msgid "Reserved" msgstr "" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "Nie udało się zmienić właściwości" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "Typ MIME" #: ui/action.py:338 msgid "Finished" msgstr "Zakończono" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - Zakończono" #: ui/action.py:365 msgid "Log Message" msgstr "Wpis dziennika" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "Odblokuj" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "Wykonywanie \"odblokuj\"..." #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "Zakończono \"odblokuj\"" #: ui/browser.py:89 msgid "Size" msgstr "Rozmiar" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "UtwÃŗrz katalog" #: ui/browser.py:353 msgid "Copy to..." msgstr "Skopiuj do..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "Skopiuj URL do schowka" #: ui/browser.py:363 msgid "Move to..." msgstr "Przenieś do.." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "Gdzie chcesz skopiować zaznaczenie?" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "Nowe połoÅŧenie:" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "Gdzie chcesz przenieść zaznaczenie?" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "Oczyszczanie..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "Zakończono oczyszczanie" #: ui/create.py:46 msgid "Repository successfully created" msgstr "Pomyślnie utworzono repozytorium" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" "Wystąpił błąd w czasie tworzenia repozytorium. Upewnij się, Åŧe podany " "katalog jest pusty." #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Właściwości dla:" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "Wybrane właściwości będą stosowana rekursywnie." #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "Usuń właściwości rekursywnie" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "Zmień..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "Nowa..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "URL/ŚcieÅŧka:" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "Załaduj / OdświeÅŧ" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "Dodaj wiadomość" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "SzczegÃŗÅ‚y certyfikatu" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "Zmień właściwość" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "Nazwa katalogu" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "Wiadomość" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "Proszę dodaj swoje dane uwierzytelniania" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "Proszę podać plik certyfikatu SSL" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "Poprzednie wiadomości" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" "Czy na pewno chcesz usunąć %item%?" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "Błąd RabbitVCS" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "Zawsze akceptuj" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "Zaakceptuj tylko tym razem" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "Zastosuj właściwość rekursywnie" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "Uwierzytelnianie" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "SprawdÅē certyfikat" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "Potwierdzenie" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "UtwÃŗrz katalog..." #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "Potwierdzenie usunięcia" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "Odrzuć" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "Odcisk klucza:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "Wystawca:" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "Login:" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "Hasło:" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "ŚcieÅŧka:" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "Poprzednie wiadomości" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "Właściwość" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "Właściwość:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "Błąd RabbitVCS" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "Dziedzina:" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "Zapisz dane logowania" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "Zmiana Tekstu" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "Obiekty zostaną wysłane do kosza" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "Poprawny:" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "Wartość:" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "Linki" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "Informacje o wersji" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Autorzy:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Podziękowania:" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "Dotknięte pliki (kliknij dwukrotnie by porÃŗwnać z bazą)" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "Tablica wersji" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Limit:" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "Log" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "OdświeÅŧ" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "Pokazuję wersje:" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "ZaÅŧądano oczyszczania\n" "\n" "Rozpocząć oczyszczanie kopii roboczej?" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "Uwierzytelnianie" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "Zapis Wiadomości" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "Opcje zapisywania wiadomości" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "Program uÅŧywany do porÃŗwnywania plikÃŗw" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "Historia AdresÃŗw URL" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "Przeglądaj..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "Wyczyść dane uwierzytelniania" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "Włącz symbole" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "Włącz atrybuty plikÃŗw" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "Włącz rekursywne sprawdzanie statusÃŗw" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "Zewnętrzne programy" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "GÅ‚Ãŗwne" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "Język:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "Zapisywanie Wiadomości" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "Minimalny poziom do zapisywania wiadomości" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "Ilość URL-i do zapamiętania" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "Ilość wiadomości do zapamiętania" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "Zapisane dane" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "Zobacz narzędzia debugowania RabbitVCS" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" "Menu debugowania jest uÅŧywane do diagnozowania problemÃŗw z samym RabbitVCS" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "Rodzaj:" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "Pliki do zablokowania" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "Opisz, dlaczego blokujesz te pliki" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "Zablokuj pliki" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "Zaznacz / Odznacz wszystkie" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "Przejmij blokady" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "Od wersji" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "Do wersji" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "Dodaj komentarz" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "Zmienione pliki (kliknij dwukrotnie, by porÃŗwnać z bazą)" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "ZatwierdÅē do:" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "PokaÅŧ pliki niewersjonowane" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Powiadomienie o wiadomościach" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "Zdalny URI:" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "Kopia robocza:" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "Dodaj nową właściwość." #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "Zamknij." #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "Edytor właściwości" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "OdświeÅŧ listę właściwości." #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "Zmiana repozytorium twojej kopii roboczej" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "Z:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "Do:" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "Opcje" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "Wersja" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "Pomiń zewnętrzne" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "Rekursywnie" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "Wpisz Wiadomość" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "Repozytorium" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "Włącz pliki ignorowane" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "Z URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "Od: (URL i rewizja do złączenia)" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "Zakres wersji" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "Do: (URL i rewizja do złączenia)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "Kopia robocza" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "Wybierz tą metodę, jeÅŧeli dokonałeś zmian w gałęzi i chciałbyś połączyć je z " "inną gałęzią." #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "Wybierz tą metodę, jeÅŧeli chcesz połączyć dwie rÃŗÅŧne gałęzie do twojej kopii " "roboczej." #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "Asystent łączenia" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "Scal zakres rewizji" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "Scal dwa rÃŗÅŧne drzewa" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "Tylko zanotuj scalenie" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "PokaÅŧ logi" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "Test Scalania" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" rabbitvcs-0.19/po/pt_BR.po000066400000000000000000001405141445560650400154240ustar00rootroot00000000000000# Brazilian Portuguese translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-12-06 05:15+0000\n" "Last-Translator: Fernando P Silveira \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "hÃĄ pouco" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "%d minutos(s) atrÃĄs" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i segundo" msgstr[1] "%i segundos" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i minuto" msgstr[1] "%i minutos" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i hora" msgstr[1] "%i horas" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i dia" msgstr[1] "%i dias" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i semana" msgstr[1] "%i semanas" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i mÃĒs" msgstr[1] "%i meses" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i ano" msgstr[1] "%i anos" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "Depurar" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "Bugs" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "Abrir Shell" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "Atualizar Status" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "Reverter depuraÃ§ÃŖo" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "Reverter tudo que ve" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "Invalidar" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "Forçar uma chamada invalidate_extension_info()" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "Adicionar Emblema" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "Adicionar um emblema" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "Obter..." #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "Obter uma cÃŗpia de trabalho" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "Atualizar" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "Atualizar uma cÃŗpia de trabalho" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "Enviar" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "Enviar modificaçÃĩes para o repositÃŗrio" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "RabbitVCS SVN" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "RabbitVCS Git" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "Navegador de RepositÃŗrio" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "Procurar uma ÃĄrvore de repositÃŗrio" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "Verificando se existem modificaçÃĩes..." #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "Verificando se existem modificaçÃĩes efetuados para o repositÃŗrio" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "Menu do diferenciador" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "Lista de opçÃĩes de comparaÃ§ÃŖo" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "DiferenciaçÃĩes comparadas à base" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "Visualizar as alteraçÃĩes feitas em um arquivo" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "Ver diferenciaçÃĩes entre arquivos/pastas" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "Ver as diferenças emtre dois arquivos" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "Veja a diferenciaÃ§ÃŖo de encontro com a revisÃŖo prÊvia" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" "Ver as modificaçÃĩes realizadas em um arquivo desde a Ãēltima alteraÃ§ÃŖo" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "Comparar com a base" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "Comparar com a base usando a ferramenta de comparaÃ§ÃŖo lado a lado" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "Comparar arquivos/pastas" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "Comparar as diferenças entre dois itens" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "Compare com a revisÃŖo prÊvia" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" "Comparar com prÊvia revisÃŖo usando a ferramenta de comparaÃ§ÃŖo lado a lado" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "Mostrar AlteraçÃĩes..." #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "Mostrar alteraçÃĩes entre caminhos e revisÃĩes" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "Mostrar Log" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "Mostrar as informaçÃĩes de um arquivo de log" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Adicionar" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "Programar itens para serem adicionaos ao repositÃŗrio" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "Adicionar à lista de ignorados" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "Atualizar para revisÃŖo..." #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "Atualizar um arquivo para uma revisÃŖo específica" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "Renomear..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "Agendar um item para ser renomeado no repositÃŗrio" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "Apagar" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "Agendar um item para ser deletado do repositÃŗrio" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "Reverter" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "Reverter um item para seu estado inalterado" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "Resolver" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "Marcar um item conflitante como resolvido" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "Restaurar" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "Recuperar um item em falta" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "Realocar..." #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "Realocar sua cÃŗpia de trabalho" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "Bloquear..." #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "Itens bloqueados localmente" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "Liberar Bloqueio..." #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "Liberar bloqueio de um item" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Limpeza" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "Limpeza de cÃŗpia de trabalho" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "Exportar..." #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" "Exportar uma cÃŗpia de trabalho ou repositÃŗrio sem informaçÃĩes de " "versionamento" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "Criar RepositÃŗrio aqui" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "Criar um repositÃŗrio no diretÃŗrio" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "Importar" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "Importar um item em um respositÃŗrio" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "Branch/tag..." #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "Copiar um item para outro lugar no repositÃŗrio" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "Mudar..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "Mudar o lugar do repositÃŗrio de um cÃŗpia de trabalho" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "Mesclar..." #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "Um assistente com passos para mesclar" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "ComentÃĄrio..." #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "Comentar um arquivo" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "Criar Remendo..." #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "Cria um arquivo diff unificado com todas as mudanças que vocáēŊ fez" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "Aplicar remendo" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" "Aplicar um arquivo com resultado de equalidade unificado para a cÃŗpia de " "trabalho" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "Propriedades" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "Visualizar as propriedades de um item" #: util/contextmenuitems.py:545 msgid "Help" msgstr "Ajuda" #: util/contextmenuitems.py:546 msgid "View help" msgstr "Visualizar ajudar" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "ConfiguraçÃĩes" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "Visualizar ou alterar as configuraçÃĩes do RabbitVCS" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "Sobre" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "Sobre o RabbitVCS" #: util/contextmenuitems.py:563 msgid "Open" msgstr "Abrir" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "Abrir um arquivo" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "Navegue para" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "Procurar em um arquivo ou pasta" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "Reverter propriedade" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "Reverter esta propriedade ao seu estado original" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "Reverter propriedade (recursivo)" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "Reverter esta propriedade ao seu estado original (recursivo)" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "Excluir propriedade" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "Excluir esta propriedade" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "Apagar propriedade (recursivo)" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "Excluir esta propriedade (recursivo)" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "Editar detalhes" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "Exibir e editar detalhes da propriedade" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "Iniciar repositÃŗrio" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "Clonar" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "RamificaçÃĩes" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "Palavras-chave" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "Remotos" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "Ignorar item por nome de arquivo" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "Ignorar item por extensÃŖo de arquivo" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "Atualizando..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "AtualizaÃ§ÃŖo Completada" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "Atualizando para RevisÃŖo" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "Obter" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "Obter Concluído" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "Caminho" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "ExtensÃŖo" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Carregando..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "Encontrado(s) %d item(ns)" #: ui/add.py:157 msgid "Running Add Command..." msgstr "Rodando Comando Adicionar..." #: ui/add.py:159 msgid "Completed Add" msgstr "Adicionar Concluído" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "Ignorar arquivo:" #: ui/tags.py:62 msgid "Tag Manager" msgstr "Gerenciador de palavras-chave" #: ui/tags.py:63 msgid "Tags" msgstr "Palavras-chave" #: ui/tags.py:74 msgid "Tag" msgstr "Palavra-chave" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "Nome:" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "RevisÃŖo:" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "Mensagem:" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "Salvar" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "Data:" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "Tem certeza que quer apagar %s?" #: ui/tags.py:275 msgid "Add Tag" msgstr "Adicionar palavra-chave" #: ui/tags.py:293 msgid "Tag Detail" msgstr "Detalhe da palavra-chave" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "Exportado - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "Os campos URL do repositÃŗrio e caminho de destino sÃŖo necessÃĄrios." #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Exportar" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "Rodando Comando Exportar" #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "Exportar Concluído" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "Aplicar remendo" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "Aplicar remendo para o diretÃŗrio..." #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "Aplicando a linha de remendo..." #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "Linha de remendo aplicada" #: ui/branches.py:62 msgid "Branch Manager" msgstr "Gerenciador de ramificaçÃĩes" #: ui/branches.py:63 msgid "Branches" msgstr "RamificaçÃĩes" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "RamificaÃ§ÃŖo" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "Data" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "Mensagem" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "Importado - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "O campo URL do repositÃŗrio Ê necessÃĄrio." #: ui/import.py:81 msgid "Running Import Command..." msgstr "Rodando Comando Importar..." #: ui/import.py:89 msgid "Completed Import" msgstr "Importar Concluído" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "Renomear" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "Novo Nome:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "O nome do novo campo Ê requerido" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "Rodando Comando Renomear.." #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "Renomear Completado" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "Texto de Status" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "Propriedades de Status" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "Rodando Comando Enviar..." #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "Enviar Concluído" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "Estado" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "Ver diferenciaÃ§ÃŖo por comparaÃ§ÃŖo lado a lado" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "Executando Teste de Merge" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "Teste de Merge Concluído" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "Executando Merge" #: ui/merge.py:91 msgid "Completed Merge" msgstr "Merge Concluído" #: ui/merge.py:102 msgid "Merge" msgstr "Merge" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" "Ocorreu um erro na extensÃŖo do RabbitVCS Nautilus.Por favor contate o Time RabbitVCS com os detalhes do erro listados abaixo:" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Selecionar um diretÃŗrio" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "para" #: ui/dialog.py:261 msgid "Select a File" msgstr "Selecionar um arquivo" #: ui/dialog.py:280 msgid "Save As..." msgstr "Salvar como..." #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "Tem certeza que deseja continuar?" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "O(s) item(ns) selecionado(s)" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "Adicionado uma pasta ao repositÃŗrio" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "Rodando Comando Reverter..." #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "Reverter Concluído" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "As URL origem e destino sÃŖo necessÃĄrias" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "Realocar" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "Rodando Comando Realocar" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "Relocar Concluído" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "RevisÃŖo" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "Autor" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "VisÃŖo da unificaÃ§ÃŖo pelo diferenciador" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "ComparaÃ§ÃŖo lado a lado" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "Rodando Comando Resolver" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "Resolver Concluído" #: ui/changes.py:49 msgid "More Actions..." msgstr "Mais açÃĩes..." #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "AlteraÃ§ÃŖo" #: ui/changes.py:279 msgid "Property Change" msgstr "AlteraÃ§ÃŖo de Propriedade" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Sim" #: ui/changes.py:321 msgid "No" msgstr "NÃŖo" #: ui/changes.py:410 msgid "Open from first revision" msgstr "Abrir da primeira versÃŖo" #: ui/changes.py:415 msgid "Open from second revision" msgstr "Abrir da segunda versÃŖo" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "NÃŖo Ê possível comentar um diretÃŗrio" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "Comentar - %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Linha" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Texto" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "O campo revisÃŖo de origem deve um inteiro" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "Log - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "N/D" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "AÃ§ÃŖo" #: ui/log.py:338 msgid "Copy From Path" msgstr "Copiar do Caminho" #: ui/log.py:338 msgid "Copy From Revision" msgstr "Copiar da versÃŖo" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "Veja a diferenciaÃ§ÃŖo de encontro com a cÃŗpia em uso" #: ui/log.py:791 msgid "View diff between revisions" msgstr "Veja a diferenciaÃ§ÃŖo entre as revisÃĩes" #: ui/log.py:796 msgid "Compare with working copy" msgstr "Compare com a versÃŖo local" #: ui/log.py:806 msgid "Compare revisions" msgstr "Compare revisÃĩes" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "Mostrar mudanças entre as revisÃĩes" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "Edite o autor..." #: ui/log.py:837 msgid "Edit log message..." msgstr "Edite a mensagem do relatÃŗrio..." #: ui/log.py:841 msgid "Edit revision properties..." msgstr "Editar propriedades de revisÃŖo" #: ui/log.py:1047 msgid "Edit author" msgstr "Edite o autor" #: ui/log.py:1059 msgid "Edit log message" msgstr "Edite a mensagem do relatÃŗrio" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "Desconhecido" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "InglÃĒs" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "Selecione um programa" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "Tem certeza de que deseja apagar seu caminho do repositÃŗrio?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "Caminho do repositÃŗrio apagado" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "Tem certeza que deseja apagar sua mensagem anterior?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "Mensagem anterior apagada" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "Tem certeza que deseja apagar sua informaÃ§ÃŖo de autenticaÃ§ÃŖo?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "InformaÃ§ÃŖo de autenticaÃ§ÃŖo apagada" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "Incapaz de recuperar a lista de propriedades" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "VocÃĒ deve informar uma pasta de destino." #: ui/branch.py:115 msgid "Branch/tag" msgstr "Branch/tag" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "Rodando comando Branch/tag..." #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "Branch/tag Completada" #: ui/lock.py:73 msgid "Locked" msgstr "Bloqueado" #: ui/lock.py:167 msgid "Get Lock" msgstr "Bloquear" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "Bloqueando..." #: ui/lock.py:177 msgid "Completed Lock" msgstr "Bloqueado" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "O campo repositÃŗrio local Ê necessÃĄrio" #: ui/switch.py:80 msgid "Switch" msgstr "Trocar" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "Rodando Comando Trocar" #: ui/switch.py:89 msgid "Completed Switch" msgstr "Trocar Concluído" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "HEAD" #: ui/widget.py:860 msgid "Number" msgstr "NÃēmero" #: ui/widget.py:861 msgid "Working Copy" msgstr "CÃŗpia em uso." #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "Servidor:" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "Checkout - %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "Executando Checkout..." #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "Chave" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "Criar Patch" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "O caminho informado nÃŖo Ê de uma cÃŗpia de trabalho" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "Criando arquivo de remendo" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "Arquivo de remendo criado" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "Propriedades - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "Valor" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "Houve um problema ao salvar suas propriedades." #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" "Nota: AlteraçÃĩes das propriedades sÃŖo aplicadas instantÃĸneamente. " "VocÃĒ precisa rever e anular as alteraçÃĩes efetuadas usando o menu de " "contexto para cada item.\n" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" "VocÃĒ deseja deletar as propriedades selecionadas para todos os arquivos e " "subdiretÃŗrios\n" "contidos neste diretÃŗrio?" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "O arquivo nÃŖo estÃĄ sob o controle da versÃŖo." #: ui/property_editor.py:112 msgid "Reserved" msgstr "Reservado" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "Incapaz de ajustar um novo valor à propriedade." #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "Tipo Mime" #: ui/action.py:338 msgid "Finished" msgstr "Concluído" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - Finalizado" #: ui/action.py:365 msgid "Log Message" msgstr "Mensagem de log" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "Desbloquear" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "Rodando Comando Desbloquear" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "Desbloquear Completado" #: ui/browser.py:89 msgid "Size" msgstr "Tamanho" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "Criar pasta..." #: ui/browser.py:353 msgid "Copy to..." msgstr "Copiar para..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "Copiar a URL para a ÃĄrea de transferÃĒncia" #: ui/browser.py:363 msgid "Move to..." msgstr "Mover para..." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "Onde vocÃĒ quer copiar a seleÃ§ÃŖo?" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "Nova LocalizaÃ§ÃŖo" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "Onde vocÃĒ quer mover a seleÃ§ÃŖo?" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "Limpando..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "Limpeza Concluída" #: ui/create.py:46 msgid "Repository successfully created" msgstr "RepositÃŗrio criado com sucesso" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" "Ocorreu um erro criando o repositÃŗrio. Tenha certeza que o diretÃŗrio " "informando estÃĄ vazio." #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Propriedades para:" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "As propriedades selecionadas serÃŖo aplicadas recursivamente." #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "Apagar propriedades recursivamente" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "Editar..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "Novo..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "URL/Caminho:" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "Carreage/Renovar" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "Adicionar Mensagem" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "Detalhes do Certificado" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "Editar Detalhes da Propriedade" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "Nome da Pasta" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "Mensagem" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "Por favor, adicionar detalhes da sua autenticaÃ§ÃŖo" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "Por favor forneça seu arquivo de certificaÃ§ÃŖo SSL" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "Mensagem Anterior" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" "Tem certeza que deseja deleter %item%?" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "Erro do RRabbitVCS" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "Aceitar Sempre" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "Aceitar uma vez" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "Aplicar propriedade recursivamente" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "AutenticaÃ§ÃŖo" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "Verificar Certificado" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "ConfirmaÃ§ÃŖo" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "Criar pasta..." #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "ConfirmaÃ§ÃŖo de RemoÃ§ÃŖo" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "Negar" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "ImpressÃŖo digital:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "Emissor:" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "Login:" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "Senha:" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "Caminho:" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "Mensagem Anterior" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "Propriedade" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "Propriedade:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "Erro do RabbitVCS" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "Domínio:" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "CertificaÃ§ÃŖo SSL do cliente" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "Salvar AutenticaÃ§ÃŖo" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "AlteraÃ§ÃŖo do texto" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "O(s) item(ns) pode(m) ser enviado(s) para lixeira." #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "Validar:" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "Valor:" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "Links" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "InformaçÃĩes da VersÃŖo" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Autores:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Agradecimentos:" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "Arquivo(s) afetado(s) (duplo clique para comparar com a base)" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "Tabela de RevisÃĩes" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Limite:" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "Log" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "Atualizar" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "Mostrando RevisÃĩes:" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "Parar em cÃŗpia" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "Limpeza Solicitada ....\n" "\n" "Começar a limpeza da cÃŗpia de trabalho?" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "AutenticaÃ§ÃŖo" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "Mensagens de Log" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "OpçÃĩes de Log" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "Programa utilizado para comparar arquivos" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "HistÃŗrico de URL(s)" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "Procurar..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "Apagar sua informaÃ§ÃŖo de autenticaÃ§ÃŖo" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "Ativar emblemas" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "Ativar atributos de arquivo" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "Ativar checagem recursiva de status" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "Programas Externos" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "Geral" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "Idioma:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "Gravando Log" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "Nível mÊdio para log" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "NÃēmero de URLs para se lembrar" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "NÃēmero de mensagens para se lembrar" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "Data Salva" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "Mostrar ferramentas de debug do RabbitVCS" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" "O menu de debug Ê usado para diagnosticar problemas com o prÃŗprio RabbitVCS" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "Tipo:" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "Arquivos para bloquear" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "" "Por favor, descreva porque vocÃĒ estÃĄ bloqueando esses arquivos" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "Bloquear Arquivos" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "Selecionar / Deselecionar tudo" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "Roubar os bloqueios" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "Da RevisÃŖo" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "Para RevisÃŖo" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "Comentar" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "Arquivos alterados (duplo clique para comparar com a base)" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "Enviar para:" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "Mostrar arquivos nÃŖo versionados" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Mensagens de NotificaÃ§ÃŖo" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "URI Remota:" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "CÃŗpia em uso" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "Adicione uma nova propriedade." #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "Fechar esta janela." #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "Editor de Propriedade" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "Atualizar a lista de propriedades." #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "Alterar o repositÃŗrio da sua cÃŗpia de trabalho" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "De:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "Para:" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "OpçÃĩes" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "RevisÃŖo" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "Omitir os Externos" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "Recursivo" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "Importar Mensagem" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "RepositÃŗrio" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "Incluir arquivos ignorados" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "Da URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "De: (URL e revisÃŖo para mesclagem)" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "Intervalo de RevisÃĩes" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "Para: (URL e revisÃŖo para mesclagem)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "URL de origem para mesclagem" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "CÃŗpia de Trabalho" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "Escolha este mÊtodo se vocÃĒ fez algumas alteraçÃĩes para um branch e deseja " "mesclar suas alteraçÃĩes com outro branch." #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "Escolha este mÊtodo se vocÃĒ deseja mesclar dois diferentes branches em sua " "cÃŗpia de trabalho." #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "Ignorar ancestral" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "Assistente de Mesclagem" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "Mesclar um intervalo de revisÃĩes" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "Mesclar duas ÃĄrvores diferentes" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "Somente gravar a mesclagem" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "Mostrar Log" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "Testar Mesclagem" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" "Utilize o diÃĄlogo de log para selecionar as revisÃĩes que vocÃĒ deseja " "mesclar. Ou, escreve manualmente as revisÃĩes, separando por vírgula. VocÃĒ " "pode especificar um intervalo de visÃĩes utilizando um traço.\n" "\n" "Examplo: 4-7,9,11,15-HEAD\n" "\n" "Para mesclar todas as revisÃĩes, deixa a caixa vazia." #~ msgid "Completed" #~ msgstr "Concluído" #~ msgid "(no author)" #~ msgstr "(sem autor)" #~ msgid "Switch Details" #~ msgstr "Mudar Detalhes" #~ msgid "Create copy from" #~ msgstr "\t Criar cÃŗpia de" #~ msgid "Program used to browse repositories" #~ msgstr "Programa utilizado para navegar nos repositÃŗrios" #~ msgid "Show new version on the right side" #~ msgstr "Mostrar a nova versÃŖo do lado direito" #~ msgid "Update Depth" #~ msgstr "Atualizar Profundidade" #~ msgid "Destination:" #~ msgstr "Destino:" #~ msgid "Deleted" #~ msgstr "Deletado" #~ msgid "Copied" #~ msgstr "Copiado" #~ msgid "Added" #~ msgstr "Adicionado" #~ msgid "Reverted" #~ msgstr "Revertido" #~ msgid "Restored" #~ msgstr "Restaurado" #~ msgid "Failed Revert" #~ msgstr "Falha ao Reverter" #~ msgid "Resolved" #~ msgstr "Resolvido" #~ msgid "Failed Unlock" #~ msgstr "Falha ao Desbloquear" #~ msgid "Failed Lock" #~ msgstr "Falha ao Bloquear" #~ msgid "External" #~ msgstr "Externo" #~ msgid "Modified" #~ msgstr "Modificado" #~ msgid "Replaced" #~ msgstr "Substituído" #~ msgid "Changed" #~ msgstr "Alterado" #~ msgid "Skipped" #~ msgstr "Ignorado" #~ msgid "Updated" #~ msgstr "Atualizado" #~ msgid "Annotated" #~ msgstr "Comentado" #~ msgid "Unlocked" #~ msgstr "Desbloqueado" #~ msgid "Conflicted" #~ msgstr "Conflitante" #~ msgid "Inapplicable" #~ msgstr "InaplicÃĄvel" #~ msgid "Unchanged" #~ msgstr "NÃŖo modificado" #~ msgid "Merged" #~ msgstr "Mesclado" #~ msgid "Obstructed" #~ msgstr "Obstruído" #~ msgid "Missing" #~ msgstr "Faltando" rabbitvcs-0.19/po/ro.po000066400000000000000000001162071445560650400150400ustar00rootroot00000000000000# Romanian translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-02-09 10:19+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 " "== 0) && (n != 0))) ? 2: 1));\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i secundă" msgstr[1] "%i de secunde" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i minut" msgstr[1] "%i minute" msgstr[2] "%i de minute" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i oră" msgstr[1] "%i ore" msgstr[2] "%i de ore" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "" msgstr[1] "" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "" msgstr[1] "" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "" msgstr[1] "" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "" msgstr[1] "" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "Depanează" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "Stare ReÃŽmprospătare" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "Invalidează" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "Adaugă Emblemă" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "Adauga o emblemă" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "Actualizare" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "Vizualizează modificările aduse unui fișier" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "Arată Jurnal" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Adăugare" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "Adaugă la lista de ignorat" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "" #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "Redenumește..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "Șterge" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "Restaurează" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "Rezolvă" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "Restaurează" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "" #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "" #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Ștergere" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "Importă" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "" #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "Comutare..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "" #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "Adnotează..." #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "Adnotează un fișier" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "Proprietăți" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "Vizualizează proprietățile unui articol" #: util/contextmenuitems.py:545 msgid "Help" msgstr "Ajutor" #: util/contextmenuitems.py:546 msgid "View help" msgstr "Vizualizează ajutor" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "Setări" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "Vizualizează sau modifică setaările RabbitVCS" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "Despre" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "Despre RabbitVCS" #: util/contextmenuitems.py:563 msgid "Open" msgstr "Deschide" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "Caută ÃŽn" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "În curs de actualizare..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "Actualizare completă" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "Actualizați la revizia" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "Cale" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "Extensie" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Se ÃŽncarcă..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "Găsit %d articol(e)" #: ui/add.py:157 msgid "Running Add Command..." msgstr "Rulează Comanda Adăugare..." #: ui/add.py:159 msgid "Completed Add" msgstr "Adăugare Finalizată" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "Exportă- %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "" #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Exportă" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "" #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "Export Terminat" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "" #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "Data" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "Mesaj" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "Importă - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "CÃĸmpul URL depozitar este necesar." #: ui/import.py:81 msgid "Running Import Command..." msgstr "" #: ui/import.py:89 msgid "Completed Import" msgstr "Import Terminat" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "Redenumire" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "Nume Nou:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "Este necesar cÃĸmpul pentru noul nume" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "Rulează Comanda Redenumire" #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "Redenumire efectuată" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "Stare Text" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "Stare Propietate" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "" #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "Stare" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "" #: ui/merge.py:91 msgid "Completed Merge" msgstr "" #: ui/merge.py:102 msgid "Merge" msgstr "" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Selectează un Director" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "" #: ui/dialog.py:261 msgid "Select a File" msgstr "Selectează un fișier" #: ui/dialog.py:280 msgid "Save As..." msgstr "" #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "Ești sigur că vrei sa continui?" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "CÃĸmpurile url de la și la sunt amÃĸndouă necesare" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "Mută" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "Rulează Comanda Mută" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "Mutare Finalizată" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "Revizia" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "Autor" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "" #: ui/changes.py:49 msgid "More Actions..." msgstr "" #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "" #: ui/changes.py:279 msgid "Property Change" msgstr "" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Da" #: ui/changes.py:321 msgid "No" msgstr "" #: ui/changes.py:410 msgid "Open from first revision" msgstr "" #: ui/changes.py:415 msgid "Open from second revision" msgstr "" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "Nu se poate adnota un director" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "Adnotează - %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Linia" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Text" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "N/D" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "Acțiune" #: ui/log.py:338 msgid "Copy From Path" msgstr "" #: ui/log.py:338 msgid "Copy From Revision" msgstr "" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "" #: ui/log.py:791 msgid "View diff between revisions" msgstr "" #: ui/log.py:796 msgid "Compare with working copy" msgstr "" #: ui/log.py:806 msgid "Compare revisions" msgstr "" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "" #: ui/log.py:837 msgid "Edit log message..." msgstr "" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1047 msgid "Edit author" msgstr "" #: ui/log.py:1059 msgid "Edit log message" msgstr "" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "Necunoscut" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "Engleză" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "Selectează un program" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "Ești sigur că vrei să ștergi căile tale către depozitar?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "Căile către depozitar șterse" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "Ești sigur că vrei sa ÃŽČ›i ștergi mesajul anterior?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "Mesaj anterior șters" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "Vrei să ÃŽČ›i ștergi informațiile de autentificare?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "Informații de autentificare șterse" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "Trebuie să furnizați o cale pentru destinație." #: ui/branch.py:115 msgid "Branch/tag" msgstr "Domeniu/etichetă" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "Rulează comanda Domeniu/etichetă" #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "Domeniu/etichetă finalizat" #: ui/lock.py:73 msgid "Locked" msgstr "Blocat" #: ui/lock.py:167 msgid "Get Lock" msgstr "" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "" #: ui/lock.py:177 msgid "Completed Lock" msgstr "Blocare Terminată" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "" #: ui/switch.py:80 msgid "Switch" msgstr "Comută" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "" #: ui/switch.py:89 msgid "Completed Switch" msgstr "" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "" #: ui/widget.py:860 msgid "Number" msgstr "" #: ui/widget.py:861 msgid "Working Copy" msgstr "" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "Gazdă:" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "" #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "Nume" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "Propietăți + %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "Valoare" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:112 msgid "Reserved" msgstr "" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "" #: ui/action.py:338 msgid "Finished" msgstr "Terminat" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - Terminat" #: ui/action.py:365 msgid "Log Message" msgstr "" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "Deblochează" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "" #: ui/browser.py:89 msgid "Size" msgstr "" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "" #: ui/browser.py:353 msgid "Copy to..." msgstr "" #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "" #: ui/browser.py:363 msgid "Move to..." msgstr "" #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "Se șterge..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "Ștergere Finalizată" #: ui/create.py:46 msgid "Repository successfully created" msgstr "" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Proprietăți pentru:" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "Proprietățile selectate vor fi aplicate recursiv." #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "Editează..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "Nou..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "Adaugă Mesaj" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "Detalii Certificat" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "Mesaj" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "Mesaje Anterioare" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" "Ești sigur că vrei să ștergi %articol%?" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "Acceptă O data" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "Autentificare" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "Verifică Certificat" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "Confirmare" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "" #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "Confirmare ștergere" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "Interzice" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "Amprentă:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "Emitent:" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "Logare:" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "Parolă:" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "Mesaje Anterioare" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "Proprietate" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "Proprietate:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "Domeniu:" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "Valid:" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "Valoare:" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Autori:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Mulțumiri" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Limită:" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "Jurnal" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "ReÃŽmprospătare" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "Autentificare" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "Mesaje Jurnal" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "Istorie URL" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "Răsfoiește..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "Activează embleme" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "Activează atribute fișier" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "Programe Externe" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "General" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "Limbă:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "Logare" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "Număr mesaje de reținut" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "Date Salvate" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "Arată uneltele de depanare RabitVCS" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "Tip:" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "Selecteză/Deselecteză tot" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "Adnotează" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Mesaje de notifcare" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "Din:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "Opțiuni" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "Recursiv" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "Importă Mesaj" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "Include fișiere ignorate" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "Din URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "Ignoră antecedent" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "Asistent Ămbinare" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "Înregistrează doar ÃŽmbinarea" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "Arată jurnal" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "Test Îmbinare" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" rabbitvcs-0.19/po/ru.po000066400000000000000000001413241445560650400150440ustar00rootroot00000000000000# Russian translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-12-03 19:19+0000\n" "Last-Translator: Sergey Sedov \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "ĐŋŅ€ŅĐŧĐž ҁĐĩĐšŅ‡Đ°Ņ" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "%d ĐŧиĐŊŅƒŅ‚(Ņ‹) ĐŊаСад" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i ҁĐĩĐē҃ĐŊда" msgstr[1] "%i ҁĐĩĐē҃ĐŊĐ´Ņ‹" msgstr[2] "%i ҁĐĩĐē҃ĐŊĐ´" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i ĐŧиĐŊŅƒŅ‚Đ°" msgstr[1] "%i ĐŧиĐŊŅƒŅ‚Ņ‹" msgstr[2] "%i ĐŧиĐŊŅƒŅ‚" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i Ņ‡Đ°Ņ" msgstr[1] "%i Ņ‡Đ°ŅĐ°" msgstr[2] "%i Ņ‡Đ°ŅĐžĐ˛" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "" msgstr[1] "" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "" msgstr[1] "" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "" msgstr[1] "" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "" msgstr[1] "" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "ĐžŅ‚ĐģадĐēа" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "ĐžŅˆĐ¸ĐąĐēи" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "ĐžŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒ Ņ‚ĐĩŅ€ĐŧиĐŊаĐģ" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "ОбĐŊĐžĐ˛Đ¸Ņ‚ŅŒ ŅŅ‚Đ°Ņ‚ŅƒŅ" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "ĐžŅ‚ĐģадĐēа ĐžŅ‚ĐŧĐĩĐŊŅ‹ иСĐŧĐĩĐŊĐĩĐŊиК" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "ĐžŅ‚ĐŧĐĩĐŊŅĐĩŅ‚ иСĐŧĐĩĐŊĐĩĐŊĐ¸Ņ вО Đ˛ŅĐĩĐŧ Ņ‡Ņ‚Đž Đ˛Đ¸Đ´Đ¸Ņ‚" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "Đ”ĐžĐąĐ°Đ˛Đ¸Ņ‚ŅŒ ИĐēĐžĐŊĐē҃" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "Đ”ĐžĐąĐ°Đ˛Đ¸Ņ‚ŅŒ иĐēĐžĐŊĐē҃" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "ИСвĐģĐĩŅ‡ŅŒ..." #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "ИСвĐģĐĩ҇ĐĩĐŊиĐĩ Ņ€Đ°ĐąĐžŅ‡ĐĩĐš ĐēĐžĐŋии" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "ОбĐŊĐžĐ˛Đ¸Ņ‚ŅŒ" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "ОбĐŊĐžĐ˛Đ¸Ņ‚ŅŒ Ņ€Đ°ĐąĐžŅ‡ŅƒŅŽ ĐēĐžĐŋĐ¸ŅŽ" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "Đ—Đ°Ņ„Đ¸ĐēŅĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "Đ—Đ°Ņ„Đ¸ĐēŅĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ иСĐŧĐĩĐŊĐĩĐŊĐ¸Ņ в Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đ¸" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "ĐĄŅ€Đ°Đ˛ĐŊĐ¸Ņ‚ŅŒ ҁ ĐŋŅ€ĐĩĐ´ŅƒĐ´Ņ‹Ņ‰ĐĩĐš Ņ€ĐĩвиСиĐĩĐš" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "ПоĐēĐ°ĐˇĐ°Ņ‚ŅŒ ĐģĐžĐŗ" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "ПоĐēĐ°ĐˇĐ°Ņ‚ŅŒ ĐģĐžĐŗ Ņ„Đ°ĐšĐģа" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Đ”ĐžĐąĐ°Đ˛Đ¸Ņ‚ŅŒ" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "Đ”ĐžĐąĐ°Đ˛Đ¸Ņ‚ŅŒ в Đ¸ĐŗĐŊĐžŅ€" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "ОбĐŊĐžĐ˛Đ¸Ņ‚ŅŒ Đ´Đž Ņ€ĐĩвиСии..." #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "ОбĐŊĐžĐ˛Đ¸Ņ‚ŅŒ Ņ„Đ°ĐšĐģ Đ´Đž ĐžĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊĐŊОК Ņ€ĐĩвиСии" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "ПĐĩŅ€ĐĩиĐŧĐĩĐŊĐžĐ˛Đ°Ņ‚ŅŒ..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "ĐŖĐ´Đ°ĐģĐ¸Ņ‚ŅŒ" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "ĐžŅ‚ĐēĐ°Ņ‚Đ¸Ņ‚ŅŒ иСĐŧĐĩĐŊĐĩĐŊĐ¸Ņ" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "ВĐĩŅ€ĐŊŅƒŅ‚ŅŒ Đē Đ¸ŅŅ…ĐžĐ´ĐŊĐžĐŧ҃ ŅĐžŅŅ‚ĐžŅĐŊĐ¸ŅŽ" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "Đ Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ ĐēĐžĐŊŅ„ĐģиĐēŅ‚" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "ПоĐŧĐĩŅ‚Đ¸Ņ‚ŅŒ ĐēĐžĐŊŅ„ĐģиĐēŅ‚ ĐēаĐē ҃ĐģаĐļĐĩĐŊĐŊŅ‹Đš" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "Đ’ĐžŅŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒ" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "ПĐĩŅ€ĐĩҁĐĩĐģĐ¸Ņ‚ŅŒ..." #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "ПĐĩŅ€ĐĩĐąĐ°ĐˇĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ€Đ°ĐąĐžŅ‡ŅƒŅŽ ĐēĐžĐŋĐ¸ŅŽ" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "БĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēа..." #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "РаСйĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēа..." #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "РаСйĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅĐģĐĩĐŧĐĩĐŊŅ‚" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Đ—Đ°Ņ‡Đ¸ŅŅ‚Đ¸Ņ‚ŅŒ" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "Đ—Đ°Ņ‡Đ¸ŅŅ‚Đ¸Ņ‚ŅŒ Ņ€Đ°ĐąĐžŅ‡ŅƒŅŽ ĐēĐžĐŋĐ¸ŅŽ" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" "Đ­ĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ€Đ°ĐąĐžŅ‡ŅƒŅŽ ĐēĐžĐŋĐ¸ŅŽ иĐģи Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đš ĐąĐĩС иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Đ¸ Đž вĐĩŅ€ŅĐ¸ĐžĐŊĐŊĐžŅŅ‚Đ¸" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "ĐĄĐžĐˇĐ´Đ°Ņ‚ŅŒ Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đš СдĐĩҁҌ" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "ĐĄĐžĐˇĐ´Đ°Ņ‚ŅŒ Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đš в ĐŋаĐŋĐēĐĩ" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "ИĐŧĐŋĐžŅ€Ņ‚" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "ИĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅĐģĐĩĐŧĐĩĐŊŅ‚ в Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đš" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "ВĐĩŅ‚Đēа/Ņ‚ŅĐŗ..." #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "КоĐŋĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅĐģĐĩĐŧĐĩĐŊŅ‚ в Đ´Ņ€ŅƒĐŗĐžĐĩ ĐŧĐĩŅŅ‚Đž в Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đ¸" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "ПĐĩŅ€ĐĩĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "ĐĄĐŧĐĩĐŊĐ¸Ņ‚ŅŒ Đ°Đ´Ņ€Đĩҁ Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Ņ Ņ€Đ°ĐąĐžŅ‡ĐĩĐš ĐēĐžĐŋии" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "ĐĄĐģĐ¸ŅĐŊиĐĩ..." #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "ĐŸĐžŅˆĐ°ĐŗĐžĐ˛Ņ‹Đš ĐŧĐ°ŅŅ‚ĐĩŅ€ ҁĐģĐ¸ŅĐŊĐ¸Ņ" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "КоĐŧĐŧĐĩĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ..." #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "КоĐŧĐŧĐĩĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ„Đ°ĐšĐģ" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "ĐĄĐ˛ĐžĐšŅŅ‚Đ˛Đ°" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "" #: util/contextmenuitems.py:545 msgid "Help" msgstr "ПоĐŧĐžŅ‰ŅŒ" #: util/contextmenuitems.py:546 msgid "View help" msgstr "ĐŸĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ ĐŋĐžĐŧĐžŅ‰ŅŒ" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēи" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "ĐŸŅ€ĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ иĐģи иСĐŧĐĩĐŊĐ¸Ņ‚ŅŒ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи RabbitVCS" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "О ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧĐĩ" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "О RabbitVCS" #: util/contextmenuitems.py:563 msgid "Open" msgstr "ĐžŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒ" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "ĐŸŅ€ĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "ОбĐŊОвĐģĐĩĐŊиĐĩ..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "ОбĐŊОвĐģĐĩĐŊиĐĩ СавĐĩŅ€ŅˆĐĩĐŊĐž" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "ОбĐŊĐžĐ˛Đ¸Ņ‚ŅŒ Đ´Đž Ņ€ĐĩвиСии" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "ИСвĐģĐĩŅ‡ŅŒ" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "ИСвĐģĐĩ҇ĐĩĐŊиĐĩ СавĐĩŅ€ŅˆĐĩĐŊĐž" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "ĐŸŅƒŅ‚ŅŒ" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "Đ Đ°ŅŅˆĐ¸Ņ€ĐĩĐŊиĐĩ" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Đ—Đ°ĐŗŅ€ŅƒĐˇĐēа..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "НайдĐĩĐŊĐž %d ŅĐģĐĩĐŧĐĩĐŊŅ‚ĐžĐ˛" #: ui/add.py:157 msgid "Running Add Command..." msgstr "ДобавĐģĐĩĐŊиĐĩ..." #: ui/add.py:159 msgid "Completed Add" msgstr "ДобавĐģĐĩĐŊĐž" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "Đ­ĐēҁĐŋĐžŅ€Ņ‚ - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "ПоĐģŅ URL Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Ņ и ĐŋŅƒŅ‚ŅŒ ĐŊаСĐŊĐ°Ņ‡ĐĩĐŊĐ¸Ņ - ĐžĐąŅĐˇĐ°Ņ‚ĐĩĐģҌĐŊŅ‹." #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Đ­ĐēҁĐŋĐžŅ€Ņ‚" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "Đ­ĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ..." #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "Đ­ĐēҁĐŋĐžŅ€Ņ‚ СавĐĩŅ€ŅˆĐĩĐŊ" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "ĐŸŅ€Đ¸ĐŧĐĩĐŊĐ¸Ņ‚ŅŒ ĐŋĐ°Ņ‚Ņ‡" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "ĐŸŅ€Đ¸ĐŧĐĩĐŊĐ¸Ņ‚ŅŒ ĐŋĐ°Ņ‚Ņ‡ Đē ĐēĐ°Ņ‚Đ°ĐģĐžĐŗŅƒ..." #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "ĐŸŅ€Đ¸ĐŧĐĩĐŊĐĩĐŊиĐĩ ĐŋĐ°Ņ‚Ņ‡Đ°.." #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "ĐŸĐ°Ņ‚Ņ‡ ĐŋŅ€Đ¸ĐŧĐĩĐŊĐĩĐŊ" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "Đ”Đ°Ņ‚Đ°" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "ĐĄĐžĐžĐąŅ‰ĐĩĐŊиĐĩ" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "ИĐŧĐŋĐžŅ€Ņ‚ - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "ПоĐģĐĩ URL - ĐžĐąŅĐˇĐ°Ņ‚ĐĩĐģҌĐŊĐž" #: ui/import.py:81 msgid "Running Import Command..." msgstr "ИĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ..." #: ui/import.py:89 msgid "Completed Import" msgstr "ИĐŧĐŋĐžŅ€Ņ‚ СавĐĩŅ€ŅˆĐĩĐŊ" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "ПĐĩŅ€ĐĩиĐŧĐĩĐŊĐžĐ˛Đ°Ņ‚ŅŒ" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "НовоĐĩ иĐŧŅ:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "НовоĐĩ иĐŧŅ ĐžĐąĐ°ĐˇŅŅ‚ĐĩĐģҌĐŊĐž!" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "ПĐĩŅ€ĐĩиĐŧĐĩĐŊĐžĐ˛Ņ‹Đ˛Đ°ĐŊиĐĩ..." #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "ПĐĩŅ€ĐĩиĐŧĐĩĐŊОваĐŊĐž" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "ĐĄĐžŅŅ‚ĐžŅĐŊиĐĩ Ņ‚ĐĩĐēŅŅ‚Đ°" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "ĐĄĐžŅŅ‚ĐžŅĐŊиĐĩ" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "ФиĐēŅĐ°Ņ†Đ¸Ņ..." #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "ФиĐēŅĐ°Ņ†Đ¸Ņ СавĐĩŅ€ŅˆĐĩĐŊа" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "ĐĄĐžŅŅ‚ĐžŅĐŊиĐĩ" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "ЗаĐŋ҃ҁĐē Ņ‚ĐĩŅŅ‚Đ° ĐŊа ҁĐģĐ¸ŅĐŊиĐĩ" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "ĐĸĐĩҁ҂ ҁĐģĐ¸ŅĐŊĐ¸Ņ СавĐĩŅ€ŅˆĐĩĐŊ" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "ЗаĐŋ҃ҁĐē ҁĐģĐ¸ŅĐŊĐ¸Ņ" #: ui/merge.py:91 msgid "Completed Merge" msgstr "ĐĄĐģĐ¸ŅĐŊиĐĩ СавĐĩŅ€ŅˆĐĩĐŊĐž" #: ui/merge.py:102 msgid "Merge" msgstr "ĐĄĐģĐ¸Ņ‚ŅŒ" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" "В Ņ€Đ°ŅŅˆĐ¸Ņ€ĐĩĐŊии RabbitVCS Đ´ĐģŅ Nautilus ĐŋŅ€ĐžĐ¸ĐˇĐžŅˆĐģа ĐžŅˆĐ¸ĐąĐēа. ĐĄĐ˛ŅĐļĐ¸Ņ‚ĐĩҁҌ ҁ ĐēĐžĐŧаĐŊдОК RabbitVCS и ĐŋĐĩŅ€ĐĩĐ´Đ°ĐšŅ‚Đĩ Đ´ĐĩŅ‚Đ°Đģи ĐžŅˆĐ¸ĐąĐēи ĐŊиĐļĐĩ" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Đ’Ņ‹ĐąĐžŅ€ ĐēĐ°Ņ‚Đ°ĐģĐžĐŗĐ°" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "Đ´Đž" #: ui/dialog.py:261 msgid "Select a File" msgstr "Đ’Ņ‹ĐąŅ€Đ°Ņ‚ŅŒ Ņ„Đ°ĐšĐģ" #: ui/dialog.py:280 msgid "Save As..." msgstr "ĐĄĐžŅ…Ņ€Đ°ĐŊĐ¸Ņ‚ŅŒ ĐēаĐē..." #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "Đ’Ņ‹ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ‚ĐĩĐģҌĐŊĐž Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ĐŋŅ€ĐžĐ´ĐžĐģĐļĐ¸Ņ‚ŅŒ?" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "Đ˛Ņ‹ĐąŅ€Đ°ĐŊĐŊŅ‹Đĩ ŅĐģĐĩĐŧĐĩĐŊ҂ҋ" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "Đ´ĐžĐąĐ°Đ˛Đ¸Ņ‚ŅŒ ĐŋаĐŋĐē҃ в Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "Đ’ĐžŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиĐĩ Đ¸ŅŅ…ĐžĐ´ĐŊĐžĐŗĐž ŅĐžŅŅ‚ĐžŅĐŊĐ¸Ņ..." #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "Đ˜ŅŅ…ĐžĐ´ĐŊĐžĐĩ ŅĐžŅŅ‚ĐžŅĐŊиĐĩ Đ˛ĐžŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊĐž" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "ПоĐģŅ URL и ĐžŅ‚ - ĐžĐąŅĐˇĐ°Ņ‚ĐĩĐģҌĐŊŅ‹" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "ПĐĩŅ€ĐĩҁĐĩĐģĐ¸Ņ‚ŅŒ" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "ПĐĩŅ€ĐĩҁĐĩĐģĐĩĐŊиĐĩ" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "ПĐĩŅ€ĐĩҁĐĩĐģĐĩĐŊиĐĩ СавĐĩŅ€ŅˆĐĩĐŊĐž" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "Đ ĐĩĐ˛Đ¸ĐˇĐ¸Ņ" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "ĐĐ˛Ņ‚ĐžŅ€" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "ĐŸŅ€ĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ diff" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "ĐĄŅ€Đ°Đ˛ĐŊĐ¸Ņ‚ŅŒ Ņ€ŅĐ´ĐžĐŧ" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "Đ Đ°ĐˇŅ€Đĩ҈ĐĩĐŊиĐĩ ĐēĐžĐŊŅ„ĐģиĐēŅ‚Đ°..." #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "КоĐŊŅ„ĐģиĐēŅ‚ Ņ€Đĩ҈ĐĩĐŊ" #: ui/changes.py:49 msgid "More Actions..." msgstr "ДоĐŋĐžĐģĐŊĐ¸Ņ‚ĐĩĐģҌĐŊŅ‹Đĩ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ ..." #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "иСĐŧĐĩĐŊĐĩĐŊиĐĩ" #: ui/changes.py:279 msgid "Property Change" msgstr "ИСĐŧĐĩĐŊĐĩĐŊиĐĩ ŅĐ˛ĐžĐšŅŅ‚Đ˛Đ°" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Да" #: ui/changes.py:321 msgid "No" msgstr "НĐĩŅ‚" #: ui/changes.py:410 msgid "Open from first revision" msgstr "ĐžŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒ ҁ ĐŋĐĩŅ€Đ˛ĐžĐš Ņ€ĐĩвиСии" #: ui/changes.py:415 msgid "Open from second revision" msgstr "ĐžŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒ ŅĐž Đ˛Ņ‚ĐžŅ€ĐžĐš Ņ€ĐĩвиСии" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "НĐĩĐģŅŒĐˇŅ ĐēĐžĐŧĐŧĐĩĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐēĐ°Ņ‚Đ°ĐģĐžĐŗĐ¸" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "КоĐŧĐŧĐĩĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ - %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "ĐĄŅ‚Ņ€ĐžĐēа" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "ĐĸĐĩĐēҁ҂" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "ĐĐ°Ņ‡Đ°ĐģҌĐŊĐ°Ņ Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸Ņ Đ´ĐžĐģĐļĐŊĐž ĐąŅ‹Ņ‚ŅŒ ҆ĐĩĐģĐžĐĩ Ņ‡Đ¸ŅĐģĐž" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "Đ›ĐžĐŗ - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "Н/Д" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "ДĐĩĐšŅŅ‚Đ˛Đ¸Đĩ" #: ui/log.py:338 msgid "Copy From Path" msgstr "КоĐŋĐ¸Ņ иС ĐŋŅƒŅ‚Đ¸" #: ui/log.py:338 msgid "Copy From Revision" msgstr "КоĐŋĐ¸Ņ иС Ņ€ĐĩвиСии" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "" #: ui/log.py:791 msgid "View diff between revisions" msgstr "ПоĐēĐ°ĐˇĐ°Ņ‚ŅŒ ĐžŅ‚ĐģĐ¸Ņ‡Đ¸Ņ ĐŧĐĩĐļĐ´Ņƒ Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸ŅĐŧи" #: ui/log.py:796 msgid "Compare with working copy" msgstr "" #: ui/log.py:806 msgid "Compare revisions" msgstr "ĐĄŅ€Đ°Đ˛ĐŊĐ¸Ņ‚ŅŒ Ņ€ĐĩвиСии" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "ПоĐēĐ°ĐˇĐ°Ņ‚ŅŒ ĐžŅ‚ĐģĐ¸Ņ‡Đ¸Ņ ĐŧĐĩĐļĐ´Ņƒ Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸ŅĐŧи" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "" #: ui/log.py:837 msgid "Edit log message..." msgstr "" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1047 msgid "Edit author" msgstr "" #: ui/log.py:1059 msgid "Edit log message" msgstr "" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "АĐŊĐŗĐģĐ¸ĐšŅĐēиК" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "Đ’Ņ‹ĐąĐžŅ€ ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧŅ‹" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "Đ’Ņ‹ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ‚ĐĩĐģҌĐŊĐž Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ŅƒĐ´Đ°ĐģĐ¸Ņ‚ŅŒ Đ°Đ´Ņ€ĐĩŅĐ° Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đĩв?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "ĐĐ´Ņ€ĐĩŅĐ° Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đĩв ŅƒĐ´Đ°ĐģĐĩĐŊŅ‹" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "Đ’Ņ‹ Ņ‚ĐžŅ‡ĐŊĐž Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ŅƒĐ´Đ°ĐģĐ¸Ņ‚ŅŒ Đ˛Đ°ŅˆĐ¸ ĐŋŅ€ĐĩĐ´Ņ‹Đ´ŅƒŅ‰Đ¸Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊĐ¸Ņ?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "ĐŸŅ€ĐĩĐ´Ņ‹Đ´ŅƒŅ‰Đ¸Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊĐ¸Ņ ŅƒĐ´Đ°ĐģĐĩĐŊŅ‹" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "Đ’Ņ‹ Ņ‚ĐžŅ‡ĐŊĐž Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ŅƒĐ´Đ°ĐģĐ¸Ņ‚ŅŒ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ŅŽ Ой Đ°ŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸Đ¸?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ Đž Đ°ŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸Đ¸ ŅƒĐ´Đ°ĐģĐĩĐŊа" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "Đ’Ņ‹ Đ´ĐžĐģĐļĐŊŅ‹ ĐˇĐ°Đ´Đ°Ņ‚ŅŒ ĐŋŅƒŅ‚ŅŒ ĐŊаСĐŊĐ°Ņ‡ĐĩĐŊĐ¸Ņ." #: ui/branch.py:115 msgid "Branch/tag" msgstr "ВĐĩŅ‚Đēа/Ņ‚ŅĐŗ" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "ХОСдаĐŊиĐĩ вĐĩŅ‚Đēи/Ņ‚ŅĐŗĐ°..." #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "ВĐĩŅ‚Đēа/Ņ‚ŅĐŗ ŅĐžĐˇĐ´Đ°ĐŊа" #: ui/lock.py:73 msgid "Locked" msgstr "БĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°ĐŊ" #: ui/lock.py:167 msgid "Get Lock" msgstr "ЗабĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "БĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēа..." #: ui/lock.py:177 msgid "Completed Lock" msgstr "ЗабĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°ĐŊĐž" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "ĐŖĐēаĐļĐ¸Ņ‚Đĩ Đ°Đ´Ņ€Đĩҁ Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Ņ" #: ui/switch.py:80 msgid "Switch" msgstr "ПĐĩŅ€ĐĩĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "ПĐĩŅ€ĐĩĐēĐģŅŽŅ‡ĐĩĐŊиĐĩ" #: ui/switch.py:89 msgid "Completed Switch" msgstr "ПĐĩŅ€ĐĩĐēĐģŅŽŅ‡ĐĩĐŊиĐĩ СавĐĩŅ€ŅˆĐĩĐŊĐž" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "ВĐĩĐ´ŅƒŅ‰Đ°Ņ" #: ui/widget.py:860 msgid "Number" msgstr "" #: ui/widget.py:861 msgid "Working Copy" msgstr "" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "ĐĨĐžŅŅ‚:" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "ИСвĐģĐĩŅ‡ŅŒ - %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "ИСвĐģĐĩ҇ĐĩĐŊиĐĩ Đ¸ŅŅ…ĐžĐ´ĐŊиĐēОв..." #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "ИĐŧŅ" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "ĐĄĐžĐˇĐ´Đ°Ņ‚ŅŒ ĐŋĐ°Ņ‚Ņ‡" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "ЗадаĐŊĐŊŅ‹Đš ĐŋŅƒŅ‚ŅŒ ĐŊĐĩ ŅĐ˛ĐģŅĐĩŅ‚ŅŅ Ņ€Đ°ĐąĐžŅ‡ĐĩĐš ĐēĐžĐŋиĐĩĐš" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "ХОСдаĐŊĐ¸Ņ Ņ„Đ°ĐšĐģа ĐŋĐ°Ņ‚Ņ‡Đ°" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "ĐŸĐ°Ņ‚Ņ‡ ŅĐžĐˇĐ´Đ°ĐŊ" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "ĐĄĐ˛ĐžĐšŅŅ‚Đ˛Đ° - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "ЗĐŊĐ°Ņ‡ĐĩĐŊиĐĩ" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:112 msgid "Reserved" msgstr "" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "ĐĸиĐŋ mime" #: ui/action.py:338 msgid "Finished" msgstr "ЗавĐĩŅ€ŅˆĐĩĐŊĐž" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - ЗавĐĩŅ€ŅˆĐĩĐŊĐž" #: ui/action.py:365 msgid "Log Message" msgstr "" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "РаСйĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "ĐĄĐŊĐ°Ņ‚Đ¸Đĩ ĐąĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēи..." #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "БĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēа ҁĐŊŅŅ‚Đ°" #: ui/browser.py:89 msgid "Size" msgstr "РаСĐŧĐĩŅ€" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "ĐĄĐžĐˇĐ´Đ°Ņ‚ŅŒ ĐēĐ°Ņ‚Đ°ĐģĐžĐŗ..." #: ui/browser.py:353 msgid "Copy to..." msgstr "КоĐŋĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ в..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "ĐĄĐēĐžĐŋĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Đ°Đ´Ņ€Đĩҁ в ĐąŅƒŅ„ĐĩŅ€" #: ui/browser.py:363 msgid "Move to..." msgstr "ПĐĩŅ€ĐĩĐŧĐĩŅŅ‚Đ¸Ņ‚ŅŒ в..." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "ĐšŅƒĐ´Đ° Đ˛Ņ‹ Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ҁĐēĐžĐŋĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Đ˛Ņ‹Đ´ĐĩĐģĐĩĐŊĐŊĐžĐĩ?" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "НовоĐĩ ĐŧĐĩŅŅ‚Đž:" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "ĐšŅƒĐ´Đ° Đ˛Ņ‹ Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ĐŋĐĩŅ€ĐĩĐŧĐĩŅŅ‚Đ¸Ņ‚ŅŒ Đ˛Ņ‹Đ´ĐĩĐģĐĩĐŊĐŊĐžĐĩ?" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "Đ—Đ°Ņ‡Đ¸ŅŅ‚Đēа..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "Đ—Đ°Ņ‡Đ¸ŅŅ‚Đēа СавĐĩŅ€ŅˆĐĩĐŊа" #: ui/create.py:46 msgid "Repository successfully created" msgstr "Đ ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đš ҃ҁĐŋĐĩ҈ĐŊĐž ŅĐžĐˇĐ´Đ°ĐŊ" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "ĐžŅˆĐ¸ĐąĐēа ĐŋŅ€Đ¸ ŅĐžĐˇĐ´Đ°ĐŊии Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Ņ. ĐŖĐąĐĩĐ´Đ¸Ņ‚ĐĩҁҌ Ņ‡Ņ‚Đž ĐŋаĐŋĐēа ĐŋŅƒŅŅ‚Đ°." #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "ĐĄĐ˛ĐžĐšŅŅ‚Đ˛Đ° Đ´ĐģŅ:" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "Đ’Ņ‹ĐąŅ€Đ°ĐŊĐŊŅ‹Đĩ ŅĐ˛ĐžĐšŅŅ‚Đ˛Đ° ĐąŅƒĐ´ŅƒŅ‚ ĐŋŅ€Đ¸ĐŧĐĩĐŊĐĩĐŊŅ‹ Ņ€ĐĩĐēŅƒŅ€ŅĐ¸Đ˛ĐŊĐž." #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "ĐŖĐ´Đ°ĐģŅŅ‚ŅŒ ŅĐ˛ĐžĐšŅŅ‚Đ˛Đ° Ņ€ĐĩĐēŅƒŅ€ŅĐ¸Đ˛ĐŊĐž" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "Đ ĐĩдаĐēŅ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "ĐĐžĐ˛Ņ‹Đš..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "URL/ĐŸŅƒŅ‚ŅŒ:" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "Đ”ĐžĐąĐ°Đ˛Đ¸Ņ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "ĐĄĐ˛ĐžĐšŅŅ‚Đ˛Đ° ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ°" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "Đ ĐĩдаĐēŅ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ŅĐ˛ĐžĐšŅŅ‚Đ˛Đ°" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "ĐĄĐžĐžĐąŅ‰ĐĩĐŊиĐĩ" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "ПоĐļаĐģŅƒĐšŅŅ‚Đ° Đ´ĐžĐąĐ°Đ˛ŅŒŅ‚Đĩ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ŅŽ Ой Đ°ŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸Đ¸" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "ĐŸŅ€ĐĩĐ´Ņ‹Đ´ŅƒŅ‰Đ¸Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊĐ¸Ņ" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" "Đ’Ņ‹ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Ņ‚ĐĩĐģҌĐŊĐž Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ŅƒĐ´Đ°ĐģĐ¸Ņ‚ŅŒ %item%?" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "ĐŸŅ€Đ¸ĐŊŅŅ‚ŅŒ ĐŊĐ°Đ˛ŅĐĩĐŗĐ´Đ°" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "ĐŸŅ€Đ¸ĐŊŅŅ‚ŅŒ ĐĩдиĐŊĐžĐļĐ´Ņ‹" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "ĐŸŅ€Đ¸ĐŧĐĩĐŊŅŅ‚ŅŒ ŅĐ˛ĐžĐšŅŅ‚Đ˛Đ° Ņ€ĐĩĐēŅƒŅ€ŅĐ¸Đ˛ĐŊĐž" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "ĐŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸Ņ" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "ĐŸŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "ĐŸĐžĐ´Ņ‚Đ˛ĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "" #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "ĐŖĐ´Đ°ĐģĐ¸Ņ‚ŅŒ ĐŋĐžĐ´Ņ‚Đ˛ĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "ЗаĐŋŅ€ĐĩŅ‚Đ¸Ņ‚ŅŒ" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "Fingerprint:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "ИĐŧŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ˛Đ°Ņ‚ĐĩĐģŅ:" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "ĐŸĐ°Ņ€ĐžĐģҌ:" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "ĐŸŅ€ĐĩĐ´Ņ‹Đ´ŅƒŅ‰Đ¸Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊĐ¸Ņ" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "ĐĄĐ˛ĐžĐšŅŅ‚Đ˛Đž" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "ĐĄĐ˛ĐžĐšŅŅ‚Đ˛Đž:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "ОбĐģĐ°ŅŅ‚ŅŒ:" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "ĐĄĐžŅ…Ņ€Đ°ĐŊĐ¸Ņ‚ŅŒ Đ°ŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸ŅŽ" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "Đ­ĐģĐĩĐŧĐĩĐŊ҂ҋ ĐąŅƒĐ´ŅƒŅ‚ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊŅ‹ в ĐēĐžŅ€ĐˇĐ¸ĐŊ҃" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "ДĐĩĐšŅŅ‚Đ˛Đ¸Ņ‚ĐĩĐģĐĩĐŊ:" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "ЗĐŊĐ°Ņ‡ĐĩĐŊиĐĩ:" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "ĐĄŅŅ‹ĐģĐēи" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ Đž вĐĩŅ€ŅĐ¸Đ¸" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "ĐĐ˛Ņ‚ĐžŅ€Ņ‹:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "ĐĄĐŋĐ°ŅĐ¸ĐąĐž:" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "ĐĸайĐģĐ¸Ņ†Đ° Ņ€ĐĩвиСиК" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "ĐžĐŗŅ€ĐŊĐ¸Ņ‡ĐĩĐŊиĐĩ" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "Đ›ĐžĐŗ" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "ОбĐŊĐžĐ˛Đ¸Ņ‚ŅŒ" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "ĐžŅ‚ĐžĐąŅ€Đ°ĐļĐĩĐŊĐŊŅ‹Đĩ Ņ€ĐĩвиСии:" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "ĐžŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒŅŅ ĐŊа ĐēĐžĐŋĐ¸Ņ€ĐžĐ˛Đ°ĐŊии" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "Đ’Ņ‹ĐˇĐ˛Đ°ĐŊа ĐˇĐ°Ņ‡Đ¸ŅŅ‚Đēа...\n" "\n" "ĐĐ°Ņ‡Đ°Ņ‚ŅŒ ĐˇĐ°Ņ‡Đ¸ŅŅ‚Đē҃ Ņ€Đ°ĐąĐžŅ‡ĐĩĐš ĐēĐžĐŋии?" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "ĐŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸Ņ" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "ĐĄĐžĐžĐąŅ‰ĐĩĐŊĐ¸Ņ ĐģĐžĐŗĐ°" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēи ĐļŅƒŅ€ĐŊаĐģа" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "ĐŸŅ€ĐžĐŗŅ€Đ°ĐŧĐŧа Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧĐ°Ņ Đ´ĐģŅ ŅŅ€Đ°Đ˛ĐŊĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģОв" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "Đ˜ŅŅ‚ĐžŅ€Đ¸Ņ URL" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "ĐžĐąĐˇĐžŅ€..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "ĐŖĐ´Đ°ĐģĐ¸Ņ‚ŅŒ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ŅŽ Ой Đ°ŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸Đ¸" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "Đ Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ иĐēĐžĐŊĐēи" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "Đ Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ Đ°Ņ‚Ņ€Đ¸ĐąŅƒŅ‚Ņ‹ Ņ„Đ°ĐšĐģОв" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "Đ Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ Ņ€ĐĩĐēŅƒŅ€ŅĐ¸Đ˛ĐŊŅƒŅŽ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đē҃ ŅŅ‚Đ°Ņ‚ŅƒŅĐ°" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "ВĐŊĐĩ҈ĐŊиĐĩ ĐŸŅ€ĐžĐŗŅ€Đ°ĐŧĐŧŅ‹" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "ĐžĐąŅ‰Đ¸Đĩ" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "Đ¯ĐˇŅ‹Đē:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "Đ–ŅƒŅ€ĐŊаĐģ" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "МаĐēŅĐ¸ĐŧаĐģҌĐŊŅ‹Đš ŅƒŅ€ĐžĐ˛ĐĩĐŊҌ ĐļŅƒŅ€ĐŊаĐģа" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "ĐĄĐēĐžĐģҌĐēĐž URL'Ов СаĐŋĐžĐŧиĐŊĐ°Ņ‚ŅŒ" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "ĐĄĐēĐžĐģҌĐēĐž ŅĐžĐžĐąŅ‰ĐĩĐŊиК СаĐŋĐžĐŧиĐŊĐ°Ņ‚ŅŒ" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "ĐĄĐžŅ…Ņ€Đ°ĐŊĐĩĐŊĐŊŅ‹Đĩ даĐŊŅ‹ĐŊĐĩ" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "ПоĐēĐ°ĐˇĐ°Ņ‚ŅŒ ŅƒŅ‚Đ¸ĐģĐ¸Ņ‚Ņ‹ ĐžŅ‚ĐģадĐēи RabbitVCS" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "МĐĩĐŊŅŽ ĐžŅ‚ĐģадĐēи Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚ŅŅ Đ´ĐģŅ Đ´Đ¸Đ°ĐŗĐŊĐžŅŅ‚Đ¸Đēи ĐŊĐĩĐŋĐžĐģадОĐē RabbitVCS" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "ĐĸиĐŋ:" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "ФаКĐģŅ‹ ĐŊа ĐąĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēи" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "ПоĐļаĐģŅƒĐšŅŅ‚Đ° ĐžĐŋĐ¸ŅˆĐ¸Ņ‚Đĩ ĐŋŅ€Đ¸Ņ‡Đ¸ĐŊ҃ ĐąĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēи ŅŅ‚Đ¸Ņ… Ņ„Đ°ĐšĐģОв" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "БĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ„Đ°ĐšĐģŅ‹" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "Đ’Ņ‹ĐąŅ€Đ°Ņ‚ŅŒ / ĐĄĐŊŅŅ‚ŅŒ Đ˛Ņ‹ĐąĐžŅ€ Đ´ĐģŅ Đ˛ŅĐĩĐŗĐž" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "ĐĄĐēŅ€Ņ‹Ņ‚ŅŒ ĐąĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đēи" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "ИС Ņ€ĐĩвиСии" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "КоĐŧĐŧĐĩĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "Đ—Đ°Ņ„Đ¸ĐēŅĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ в:" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "ПоĐēĐ°ĐˇĐ°Ņ‚ŅŒ Ņ„Đ°ĐšĐģŅ‹ ĐąĐĩС вĐĩŅ€ŅĐ¸Đ¸" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "ĐĄĐžĐžĐąŅ‰ĐĩĐŊĐ¸Ņ ĐžĐŋОвĐĩ҉ĐĩĐŊиК" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "ИСĐŧĐĩĐŊĐ¸Ņ‚ŅŒ Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đš Đ˛Đ°ŅˆĐĩĐš Ņ€Đ°ĐąĐžŅ‡ĐĩĐš ĐēĐžĐŋии" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "ИС:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "В:" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēи" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "Đ ĐĩĐ˛Đ¸ĐˇĐ¸Ņ" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "БĐĩС вĐŊĐĩ҈ĐŊĐ¸Ņ… вĐēĐģŅŽŅ‡ĐĩĐŊиК" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "Đ ĐĩĐēŅƒŅ€ŅĐ¸Đ˛ĐŊĐž" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "ĐĄĐžĐžĐąŅ‰ĐĩĐŊиĐĩ ИĐŧĐŋĐžŅ€Ņ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊĐ¸Ņ" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "Đ ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đš" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ Đ¸ĐŗĐŊĐžŅ€Đ¸Ņ€ŅƒĐĩĐŧŅ‹Đĩ Ņ„Đ°ĐšĐģŅ‹" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "ИС URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "ИС: (URL и Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸Ņ Đ´ĐģŅ ҁĐģĐ¸Ņ‚Đ¸Ņ)" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "ДиаĐŋОСОĐŊ Ņ€ĐĩвиСиК" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "В: (URL и Ņ€ĐĩĐ˛Đ¸ĐˇĐ¸Ņ Đ´ĐģŅ ҁĐģĐ¸ŅĐŊĐ¸Ņ)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "URL Đ´ĐģŅ ҁĐģĐ¸ŅĐŊĐ¸Ņ иС" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "Đ Đ°ĐąĐžŅ‡Đ°Ņ ĐēĐžĐŋĐ¸Ņ" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "Đ’Ņ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ŅŅ‚ĐžŅ‚ ĐŧĐĩŅ‚ĐžĐ´ ĐĩҁĐģи Đ˛Ņ‹ вĐŊĐžŅĐ¸Đģи иСĐŧĐĩĐŊĐĩĐŊĐ¸Ņ в вĐĩŅ‚Đē҃ и ĐļĐĩĐģаĐĩŅ‚Đĩ ҁĐģĐ¸Ņ‚ŅŒ ŅĐ˛ĐžĐ¸ " "иСĐŧĐĩĐŊĐĩĐŊĐ¸Ņ ҁ Đ´Ņ€ŅƒĐŗĐžĐš вĐĩŅ‚ĐēОК." #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "Đ’Ņ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ŅŅ‚ĐžŅ‚ ĐŧĐĩŅ‚ĐžĐ´ ĐĩҁĐģи Đ˛Ņ‹ Ņ…ĐžŅ‚Đ¸Ņ‚Đĩ ҁĐģĐ¸Ņ‚ŅŒ двĐĩ Ņ€Đ°ĐˇĐŊҋ҅ вĐĩŅ‚Đēи в ŅĐ˛ĐžŅŽ Ņ€Đ°ĐąĐžŅ‡ŅƒŅŽ " "ĐēĐžĐŋĐ¸ŅŽ." #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "Đ˜ĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐŋŅ€ĐĩĐ´ĐēОв" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "ПоĐŧĐžŅ‰ĐŊиĐē ĐĄĐģĐ¸ŅĐŊĐ¸Ņ" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "ĐĄĐģĐ¸Ņ‚ŅŒ диаĐŋОСОĐŊ Ņ€ĐĩвиСиК" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "ĐĄĐģĐ¸Ņ‚ŅŒ два Ņ€Đ°ĐˇĐģĐ¸Ņ‡ĐŊҋ҅ Đ´ĐĩŅ€Đĩва" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "ĐĸĐžĐģҌĐēĐž ĐˇĐ°Ņ€ĐĩĐŗĐ¸ŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ҁĐģĐ¸ŅĐŊиĐĩ" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "ПоĐēĐ°ĐˇĐ°Ņ‚ŅŒ ĐģĐžĐŗ" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "ĐŸŅ€ĐžĐąĐŊĐžĐĩ ҁĐģĐ¸ŅĐŊиĐĩ" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" "Đ˜ŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ диаĐģĐžĐŗ ĐģĐžĐŗĐ° Đ´ĐģŅ Đ˛Ņ‹ĐąĐžŅ€Đ° Ņ€ĐĩвиСиК Đ´ĐģŅ ҁĐģĐ¸ŅĐŊĐ¸Ņ. ИĐģи вĐŋĐ¸ŅˆĐ¸Ņ‚Đĩ Ņ€ĐĩвиСии " "Đ˛Ņ€ŅƒŅ‡ĐŊŅƒŅŽ ҇ĐĩŅ€ĐĩС СаĐŋŅŅ‚ŅƒŅŽ. Đ’Ņ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ҃ĐēĐ°ĐˇĐ°Ņ‚ŅŒ диаĐŋаСОĐŊ ҇ĐĩŅ€ĐĩС Ņ‚Đ¸Ņ€Đĩ \n" "\n" "ĐŸŅ€Đ¸ĐŧĐĩŅ€: 4-7,9,11,15-HEAD\n" "\n" "ĐžŅŅ‚Đ°Đ˛ŅŒŅ‚Đĩ ĐŋŅƒŅŅ‚Ņ‹Đŧ Đ´ĐģŅ ҁĐģĐ¸ŅĐŊĐ¸Ņ Đ˛ŅĐĩŅ… Ņ€ĐĩвиСиК." #~ msgid "Completed" #~ msgstr "ЗавĐĩŅ€ŅˆĐĩĐŊĐž" #~ msgid "(no author)" #~ msgstr "(ĐąĐĩС Đ°Đ˛Ņ‚ĐžŅ€Đ°)" #~ msgid "Program used to browse repositories" #~ msgstr "ĐŸŅ€ĐžĐŗŅ€Đ°ĐŧĐŧа Đ´ĐģŅ ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€Đ° Ņ€ĐĩĐŋĐžĐˇĐ¸Ņ‚ĐžŅ€Đ¸Đĩв" #~ msgid "Show new version on the right side" #~ msgstr "ПоĐēĐ°ĐˇŅ‹Đ˛Đ°Ņ‚ŅŒ ĐŊĐžĐ˛ŅƒŅŽ вĐĩŅ€ŅĐ¸ŅŽ ҁĐŋŅ€Đ°Đ˛Đ°" #~ msgid "Update Depth" #~ msgstr "ГĐģŅƒĐąĐ¸ĐŊа ОйĐŊОвĐģĐĩĐŊĐ¸Ņ" #~ msgid "Added" #~ msgstr "ДобавĐģĐĩĐŊĐž" #~ msgid "Merged" #~ msgstr "ĐĄĐģĐ¸Ņ‚Đž" #~ msgid "Create copy from" #~ msgstr "ĐĄĐžĐˇĐ´Đ°Ņ‚ŅŒ ĐēĐžĐŋĐ¸ŅŽ иС" #~ msgid "Missing" #~ msgstr "ĐŸŅ€ĐžĐŋŅƒŅ‰ĐĩĐŊ" #~ msgid "Unchanged" #~ msgstr "НĐĩ иСĐŧĐĩĐŊĐĩĐŊ" #~ msgid "External" #~ msgstr "ВĐŊĐĩ҈ĐŊиК" #~ msgid "Replaced" #~ msgstr "ЗаĐŧĐĩĐŊĐĩĐŊ" #~ msgid "Skipped" #~ msgstr "ĐŸŅ€ĐžĐŋŅƒŅ‰ĐĩĐŊ" #~ msgid "Updated" #~ msgstr "ОбĐŊОвĐģĐĩĐŊ" #~ msgid "Unlocked" #~ msgstr "РаСйĐģĐžĐēĐ¸Ņ€ĐžĐ˛Đ°ĐŊ" #~ msgid "Deleted" #~ msgstr "ĐŖĐ´Đ°ĐģĐĩĐŊ" #~ msgid "Restored" #~ msgstr "Đ’ĐžŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊ" #~ msgid "Resolved" #~ msgstr "ĐŖĐģаĐļĐĩĐŊ" #~ msgid "Destination:" #~ msgstr "НазĐŊĐ°Ņ‡ĐĩĐŊиĐĩ:" #~ msgid "Annotated" #~ msgstr "ĐŸŅ€ĐžĐēĐžĐŧĐŧĐĩĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊĐž" rabbitvcs-0.19/po/sk.po000066400000000000000000001261151445560650400150340ustar00rootroot00000000000000# Slovak translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-02-09 10:19+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Slovak \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "" msgstr[1] "" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "" msgstr[1] "" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "" msgstr[1] "" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "" msgstr[1] "" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "" msgstr[1] "" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "" msgstr[1] "" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "SprÃĄva o ladení" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "Chyby" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "OtvoriÅĨ shell" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "ObnoviÅĨ stav" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "VrÃĄti vÅĄetko viditeÄžnÊ" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "ZruÅĄÃ­" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "PridaÅĨ znak" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "PridaÅĨ nejakÃŊ znak" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "Pozrite sa na pracovnÃē kÃŗpiu" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "AktualizÃĄcia" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "AktualizovaÅĨ pracovnÃē kÃŗpiu" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "OdovzdaÅĨ" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "ReÅĄpektovaÅĨ zmeny repozitÃĄra" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "Zobrazenie zmien do sÃēboru" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "ZobraziÅĨ zÃĄznam" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "PridaÅĨ" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "PridaÅĨ do zoznamu ignorovanÃŊch" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "AktualizÃĄcia revízie" #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "AktualizÃĄcia sÃēboru do určenej revízie" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "PremenovaÅĨ" #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "OdstrÃĄniÅĨ" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "SpäÅĨ" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "VrÃĄtiÅĨ poloÅžku do jej nezmenenÊho stavu" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "RieÅĄenie" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "OznačiÅĨ poloÅžku v rozpore ako vyrieÅĄenÃē" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "ObnoviÅĨ" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "PremiestniÅĨ..." #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "PremiestniÅĨ vaÅĄu pracovnÃē kÃŗpiu" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "LokÃĄlny zÃĄmok poloÅžky" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "Vydanie zÃĄmku ..." #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "Vydanie zÃĄmku na poloÅžku" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Čistenie" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "VyčistiÅĨ pracovnÃē kÃŗpiu" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "ExportovaÅĨ pracovnÃē kÃŗpiu alebo repozitÃĄre bez informÃĄcie o verzii" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "VytvoriÅĨ repozitÃĄre tu" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "VytvoriÅĨ repozitÃĄre v priečinku" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "Import" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "ImportovaÅĨ poloÅžky do repozitÃĄra" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "Branch/tag..." #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "KopírovaÅĨ poloÅžku na inÊ miesto v repozitÃĄri" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "Prepni..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "ZmeniÅĨ umiestnenie repozitÃĄra pracovnej kÃŗpie" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "ZlÃēčiÅĨ..." #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "A sprievodca s krokmi pre zlÃēčenie" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "KomentovaÅĨ..." #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "KomentovaÅĨ sÃēbor" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "Vlastnosti" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "PozrieÅĨ vlastnosti poloÅžky" #: util/contextmenuitems.py:545 msgid "Help" msgstr "Pomocník" #: util/contextmenuitems.py:546 msgid "View help" msgstr "PozrieÅĨ pomocníka" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "Nastavenia" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "PozrieÅĨ alebo zmeniÅĨ nastavenia RabbitVCS" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "O" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "O RabbitVCS" #: util/contextmenuitems.py:563 msgid "Open" msgstr "OtvoriÅĨ" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "PrehÄžadÃĄvaÅĨ" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "AktualizÃĄcia..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "AktualizÃĄcia dokončenÃĄ" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "AktualizovaÅĨ revíziu" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "VyskÃēÅĄanie" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "VyskÃēÅĄanie ukončenÊ" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "Cesta" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "RozÅĄÃ­renie" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Načítavam..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "NÃĄjdenÃĄ %d poloÅžka(y)" #: ui/add.py:157 msgid "Running Add Command..." msgstr "SpÃēÅĄÅĨam príkaz na pridanie" #: ui/add.py:159 msgid "Completed Add" msgstr "Pridanie ukončenÊ" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "Export - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "" #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Export" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "SpÃēÅĄÅĨam príkaz na export" #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "Export ukončenÃŊ" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "" #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "DÃĄtum" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "SprÃĄava" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "Import - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "" #: ui/import.py:81 msgid "Running Import Command..." msgstr "SpÃēÅĄÅĨam príkaz na importovanie" #: ui/import.py:89 msgid "Completed Import" msgstr "Import ukončenÃŊ" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "PremenovaÅĨ" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "NovÃŊ nÃĄzov" #: ui/rename.py:60 msgid "The new name field is required" msgstr "VyÅžadovanÃŊ je novÃŊ nÃĄzov poÄža" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "SpÃēÅĄÅĨam príkaz na premenovanie..." #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "Premenovanie dokončenÊ" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "Stav textu" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "Stav objektu" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "SpÃēÅĄÅĨam príkaz na odovzdanie" #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "Odovzdanie ukončenÊ" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "Stav" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "SpÃēÅĄÅĨam test zlÃēčenia" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "Test zlÃēčenia ukončenÃŊ" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "SpÃēÅĄÅĨam príkaz na zlÃēčenie" #: ui/merge.py:91 msgid "Completed Merge" msgstr "ZlÃēčenie ukončenÊ" #: ui/merge.py:102 msgid "Merge" msgstr "ZlÃēčenie" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Vyber priečinok" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "do" #: ui/dialog.py:261 msgid "Select a File" msgstr "Vyber sÃēbor" #: ui/dialog.py:280 msgid "Save As..." msgstr "" #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "Ste si istÃŊ Åže chcete pokračovaÅĨ?" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "vybranÃĄ poloÅžka(y)" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "SpÃēÅĄÅĨam spätnÃŊ príkaz" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "NÃĄvrat ukončenÃŊ" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "PremiestniÅĨ" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "SpÃēÅĄÅĨam príkaz na premiestnenie..." #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "Premiestnenie ukončenÊ" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "Revízia" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "Autor" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "SpÃēÅĄÅĨam príkaz na rieÅĄenie" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "RieÅĄenie ukončenÊ" #: ui/changes.py:49 msgid "More Actions..." msgstr "" #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "" #: ui/changes.py:279 msgid "Property Change" msgstr "" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Ano" #: ui/changes.py:321 msgid "No" msgstr "" #: ui/changes.py:410 msgid "Open from first revision" msgstr "" #: ui/changes.py:415 msgid "Open from second revision" msgstr "" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "NemoÅžno komentovaÅĨ adresÃĄr" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "KomentovaÅĨ -%s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Riadok" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Text" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "ZÃĄznam - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "N/A" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "Akcia" #: ui/log.py:338 msgid "Copy From Path" msgstr "KopírovaÅĨ zo zÃĄznamu" #: ui/log.py:338 msgid "Copy From Revision" msgstr "KopírovaÅĨ z revízie" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "" #: ui/log.py:791 msgid "View diff between revisions" msgstr "" #: ui/log.py:796 msgid "Compare with working copy" msgstr "" #: ui/log.py:806 msgid "Compare revisions" msgstr "" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "" #: ui/log.py:837 msgid "Edit log message..." msgstr "" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1047 msgid "Edit author" msgstr "" #: ui/log.py:1059 msgid "Edit log message" msgstr "" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "NeznÃĄme" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "Anglicky" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "Vyberte program" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "Ste si istí, Åže chcete vymazaÅĨ vaÅĄu cestu k repozitÃĄrom?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "Cesta k repozitÃĄrom vymazanÃĄ" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "Ste si istÃŊ, Åže chcete vymazaÅĨ vaÅĄe predchÃĄdzajÃēce sprÃĄvy?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "PredchÃĄdzajÃēce sprÃĄvy vymazanÊ" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "Ste si istí, Åže chcete vymazaÅĨ vaÅĄe autentizačnÃŊ Ãēdaje?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "AutentizačnÃŊ Ãēdaje vymazanÊ" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "Musíte zadaÅĨ cieÄž umiestnenia." #: ui/branch.py:115 msgid "Branch/tag" msgstr "" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "" #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "" #: ui/lock.py:73 msgid "Locked" msgstr "ZamknutÃŊ" #: ui/lock.py:167 msgid "Get Lock" msgstr "Zamknite" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "SpÃēÅĄÅĨam príkaz na zamknutie" #: ui/lock.py:177 msgid "Completed Lock" msgstr "Zamknutie ukončenÊ" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "" #: ui/switch.py:80 msgid "Switch" msgstr "PrepnÃēÅĨ" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "SpÃēÅĄÅĨam príkaz na prepnutie" #: ui/switch.py:89 msgid "Completed Switch" msgstr "Prepnutie dokončenÊ" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "HEAD" #: ui/widget.py:860 msgid "Number" msgstr "" #: ui/widget.py:861 msgid "Working Copy" msgstr "" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "HostiteÄž:" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "VyskÃēÅĄanie - %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "SpÃēÅĄÅĨam test na vyskÃēÅĄanie" #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "NÃĄzov" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "Vlastnosti - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "Hodnota" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:112 msgid "Reserved" msgstr "" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "" #: ui/action.py:338 msgid "Finished" msgstr "DokončenÊ" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - DokončenÊ" #: ui/action.py:365 msgid "Log Message" msgstr "" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "OdomknÃēÅĨ" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "SpÃēÅĄÅĨam príkaz na odomknutie" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "Odomknutie dokončenÊ" #: ui/browser.py:89 msgid "Size" msgstr "" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "" #: ui/browser.py:353 msgid "Copy to..." msgstr "" #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "" #: ui/browser.py:363 msgid "Move to..." msgstr "" #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "VyčistenÊ..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "Čistenie ukončenÊ" #: ui/create.py:46 msgid "Repository successfully created" msgstr "RepozitÃĄr ÃēspeÅĄne vytvorenÃŊ" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" "DoÅĄlo ku chybe pri vytvÃĄraní repozitÃĄra. Uistite sa, či je prísluÅĄnÃĄ zloÅžka " "prÃĄzdna." #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Vlastnosti pre:" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "VybranÊ vlastnosti budÃē pouÅžitÊ rekurzívne." #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "OdstrÃĄniÅĨ vlastnosti rekurzívne" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "EditovaÅĨ..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "NovÃŊ..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "URL/Cesta:" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "PridaÅĨ sprÃĄvu" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "Podrobnosti certifikÃĄtu" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "UpraviÅĨ vlastnosÅĨ podrobností" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "SprÃĄva" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "Prosím pridajte vaÅĄe podrobnosti o overení" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "PredchÃĄdzajÃēce sprÃĄvy" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "Naozaj chcete zmazaÅĨ %poloÅžku%?" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "PrijaÅĨ navÅždy" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "PrijaÅĨ iba teraz" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "AutentizÃĄcia" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "Skontrolujte CertifikÃĄt" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "Potvrdenie" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "" #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "OdstrÃĄÅˆ potvrdenie" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "OdmietnuÅĨ" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "Odtlačok prsta:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "Emitent:" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "Prihlasovacie meno:" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "Heslo:" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "PredchÃĄdzajÃēca sprÃĄva" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "VlastnosÅĨ" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "VlastnosÅĨ:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "OblasÅĨ:" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "UloÅžiÅĨ overenie" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "PoloÅžka(y) bude zaslanÃĄ do koÅĄa." #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "PlatnÊ:" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "Hodnota:" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "Linky" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "InformÃĄcie o verzii" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Autori:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Poďakovanie" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "Revízna tabuÄžka" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Limit:" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "ZÃĄznam" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "ObnoviÅĨ" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "ZobraziÅĨ revízie:" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "Stop na kÃŗpiu" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "PoÅžadovanÊ čistenie....\n" "\n" "Otvorenie pracovnej kÃŗpie čistenia?" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "AutentizÃĄcia" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "ZÃĄznam sprÃĄv" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "MoÅžnosti zaznamenÃĄvania" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "Program pouŞívanÃŊ na porovnÃĄvanie sÃēborov" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "URL HistÃŗria" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "PrehÄžadÃĄvaÅĨ..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "VymazaÅĨ vaÅĄe overovacie informÃĄcie" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "PovoliÅĨ emblÊmy" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "PovoliÅĨ atribÃēty sÃēborov" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "PovoliÅĨ kontrolu rekurzívneho stavu" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "ExternÊ programy" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "VÅĄeobecnÊ" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "Jazyk:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "PrihlÃĄsenie" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "Počet adries URL k zapamätaniu" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "Počet sprÃĄv k zapamätaniu" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "UloÅženÊ Ãēdaje" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "Typ" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "SÃēbory na zamknutie" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "OpÃ­ÅĄte prosím, prečo tieto sÃēbory zamykÃĄte" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "ZamknÃēÅĨ sÃēbory" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "VybraÅĨ / ZruÅĄiÅĨ vÅĄetko" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "PrevziaÅĨ zÃĄmky" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "Z Revízie" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "Do Revízie" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "KomentovaÅĨ" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "OdovzdaÅĨ do:" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "ZobraziÅĨ neverziovanÊ sÃēbory" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Oznamovacie SprÃĄvy" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "ZmeniÅĨ repozitÃĄr vaÅĄej pracovnej kÃŗpie" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "Z..." #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "Do:" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "VoÄžby" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "Revízia" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "Rekurzívny" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "Import sprÃĄvy" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "RepozitÃĄre" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "ZahrnÃēÅĨ ignorovanÊ sÃēbory" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "z URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "Od: (URL a revíziu zlÃēčiÅĨ)" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "Rozsah revízie" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "Do: (URL a revíziu zlÃēčiÅĨ)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "URL zlÃēčiÅĨ od" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "PracovnÃĄ kopia" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "Vyberte tÃēto moÅžnosÅĨ, ak ste urobili nejakÊ zmeny vo vetvÃĄch a chcete zlÃēčiÅĨ " "vaÅĄe zmeny s inou vetvou." #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "Vyberte tÃēto moÅžnosÅĨ, ak chcete zlÃēčiÅĨ dve rôzne vetvy do vaÅĄej pracovnej " "kÃŗpie." #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "IgnorovaÅĨ rod" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "ZlÃēčiÅĨ pomocníka" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "ZlÃēčiÅĨ niekoÄžko revízií" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "ZlÃēčenie dvoch rôznych stromov" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "Iba zÃĄznam zlÃēčenia" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "UkÃĄzaÅĨ zÃĄznam" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "Test zlÃēčenia" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" #~ msgid "Completed" #~ msgstr "UkončenÊ" #~ msgid "(no author)" #~ msgstr "(bez autora)" #~ msgid "Switch Details" #~ msgstr "PrepnÃēÅĨ detaily" #~ msgid "Create copy from" #~ msgstr "VytvoriÅĨ kÃŗpiu z" #~ msgid "Show new version on the right side" #~ msgstr "ZobraziÅĨ novÃē verziu na pravej strane" #~ msgid "Destination:" #~ msgstr "DestinÃĄcia:" #~ msgid "Deleted" #~ msgstr "OdstrÃĄnenÊ" #~ msgid "Copied" #~ msgstr "SkopírovanÊ" #~ msgid "Added" #~ msgstr "PridanÊ" #~ msgid "Restored" #~ msgstr "ObnovenÊ" #~ msgid "Reverted" #~ msgstr "VrÃĄtenie" #~ msgid "Failed Revert" #~ msgstr "ChybnÊ vrÃĄtennie" #~ msgid "Resolved" #~ msgstr "VyrieÅĄenÊ" #~ msgid "External" #~ msgstr "VonkajÅĄie" #~ msgid "Failed Unlock" #~ msgstr "Zlyhalo odomknutie" #~ msgid "Failed Lock" #~ msgstr "Zlyhalo zamknutie" #~ msgid "Updated" #~ msgstr "AktualizovanÊ" #~ msgid "Modified" #~ msgstr "ModifikovanÊ" #~ msgid "Replaced" #~ msgstr "NahradenÊ" #~ msgid "Changed" #~ msgstr "ZmenenÊ" #~ msgid "Skipped" #~ msgstr "PreskočenÊ" #~ msgid "Annotated" #~ msgstr "PoznamenanÊ" #~ msgid "Unlocked" #~ msgstr "OdomknutÊ" #~ msgid "Conflicted" #~ msgstr "V rozpore" #~ msgid "Inapplicable" #~ msgstr "NepouÅžitelnÊ" #~ msgid "Missing" #~ msgstr "StratenÊ" #~ msgid "Merged" #~ msgstr "ZlÃēčenÊ" #~ msgid "Obstructed" #~ msgstr "UpchanÊ" #~ msgid "Unchanged" #~ msgstr "NezmenenÊ" #~ msgid "Program used to browse repositories" #~ msgstr "Program pouŞívanÃŊ na prezeranie repozitÃĄra" rabbitvcs-0.19/po/sl.po000066400000000000000000001126611445560650400150360ustar00rootroot00000000000000# Slovenian translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-02-09 10:19+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || " "n%100==4 ? 3 : 0);\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "" msgstr[1] "" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "" msgstr[1] "" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "" msgstr[1] "" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "" msgstr[1] "" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "" msgstr[1] "" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "" msgstr[1] "" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "Posodobi" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "Potrdi" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Dodaj" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "Dodaj na seznam 'ignore'" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "" #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "" #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "IzbriÅĄi" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "Povrni" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "RazreÅĄi" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "Obnovi" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "" #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "" #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Počisti" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "Uvozi" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "" #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "" #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "" #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "" #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "" #: util/contextmenuitems.py:545 msgid "Help" msgstr "" #: util/contextmenuitems.py:546 msgid "View help" msgstr "" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "" #: util/contextmenuitems.py:563 msgid "Open" msgstr "" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "Brskaj" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "Posodabljanje ..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "Posdabljanje končano" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "PoveÅži in pridobi iz repozitorija" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "Povezovanje z repozitorijem in pridobivanje zaključeno" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "Pot" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "Končnica" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Nalaganje ..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "Najdeno %d element(ov)" #: ui/add.py:157 msgid "Running Add Command..." msgstr "Zaganjam dodajanje..." #: ui/add.py:159 msgid "Completed Add" msgstr "Končano dodajanje." #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "Izvozi - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "" #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Izvozi" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "" #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "Izvoz zaključen" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "" #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "Sporočilo" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "Uvozi - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "" #: ui/import.py:81 msgid "Running Import Command..." msgstr "" #: ui/import.py:89 msgid "Completed Import" msgstr "Uvoz zaključen" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "" #: ui/rename.py:60 msgid "The new name field is required" msgstr "" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "" #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "Stanje besedila" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "Stanje lastnosti" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "Zaganjam Potrdi" #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "Končano potrjevanje" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "" #: ui/merge.py:91 msgid "Completed Merge" msgstr "" #: ui/merge.py:102 msgid "Merge" msgstr "Spoji" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Izberi mapo" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "v" #: ui/dialog.py:261 msgid "Select a File" msgstr "Izberite datoteko" #: ui/dialog.py:280 msgid "Save As..." msgstr "" #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "RazreÅĄitev zaključena" #: ui/changes.py:49 msgid "More Actions..." msgstr "" #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "" #: ui/changes.py:279 msgid "Property Change" msgstr "" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Da" #: ui/changes.py:321 msgid "No" msgstr "" #: ui/changes.py:410 msgid "Open from first revision" msgstr "" #: ui/changes.py:415 msgid "Open from second revision" msgstr "" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Besedilo" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "Dnevnik - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "Ni na voljo" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "Dejanje" #: ui/log.py:338 msgid "Copy From Path" msgstr "" #: ui/log.py:338 msgid "Copy From Revision" msgstr "Kopiraj iz revizije" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "" #: ui/log.py:791 msgid "View diff between revisions" msgstr "" #: ui/log.py:796 msgid "Compare with working copy" msgstr "" #: ui/log.py:806 msgid "Compare revisions" msgstr "" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "" #: ui/log.py:837 msgid "Edit log message..." msgstr "" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1047 msgid "Edit author" msgstr "" #: ui/log.py:1059 msgid "Edit log message" msgstr "" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "Izberi program" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "Ali ste prepričani, da Åželite izbrisati poti repozitorijev?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "Poti repozitorijev izbrisane." #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "Ali ste prepričani, da Åželite izbrisati prejÅĄnja sporočila?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "PrejÅĄnja sporočila izbrisana" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "Določiti morate ciljno pot." #: ui/branch.py:115 msgid "Branch/tag" msgstr "Vejitev/oznaka" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "" #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "" #: ui/lock.py:73 msgid "Locked" msgstr "Zaklenjeno" #: ui/lock.py:167 msgid "Get Lock" msgstr "Prevzami zaklepanje" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "" #: ui/lock.py:177 msgid "Completed Lock" msgstr "Zaklepanje zaključeno" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "" #: ui/switch.py:80 msgid "Switch" msgstr "Preklopi" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "" #: ui/switch.py:89 msgid "Completed Switch" msgstr "" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "HEAD" #: ui/widget.py:860 msgid "Number" msgstr "" #: ui/widget.py:861 msgid "Working Copy" msgstr "" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "PoveÅži in pridobi iz repozitorija - %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "Povezovanje z repozitorijem in pridobivanje..." #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "Naziv" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "Izdelaj obliÅž (patch)" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "Vrednost" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:112 msgid "Reserved" msgstr "" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "Vrsta MIME" #: ui/action.py:338 msgid "Finished" msgstr "Zaključeno" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - Zaključeno" #: ui/action.py:365 msgid "Log Message" msgstr "" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "Odkleni" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "" #: ui/browser.py:89 msgid "Size" msgstr "" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "" #: ui/browser.py:353 msgid "Copy to..." msgstr "" #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "" #: ui/browser.py:363 msgid "Move to..." msgstr "" #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "ČiÅĄÄenje..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "ČiÅĄÄenje zaključeno" #: ui/create.py:46 msgid "Repository successfully created" msgstr "Repozitorij je izdelan" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "" #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "" #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "" #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "" #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "" #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "Od:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "Za:" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "PokaÅži dnevnik" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" rabbitvcs-0.19/po/sr.po000066400000000000000000001111271445560650400150400ustar00rootroot00000000000000# Serbian translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-06-24 21:05+0000\n" "Last-Translator: Đ˜ĐŗĐžŅ€ МиĐģОваĐŊĐžĐ˛Đ¸Ņ› \n" "Language-Team: Serbian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "" msgstr[1] "" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "" msgstr[1] "" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "" msgstr[1] "" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "" msgstr[1] "" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "" msgstr[1] "" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "" msgstr[1] "" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Đ”ĐžĐ´Đ°Ņ˜" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "" #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "" #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "" #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "" #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "" #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "" #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "" #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "" #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "" #: util/contextmenuitems.py:545 msgid "Help" msgstr "" #: util/contextmenuitems.py:546 msgid "View help" msgstr "" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "" #: util/contextmenuitems.py:563 msgid "Open" msgstr "" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "" #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "ĐŸŅƒŅ‚Đ°ŅšĐ°" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "ĐŸŅ€ĐžŅˆĐ¸Ņ€ĐĩҚĐĩ" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "ĐŖŅ‡Đ¸Ņ‚Đ°Đ˛Đ°Đŧ..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "" #: ui/add.py:157 msgid "Running Add Command..." msgstr "" #: ui/add.py:159 msgid "Completed Add" msgstr "" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "" #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "" #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "ĐŸŅ€Đ¸ĐŧĐĩĐŊи СаĐēŅ€Đŋ҃" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "" #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "Đ”Đ°Ņ‚ŅƒĐŧ" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "" #: ui/import.py:81 msgid "Running Import Command..." msgstr "" #: ui/import.py:89 msgid "Completed Import" msgstr "" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "" #: ui/rename.py:60 msgid "The new name field is required" msgstr "" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "" #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "" #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "" #: ui/merge.py:91 msgid "Completed Merge" msgstr "" #: ui/merge.py:102 msgid "Merge" msgstr "" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "" #: ui/dialog.py:261 msgid "Select a File" msgstr "" #: ui/dialog.py:280 msgid "Save As..." msgstr "" #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "Đ ĐĩĐ˛Đ¸ĐˇĐ¸Ņ˜Đ°" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "ĐŅƒŅ‚ĐžŅ€" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "" #: ui/changes.py:49 msgid "More Actions..." msgstr "" #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "" #: ui/changes.py:279 msgid "Property Change" msgstr "" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "" #: ui/changes.py:321 msgid "No" msgstr "" #: ui/changes.py:410 msgid "Open from first revision" msgstr "" #: ui/changes.py:415 msgid "Open from second revision" msgstr "" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Đ ĐĩĐ´" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "ĐĸĐĩĐēҁ҂" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "АĐēŅ†Đ¸Ņ˜Đ°" #: ui/log.py:338 msgid "Copy From Path" msgstr "" #: ui/log.py:338 msgid "Copy From Revision" msgstr "" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "" #: ui/log.py:791 msgid "View diff between revisions" msgstr "" #: ui/log.py:796 msgid "Compare with working copy" msgstr "" #: ui/log.py:806 msgid "Compare revisions" msgstr "" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "" #: ui/log.py:837 msgid "Edit log message..." msgstr "" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1047 msgid "Edit author" msgstr "" #: ui/log.py:1059 msgid "Edit log message" msgstr "" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "" #: ui/branch.py:115 msgid "Branch/tag" msgstr "" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "" #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "" #: ui/lock.py:73 msgid "Locked" msgstr "" #: ui/lock.py:167 msgid "Get Lock" msgstr "" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "" #: ui/lock.py:177 msgid "Completed Lock" msgstr "" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "" #: ui/switch.py:80 msgid "Switch" msgstr "" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "" #: ui/switch.py:89 msgid "Completed Switch" msgstr "" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "" #: ui/widget.py:860 msgid "Number" msgstr "" #: ui/widget.py:861 msgid "Working Copy" msgstr "" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "" #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:112 msgid "Reserved" msgstr "" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "MIME Ņ‚Đ¸Đŋ" #: ui/action.py:338 msgid "Finished" msgstr "Đ—Đ°Đ˛Ņ€ŅˆĐĩĐŊ" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "" #: ui/action.py:365 msgid "Log Message" msgstr "Đ›ĐžĐŗ ĐŋĐžŅ€ŅƒĐēа" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "" #: ui/browser.py:89 msgid "Size" msgstr "ВĐĩĐģĐ¸Ņ‡Đ¸ĐŊа" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "" #: ui/browser.py:353 msgid "Copy to..." msgstr "" #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "" #: ui/browser.py:363 msgid "Move to..." msgstr "" #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "" #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "" #: ui/create.py:46 msgid "Repository successfully created" msgstr "" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "" #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "" #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "" #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "" #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "" #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" rabbitvcs-0.19/po/sv.po000066400000000000000000001313031445560650400150420ustar00rootroot00000000000000# Swedish translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-04-13 19:52+0000\n" "Last-Translator: Andreas Dahlberg \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i sekund" msgstr[1] "%i sekunder" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i minut" msgstr[1] "%i minuter" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i timme" msgstr[1] "%i timmar" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i dag" msgstr[1] "%i dagar" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i vecka" msgstr[1] "%i veckor" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i mÃĨnad" msgstr[1] "%i mÃĨnader" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i ÃĨr" msgstr[1] "%i ÃĨr" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "FelsÃļk" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "Buggar" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "Öppna Skal" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "Uppdatera Status" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "Debug ÃĨterställ" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "Återställer allt den ser" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "OgiltigfÃļrklara" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "Tvinga fram ett invalidate_extension_info() anrop" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "Lägg till emblem" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "Lägg till ett emblem" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "Hämta en arbetskopia" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "Uppdatera" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "Uppdatera en arbetskopia" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "Skicka" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "Skicka ändringar till arkivet" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "Skillnadsmeny..." #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "Se skillanden mot grunden" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "Visa ändringar som gjorts i en fil" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "Se skillnaden mellan filer/mappar" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "Se skillnaden mellan tvÃĨ filer" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "Visa skillnaden mot tidigare revision" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "Se filändringar sedan senaste ändring" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "JämfÃļr med grunden" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "JämfÃļr filer/mappar" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "JämfÃļr skillnaden mellan tvÃĨ objekt" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "JämfÃļr med fÃļregÃĨende revision" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "Visa ändringar..." #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "Visa Logg" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "Visa en fils logginformation" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "Lägg till" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "Lägg till ignoreringslista" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "Uppdatera till revision..." #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "Uppdatera till angiven version" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "Byt namn..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "Schemalägg ett objekt som ska byta namn i arkivet" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "Ta bort" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "Schemalägg ett objekt som ska tas bort frÃĨn arkivet" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "Återställ" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "Återställ ett objekt till dess omodifierade form" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "LÃļs" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "Markera ett tvistande objektet som lÃļst" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "Återställ" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "Återställ ett saknat objekt" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "Flytta..." #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "Flytta din arbetskopia" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "Hämta LÃĨs..." #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "LÃĨs objekt lokalt" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "Släpp lÃĨs..." #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "Släpp lÃĨs pÃĨ ett objekt" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "Rensa" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "Rensa upp arbetskopia" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "Exportera..." #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "Exportera en fungerande kopia eller arkiv utan versionsinformation" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "Skapa arkiv här" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "Skapa ett arkiv i en mapp" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "Importera" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "Importera ett objekt till ett arkiv" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "Gren/tagg..." #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "Kopiera et objekt till en annan plats i arkivet" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "Växla..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "Ändra arkivets plats fÃļr en arbets kopia" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "Sammanfoga..." #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "En guide med ÃĨtgärder fÃļr sammanfogning" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "Kommentera..." #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "Kommentera en fil" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "Egenskaper" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "Visa egenskaperna fÃļr ett objekt" #: util/contextmenuitems.py:545 msgid "Help" msgstr "Hjälp" #: util/contextmenuitems.py:546 msgid "View help" msgstr "Visa Hjälp" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "Inställningar" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "Visa eller ändra RabbitVCS inställningar" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "Om" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "Om RabbitVCS" #: util/contextmenuitems.py:563 msgid "Open" msgstr "Öppna" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "Bläddra till" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "Uppdaterar..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "Uppdatering färdig" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "Uppdatera till revision" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "Hämta" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "Färdig Hämta" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "SÃļkväg" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "Tillägg" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "Laddar..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "Hittade %d objekt" #: ui/add.py:157 msgid "Running Add Command..." msgstr "KÃļr Lägg till..." #: ui/add.py:159 msgid "Completed Add" msgstr "Färdig Lägga till" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "Revision:" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "Exportera - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "Arkivets URL och destination sÃļkvägen är obligatoriska fält." #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "Exportera" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "KÃļr Exportera..." #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "Färdig Exportera" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "" #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "Datum" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "Meddelande" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "Importera - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "Arkivets URL fält krävs." #: ui/import.py:81 msgid "Running Import Command..." msgstr "KÃļr Importera..." #: ui/import.py:89 msgid "Completed Import" msgstr "Färdig Importera" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "Byt namn" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "Nytt namn:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "Det nya namnet är ett obligatoriskt fält" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "KÃļr Byt namn..." #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "Namnbyte genomfÃļrt" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "Textstatus" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "Egenskap status" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "KÃļr Skicka..." #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "Färdig Skicka" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "Status" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "KÃļr Sammanfogningstest..." #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "Färdig Sammanfogningstest" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "KÃļr Sammanfoga..." #: ui/merge.py:91 msgid "Completed Merge" msgstr "Färdig Sammanfoga" #: ui/merge.py:102 msgid "Merge" msgstr "Sammanfoga" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "Välj en mapp" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "till" #: ui/dialog.py:261 msgid "Select a File" msgstr "Välj en fil" #: ui/dialog.py:280 msgid "Save As..." msgstr "Spara som..." #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "Är du säker pÃĨ att du vill fortsätta?" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "de markerade objekten" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "KÃļr Återställ..." #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "Färdig Återställ" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "BÃĨde frÃĨn och till url-fälten krävs." #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "Omlokalisera" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "KÃļr omlokalisering..." #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "Omlokalisering färdig" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "Revision" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "FÃļrfattare" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "JämfÃļr sida vid sida" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "KÃļr LÃļs..." #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "Färdig LÃļs" #: ui/changes.py:49 msgid "More Actions..." msgstr "Mer ÃĨtgärder..." #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "" #: ui/changes.py:279 msgid "Property Change" msgstr "Egenskapsändring" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "Ja" #: ui/changes.py:321 msgid "No" msgstr "Nej" #: ui/changes.py:410 msgid "Open from first revision" msgstr "" #: ui/changes.py:415 msgid "Open from second revision" msgstr "" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "Det gÃĨr inte att kommentera en katalog" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "Kommentar - %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "Rad" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "Text" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "FrÃĨn version fältet mÃĨste vara ett heltal" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "Logg - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "Ej tillgänglig" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "Åtgärd" #: ui/log.py:338 msgid "Copy From Path" msgstr "Kopiera frÃĨn sÃļkväg" #: ui/log.py:338 msgid "Copy From Revision" msgstr "Kopiera frÃĨn version" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "Visa skillnaden mot arbetskopian" #: ui/log.py:791 msgid "View diff between revisions" msgstr "Se skillnaden mellan revisioner" #: ui/log.py:796 msgid "Compare with working copy" msgstr "JämfÃļr med arbetskopia" #: ui/log.py:806 msgid "Compare revisions" msgstr "JämfÃļr revisioner" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "Visa ändringar mellan revisioner" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "Ändra skapare..." #: ui/log.py:837 msgid "Edit log message..." msgstr "Redigera loggmeddelande..." #: ui/log.py:841 msgid "Edit revision properties..." msgstr "Redigera revisionsinställningar..." #: ui/log.py:1047 msgid "Edit author" msgstr "Ändra skapare" #: ui/log.py:1059 msgid "Edit log message" msgstr "Redigera loggmeddelande" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "Okänd" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "Engelska" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "Välj ett program" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "Är du säker pÃĨ att du vill rensa dina arkivs sÃļkvägar?" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "Arkivets sÃļkvägar rensade" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "Är du säker pÃĨ att du vill rensa dina tidigare meddelanden?" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "Tidigare meddelanden rensade" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "Är du säker pÃĨ att du vill rensa din autentiseringsinformation?" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "Autentiseringsinformation rensad" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "Du mÃĨste ange en destinationssÃļkväg." #: ui/branch.py:115 msgid "Branch/tag" msgstr "Gren/tagg" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "KÃļr Gren/tagg kommando..." #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "Färdig Gren/tagg..." #: ui/lock.py:73 msgid "Locked" msgstr "LÃĨst" #: ui/lock.py:167 msgid "Get Lock" msgstr "Hämta lÃĨs" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "KÃļr Hämta lÃĨs..." #: ui/lock.py:177 msgid "Completed Lock" msgstr "Färdig Hämta lÃĨs" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "Arkivets plats är ett obligatoriskt fält." #: ui/switch.py:80 msgid "Switch" msgstr "Växla" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "KÃļr Växla..." #: ui/switch.py:89 msgid "Completed Switch" msgstr "Färdig Växla" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "HEAD" #: ui/widget.py:860 msgid "Number" msgstr "Nummer" #: ui/widget.py:861 msgid "Working Copy" msgstr "Arbetskopia" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "Värd:" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "Hämta - %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "KÃļr Hämta..." #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "Namn" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "Den angivna sÃļkvägen är inte en arbetskopia" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "Egenskaper - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "Värde" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "Ett problem uppstod när dina inställningar skulle sparas." #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "Filen är inte versionskontrollerad" #: ui/property_editor.py:112 msgid "Reserved" msgstr "Reserverad" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "Mime-typ" #: ui/action.py:338 msgid "Finished" msgstr "Färdig" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - Färdigt" #: ui/action.py:365 msgid "Log Message" msgstr "Loggmeddelande" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "LÃĨs upp" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "KÃļr LÃĨs upp..." #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "Färdig LÃĨs upp" #: ui/browser.py:89 msgid "Size" msgstr "Storlek" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "Skapa mapp..." #: ui/browser.py:353 msgid "Copy to..." msgstr "Kopiera till..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "Kopiera URL till urklipp" #: ui/browser.py:363 msgid "Move to..." msgstr "Flytta till..." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "Ny plats:" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "Rensar upp..." #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "Rensning färdig" #: ui/create.py:46 msgid "Repository successfully created" msgstr "Arkivet skapades" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" "Det blev fel när arkivet skulle skapas. Kontrollera att den angivna mappen " "är tom." #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "Egenskaper fÃļr:" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "" #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "Radera inställningar rekursivt" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "Redigera..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "Ny..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "URL/SÃļkväg:" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "Ladda/Uppdatera" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "Lägg till Meddelande" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "Certifikatdetaljer" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "Redigera egenskapsdetaljer" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "Mappnamn" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "Meddelande" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "Lägg till autentiseringsdetaljer" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "FÃļregÃĨende Meddelanden" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" "Är du säker pÃĨ att du vill ta bort %item%?" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "Acceptera fÃļr alltid" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "Acceptera en gÃĨng" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "Verkställ inställningar rekursivt" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "Autentisering" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "Kontrollera certifikat" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "Bekräftelse" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "Skapa mapp..." #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "Radera Bekräftelse" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "Neka" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "Fingeravtryck:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "Utgivare:" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "Användarnamn:" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "LÃļsenord:" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "SÃļkväg:" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "FÃļregÃĨende meddelande" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "Egenskap" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "Egenskap:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "RabbitVCS Fel" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "Rike:" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "Spara autentisering" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "Dessa objekt kommer att skickas till papperskorgen." #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "Giltig:" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "Värde:" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "Länkar" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "Versionsinformation" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "Upphovsmän:" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "Tack:" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "PÃĨverkade filer (dubbelklicka fÃļr att jämfÃļra med grunden)" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "Revisionstabell" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "Gräns:" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "Logg" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "Uppdatera" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "Visar revisioner:" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "Stopp vid kopia" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "Rensning begärd ....\n" "\n" "BÃļrja rensa i arbets kopian?" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "Autentisering" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "Loggmeddelanden" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "Logg alternativ" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "Program som används fÃļr att jämfÃļra filer" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "URL Historik" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "Bläddra..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "Rensa autentiseringsinformation" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "Aktivera emblem" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "Aktivera filattribut" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "Aktivera rekursiva statuskontroller" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "Externa program" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "Allmänt" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "SprÃĨk:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "Loggning" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "Lägsta nivÃĨ att logga" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "Antal URLer att minnas" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "Antal meddelande att minnas" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "Sparad data" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "Visa RabbitsVCS felsÃļkningsverktyg" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "Typ:" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "Filer att lÃĨsa" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "Beskriv varfÃļr du lÃĨser dessa filer" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "LÃĨs filer" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "Markera / Avmarkera alla" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "Stjäl lÃĨsen" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "FrÃĨn revision" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "Till revision" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "Kommentar" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "Ändrade filer" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "Skicka till:" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "Visa oversionerade filer" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "Notifieringsmeddelanden" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "Arbetskopia:" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "Egenskapseditor" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "Ändra arkiv till din arbetskopia" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "FrÃĨn:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "Till:" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "Alternativ" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "Revision" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "Uteslut externa" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "Rekursiv" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "Importera meddelande" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "Arkiv" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "Inkludera ignorerade filer" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "FrÃĨn URL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "FrÃĨn: (URL och revision sammanfogning)" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "Revisionsspan" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "Till: (URL och revision att sammanfoga)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "URL att sammanfoga frÃĨn" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "Arbetskopia" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" "Välj denna metod om du har gjort ändringar i en gren och vill sammanfoga " "dina ändringar med en annan gren." #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" "Välj den här metoden om du vill sammanfoga tvÃĨ olika grenar i din " "arbetskopia." #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "Ignorera anor" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "Sammanfogningsassistent" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "Sammanfoga ett span av revisioner" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "Sammanfoga tvÃĨ olika träd" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "Registrera endast sammanfogningen" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "Visa logg" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "Test sammanfoga" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" "Använd logg dialogrutan fÃļr att välja de revisioner som du vill sammanfoga. " "Eller skriv ut revisionerna manuellt, separerade med ett kommatecken. Du kan " "ange ett revisionsspan med ett bindestreck.\n" "\n" "Exempel: 4-7,9,11,15-HEAD\n" "\n" "FÃļr att sammanfoga alla revisioner, lämna rutan tom." #~ msgid "(no author)" #~ msgstr "(ingen fÃļrfattare)" #~ msgid "Create copy from" #~ msgstr "Skapa kopia frÃĨn" #~ msgid "Completed" #~ msgstr "Färdig" #~ msgid "Switch Details" #~ msgstr "Växlings detaljer" #~ msgid "Program used to browse repositories" #~ msgstr "Program som används fÃļr att bläddra i arkiv" #~ msgid "Show new version on the right side" #~ msgstr "Visa nya versionen pÃĨ hÃļger sida" #~ msgid "Added" #~ msgstr "Tillagd" #~ msgid "Copied" #~ msgstr "Kopierad" #~ msgid "Deleted" #~ msgstr "Borttagen" #~ msgid "Restored" #~ msgstr "Återställd" #~ msgid "Resolved" #~ msgstr "LÃļst" #~ msgid "External" #~ msgstr "Extern" #~ msgid "Modified" #~ msgstr "Modifierad" #~ msgid "Replaced" #~ msgstr "Ersatt" #~ msgid "Changed" #~ msgstr "Ändrad" #~ msgid "Annotated" #~ msgstr "Kommenterad" #~ msgid "Unlocked" #~ msgstr "UpplÃĨst" #~ msgid "Failed Lock" #~ msgstr "Misslyckades lÃĨsa" #~ msgid "Failed Unlock" #~ msgstr "Misslyckades lÃĨsa upp" #~ msgid "Inapplicable" #~ msgstr "Oapplicerbart" #~ msgid "Unchanged" #~ msgstr "OfÃļrändrad" #~ msgid "Missing" #~ msgstr "Saknas" #~ msgid "Obstructed" #~ msgstr "Blockerad" #~ msgid "Merged" #~ msgstr "Sammanfogad" #~ msgid "Conflicted" #~ msgstr "Tvistande" #~ msgid "Update Depth" #~ msgstr "Uppdateringsdjup" #~ msgid "Destination:" #~ msgstr "MÃĨl:" #~ msgid "Reverted" #~ msgstr "Backad" #~ msgid "Failed Revert" #~ msgstr "Misslyckad backning" #~ msgid "Skipped" #~ msgstr "Överhoppad" #~ msgid "Updated" #~ msgstr "Uppdaterad" rabbitvcs-0.19/po/th.po000066400000000000000000001104351445560650400150300ustar00rootroot00000000000000# Thai translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-02-09 10:19+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Thai \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "" msgstr[1] "" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "" msgstr[1] "" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "" msgstr[1] "" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "" msgstr[1] "" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "" msgstr[1] "" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "" msgstr[1] "" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "" #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "" #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "" #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "" #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "" #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "" #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "" #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "" #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "" #: util/contextmenuitems.py:545 msgid "Help" msgstr "" #: util/contextmenuitems.py:546 msgid "View help" msgstr "" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "" #: util/contextmenuitems.py:563 msgid "Open" msgstr "" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "" #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "" #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "" #: ui/add.py:157 msgid "Running Add Command..." msgstr "" #: ui/add.py:159 msgid "Completed Add" msgstr "" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "" #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "" #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "" #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "" #: ui/import.py:81 msgid "Running Import Command..." msgstr "" #: ui/import.py:89 msgid "Completed Import" msgstr "" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "" #: ui/rename.py:60 msgid "The new name field is required" msgstr "" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "" #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "" #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "" #: ui/merge.py:91 msgid "Completed Merge" msgstr "" #: ui/merge.py:102 msgid "Merge" msgstr "" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "" #: ui/dialog.py:261 msgid "Select a File" msgstr "" #: ui/dialog.py:280 msgid "Save As..." msgstr "" #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "" #: ui/changes.py:49 msgid "More Actions..." msgstr "" #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "" #: ui/changes.py:279 msgid "Property Change" msgstr "" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "" #: ui/changes.py:321 msgid "No" msgstr "" #: ui/changes.py:410 msgid "Open from first revision" msgstr "" #: ui/changes.py:415 msgid "Open from second revision" msgstr "" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "" #: ui/log.py:338 msgid "Copy From Path" msgstr "" #: ui/log.py:338 msgid "Copy From Revision" msgstr "" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "" #: ui/log.py:791 msgid "View diff between revisions" msgstr "" #: ui/log.py:796 msgid "Compare with working copy" msgstr "" #: ui/log.py:806 msgid "Compare revisions" msgstr "" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "" #: ui/log.py:837 msgid "Edit log message..." msgstr "" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1047 msgid "Edit author" msgstr "" #: ui/log.py:1059 msgid "Edit log message" msgstr "" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "" #: ui/branch.py:115 msgid "Branch/tag" msgstr "" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "" #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "" #: ui/lock.py:73 msgid "Locked" msgstr "" #: ui/lock.py:167 msgid "Get Lock" msgstr "" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "" #: ui/lock.py:177 msgid "Completed Lock" msgstr "" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "" #: ui/switch.py:80 msgid "Switch" msgstr "" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "" #: ui/switch.py:89 msgid "Completed Switch" msgstr "" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "" #: ui/widget.py:860 msgid "Number" msgstr "" #: ui/widget.py:861 msgid "Working Copy" msgstr "" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "" #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:112 msgid "Reserved" msgstr "" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "" #: ui/action.py:338 msgid "Finished" msgstr "" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "" #: ui/action.py:365 msgid "Log Message" msgstr "" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "" #: ui/browser.py:89 msgid "Size" msgstr "" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "" #: ui/browser.py:353 msgid "Copy to..." msgstr "" #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "" #: ui/browser.py:363 msgid "Move to..." msgstr "" #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "" #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "" #: ui/create.py:46 msgid "Repository successfully created" msgstr "" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "" #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "" #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "" #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "" #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "" #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" rabbitvcs-0.19/po/zh_CN.po000066400000000000000000001273711445560650400154250ustar00rootroot00000000000000# Chinese (Simplified) translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-08-14 14:07+0000\n" "Last-Translator: Jiehan Zheng \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i į§’" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i 分钟" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i 小æ—ļ" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "%i 夊" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "%i 周" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "%i 月" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "%i åš´" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "č°ƒč¯•" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "Bugs" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "打åŧ€ Shell" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "åˆˇæ–°įŠļ态" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "č°ƒč¯•čŋ˜åŽŸ" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "čŋ˜åŽŸįœ‹åˆ°įš„æ¯ä¸Ē文äģļ" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "äŊŋ无效" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "åŧēčĄŒč°ƒį”¨ invalidate_extension_info()" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "æˇģ加åžŊįĢ " #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "æˇģ加一ä¸ĒåžŊįĢ " #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "æŖ€å‡ē(Checkout)..." #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "æŖ€å‡ēåˇĨäŊœį‰ˆæœŦ" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "更新" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "更新åˇĨäŊœį‰ˆæœŦ" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "提äē¤" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "提äē¤äŋŽæ”šč‡ŗæēį åē“" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "RabbitVCS" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "į‰ˆæœŦå瓿ĩč§ˆå™¨" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "æĩč§ˆæēį å瓿ēį æ ‘" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "æŖ€æŸĨäŋŽæ”š..." #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "æŖ€æŸĨ臺æēį åē“įš„äŋŽæ”š" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "æ¯”čžƒčœå•..." #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "æ¯”čžƒé€‰éĄšåˆ—čĄ¨" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "æŸĨįœ‹į›¸å¯šäēŽ Base įš„åˇŽåŧ‚" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "æŸĨįœ‹å¯šæ–‡äģļįš„äŋŽæ”š" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "æŸĨįœ‹æ–‡äģļ/文äģļå¤šäš‹é—´įš„åˇŽåŧ‚" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "æŸĨįœ‹ä¸¤ä¸Ē文äģļäš‹é—´įš„åˇŽåŧ‚" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "æŸĨįœ‹į›¸å¯šäēŽå‰ä¸€ä¸Ēį‰ˆæœŦįš„åˇŽåŧ‚" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "æŸĨįœ‹č‡ĒäģŽä¸Šä¸€æŦĄäŋŽæ”šåŽå¯šæ–‡äģļįš„æ”šåŠ¨" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "与 Base čŋ›čĄŒæ¯”čžƒ" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "äŊŋᔍåšļæŽ’æ¯”čžƒåˇĨå…ˇä¸Ž Base čŋ›čĄŒæ¯”čžƒ" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "æ¯”čžƒæ–‡äģļ/文äģļ多" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "æ¯”čžƒä¸¤ä¸ĒéĄšį›Žé—´įš„åˇŽåŧ‚" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "与前一ä¸Ēį‰ˆæœŦčŋ›čĄŒæ¯”čžƒ" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "äŊŋᔍåšļæŽ’æ¯”čžƒåˇĨå…ˇä¸Žå‰ä¸€ä¸Ēį‰ˆæœŦčŋ›čĄŒæ¯”čžƒ" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "昞į¤ēäŋŽæ”š..." #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "昞į¤ēčˇ¯åž„ä¸Žį‰ˆæœŦé—´įš„æ”šåŠ¨" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "昞į¤ēæ—Ĩåŋ—" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "昞į¤ē文äģļæ—Ĩåŋ—äŋĄæ¯" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "æˇģ加" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "čŽĄåˆ’čρæˇģåŠ č‡ŗäģ“åē“įš„éĄš" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "æˇģåŠ č‡ŗåŋŊį•Ĩåˆ—čĄ¨" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "æ›´æ–°åˆ°į‰ˆæœŦ..." #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "更新文äģļč‡ŗæŒ‡åŽšį‰ˆæœŦ" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "重å‘Ŋ名..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "čŽĄåˆ’ä¸€ä¸ĒéĄšį›Žåœ¨æēį åē“čĸĢ重å‘Ŋ名" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "删除" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "čŽĄåˆ’ä¸€ä¸ĒéĄšį›Žåœ¨æēį åē“čĸĢ删除" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "æĸ复" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "čŋ˜åŽŸéĄšį›Žåˆ°å…ļæœĒäŋŽæ”šįš„įŠļ态" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "觪冺" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "æ ‡čŽ°å†˛įĒæĄį›Žä¸ē厞觪冺" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "æĸ复" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "æĸ复ä¸ĸå¤ąéĄšį›Ž" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "重厚äŊ..." #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "重厚äŊæ‚¨įš„åˇĨäŊœå‰¯æœŦ" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "čŽˇåž—é”..." #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "æœŦåœ°é”åŽšéĄšį›Ž" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "释攞锁..." #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "é‡Šæ”žéĄšį›Žįš„é”" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "æ¸…į†" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "æ¸…į†åˇĨäŊœå‰¯æœŦ" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "å¯ŧå‡ē..." #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "å¯ŧå‡ēåˇĨäŊœå‰¯æœŦ或æēį åē“īŧŒč€Œä¸åŒ…åĢäģģäŊ•į‰ˆæœŦäŋĄæ¯" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "在čŋ™é‡Œåˆ›åģēæēį åē“" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "在文äģļ多中创åģē一ä¸Ēæēį åē“" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "å¯ŧå…Ĩ" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "å¯ŧå…Ĩ一ä¸ĒéĄšį›Žč‡ŗæēį åē“" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "分支/æ ‡į­ž..." #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "复åˆļ一ä¸ĒéĄšį›Žåˆ°æēį åē“中å…ļ厃äŊįŊŽ" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "切æĸ..." #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "攚变åˇĨäŊœå‰¯æœŦæēį åē“įš„äŊįŊŽ" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "合åšļ..." #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "一ä¸Ēį”ąå‡ ä¸Ēæ­ĨéǤį섿ˆįš„合åšļ向å¯ŧ" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "æ‰šæŗ¨..." #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "æ‰šæŗ¨ä¸€ä¸Ē文äģļ" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "į”ŸæˆčĄĨ丁..." #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "å¯šæ‚¨æ‰€æœ‰įš„äŋŽæ”šåˆ›åģē一ä¸Ē unified diff 文äģļ" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "åē”ᔍčĄĨ丁..." #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "åē”ᔍ unified diff 臺åˇĨäŊœå‰¯æœŦ" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "åąžæ€§" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "æŸĨįœ‹ä¸€ä¸ĒéĄšį›Žįš„åąžæ€§" #: util/contextmenuitems.py:545 msgid "Help" msgstr "帎劊" #: util/contextmenuitems.py:546 msgid "View help" msgstr "æŸĨįœ‹å¸ŽåŠŠ" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "莞įŊŽ" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "æŸĨįœ‹æˆ–æ›´æ”š RabbitVCS 莞įŊŽ" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "å…ŗäēŽ" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "å…ŗäēŽ RabbitVCS" #: util/contextmenuitems.py:563 msgid "Open" msgstr "打åŧ€" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "打åŧ€ä¸€ä¸Ē文äģļ" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "æĩč§ˆč‡ŗ" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "æĩč§ˆč‡ŗä¸€ä¸Ē文äģ￈–æ–‡äģļ多" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "čŋ˜åŽŸåąžæ€§" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "čŋ˜åŽŸč¯Ĩåąžæ€§č‡ŗå…ļ原įŠļ态" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "čŋ˜åŽŸåąžæ€§ (递åŊ’įš„)" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "čŋ˜åŽŸč¯Ĩåąžæ€§č‡ŗå…ļ原įŠļ态 (递åŊ’įš„)" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "åˆ é™¤åąžæ€§" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "删除č¯Ĩåąžæ€§" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "删除č¯Ĩåąžæ€§ (递åŊ’įš„)" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "按文äģļ名åŋŊį•ĨéĄšį›Ž" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "æŒ‰æ‰Šåą•ååŋŊį•ĨéĄšį›Ž" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "更新..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "åŽŒæˆįš„æ›´æ–°" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "更新到äŋŽčŽĸį‰ˆ" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "æŖ€å‡ē" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "åŽŒæˆį­žå‡ē" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "čˇ¯åž„" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "æ‰Šåą•" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "加čŊŊ中..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "åˇ˛æ‰žåˆ° %d 饚" #: ui/add.py:157 msgid "Running Add Command..." msgstr "æ­Ŗæ‰§čĄŒ Add å‘Ŋäģ¤" #: ui/add.py:159 msgid "Completed Add" msgstr "Add 厌成" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "į‰ˆæœŦīŧš" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "å¯ŧå‡ē - %s" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "“äģ“åē“ URLâ€å’Œâ€œį›Žįš„åœ°čˇ¯åž„â€å‡åŋ…åĄĢ。" #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "å¯ŧå‡ē" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "æ­ŖčŋčĄŒ Export å‘Ŋäģ¤" #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "Export 厌成" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "åē”ᔍčĄĨ丁" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "å¯šį›ŽåŊ•åē”ᔍčĄĨ丁..." #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "äģŽæ–‡äģļåē”ᔍčĄĨ丁..." #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "厞åē”ᔍčĄĨ丁文äģļ" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "æ—Ĩ期" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "æļˆæ¯" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "å¯ŧå…Ĩ - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "“äģ“åē“ URL”åŋ…åĄĢ。" #: ui/import.py:81 msgid "Running Import Command..." msgstr "æ­ŖčŋčĄŒ Import å‘Ŋäģ¤" #: ui/import.py:89 msgid "Completed Import" msgstr "Import 厌成" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "重å‘Ŋ名" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "新名字:" #: ui/rename.py:60 msgid "The new name field is required" msgstr "æ–°åį§°ä¸€æ åŋ…åĄĢ" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "æ­ŖčŋčĄŒé‡å‘Ŋ名å‘Ŋäģ¤" #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "重å‘Ŋ名厌成" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "文æœŦįŠļ态" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "åąžæ€§įŠļ态" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "æ­Ŗåœ¨čŋčĄŒæäē¤å‘Ŋäģ¤..." #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "提äē¤åŽŒæˆ" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "įŠļ态" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "åšļæŽ’æ¯”čžƒæŸĨįœ‹åˇŽåŧ‚" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "čŋčĄŒåˆåšļæĩ‹č¯•" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "厌成合åšļæĩ‹č¯•" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "æ­Ŗåœ¨čŋčĄŒåˆåšļå‘Ŋäģ¤" #: ui/merge.py:91 msgid "Completed Merge" msgstr "合åšļ厌成" #: ui/merge.py:102 msgid "Merge" msgstr "合åšļ" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" "RabbitVCS Nautilus æ‰Šåą•å‘į”Ÿäē†ä¸€ä¸Ēé”™č¯¯ã€‚č¯ˇč”įŗģRabbitVCS å›ĸ队åšļæäž›ä¸‹åˆ—é”™č¯¯įģ†čŠ‚īŧš" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "选拊一ä¸Ē文äģļ多" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "到" #: ui/dialog.py:261 msgid "Select a File" msgstr "选拊一ä¸Ē文äģļ" #: ui/dialog.py:280 msgid "Save As..." msgstr "åĻ存ä¸ēâ€Ļ" #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "æ‚¨įĄŽåŽščρįģ§įģ­å—īŧŸ" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "åˇ˛é€‰æ‹Šįš„éĄš" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "æˇģ加一ä¸Ē文äģļå¤šåˆ°į‰ˆæœŦåē“" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "čŋčĄŒčŋ˜åŽŸå‘Ŋäģ¤..." #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "厌成čŋ˜åŽŸ" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "æĨč‡Ē和到 URL 栏均ä¸ēåŋ…åĄĢ" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "重新分配" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "æ­ŖčŋčĄŒé‡åˆ†é…å‘Ŋäģ¤" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "重分配厌毕" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "äŋŽčŽĸį‰ˆ" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "äŊœč€…" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "æŸĨįœ‹įģŸä¸€åˇŽåŧ‚" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "åšļæŽ’æ¯”čžƒ" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "æ­ŖčŋčĄŒ Resolve å‘Ŋäģ¤" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "Resolve 厌成" #: ui/changes.py:49 msgid "More Actions..." msgstr "更多操äŊœ..." #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "更攚" #: ui/changes.py:279 msgid "Property Change" msgstr "åąžæ€§æ”šå˜" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "įĄŽåŽš" #: ui/changes.py:321 msgid "No" msgstr "åĻ" #: ui/changes.py:410 msgid "Open from first revision" msgstr "äģŽįŦŦ一ä¸Ēį‰ˆæœŦ打åŧ€" #: ui/changes.py:415 msgid "Open from second revision" msgstr "äģŽįŦŦäēŒä¸Ēį‰ˆæœŦ打åŧ€" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "不čƒŊįģ™į›ŽåŊ•åŠ æŗ¨é‡Š" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "æŗ¨é‡Š - %s" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "明įģ†" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "文æœŦ" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "æĨč‡ĒäŋŽčŽĸį‰ˆä¸€æ åŋ…éĄģä¸ē整数" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "æ—Ĩåŋ— - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "ä¸å¯į”¨" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "操äŊœ" #: ui/log.py:338 msgid "Copy From Path" msgstr "复åˆļč‡Ēčˇ¯åž„" #: ui/log.py:338 msgid "Copy From Revision" msgstr "复åˆļč‡Ēį‰ˆæœŦ" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "æŸĨįœ‹į›¸å¯šäēŽåˇĨäŊœį‰ˆæœŦįš„åˇŽåŧ‚" #: ui/log.py:791 msgid "View diff between revisions" msgstr "æŸĨįœ‹į‰ˆæœŦé—´åˇŽåŧ‚" #: ui/log.py:796 msgid "Compare with working copy" msgstr "与åˇĨäŊœį‰ˆæœŦčŋ›čĄŒæ¯”čžƒ" #: ui/log.py:806 msgid "Compare revisions" msgstr "æ¯”čžƒį‰ˆæœŦ" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "昞į¤ēį‰ˆæœŦäš‹é—´įš„æ›´æ”š" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "įŧ–čž‘äŊœč€…..." #: ui/log.py:837 msgid "Edit log message..." msgstr "įŧ–čž‘æ—Ĩåŋ—æļˆæ¯..." #: ui/log.py:841 msgid "Edit revision properties..." msgstr "įŧ–čž‘į‰ˆæœŦåąžæ€§..." #: ui/log.py:1047 msgid "Edit author" msgstr "įŧ–čž‘äŊœč€…" #: ui/log.py:1059 msgid "Edit log message" msgstr "įŧ–čž‘æ—Ĩåŋ—æļˆæ¯" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "æœĒįŸĨ" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "č‹ąč¯­" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "选拊一ä¸Ēፋåē" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "æ‚¨įĄŽåŽščĻæ¸…įŠēæ‚¨įš„äģ“åē“čˇ¯åž„īŧŸ" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "äģ“åē“čˇ¯åž„åˇ˛æ¸…įŠē" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "æ‚¨įĄŽåŽščĻæ¸…įŠēæ‚¨äš‹å‰įš„æļˆæ¯īŧŸ" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "äģĨ垀æļˆæ¯åˇ˛æ¸…įŠē" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "æ‚¨įĄŽåŽščĻæ¸…įŠēæ‚¨įš„čŽ¤č¯äŋĄæ¯īŧŸ" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "čŽ¤č¯äŋĄæ¯åˇ˛æ¸…įŠē" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "æ— æŗ•čŽˇå–åąžæ€§åˆ—čĄ¨" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "åŋ…éĄģæäž›į›Žæ ‡čˇ¯åž„ã€‚" #: ui/branch.py:115 msgid "Branch/tag" msgstr "分支/tag" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "æ­ŖčŋčĄŒ Branch/tag å‘Ŋäģ¤..." #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "åŽŒæˆįš„ 分支/tag" #: ui/lock.py:73 msgid "Locked" msgstr "åˇ˛é”åŽš" #: ui/lock.py:167 msgid "Get Lock" msgstr "čŽˇåž— Lock" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "æ­ŖčŋčĄŒ Lock å‘Ŋäģ¤" #: ui/lock.py:177 msgid "Completed Lock" msgstr "Lock 厌成" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "äģ“åē“地址栏åŋ…åĄĢ。" #: ui/switch.py:80 msgid "Switch" msgstr "切æĸ" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "æ­Ŗåœ¨čŋčĄŒåˆ‡æĸå‘Ŋäģ¤..." #: ui/switch.py:89 msgid "Completed Switch" msgstr "切æĸ厌成" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "HEAD" #: ui/widget.py:860 msgid "Number" msgstr "" #: ui/widget.py:861 msgid "Working Copy" msgstr "åˇĨäŊœå‰¯æœŦ" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "ä¸ģæœēīŧš" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "į­žå‡ē - %s" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "æ­Ŗåœ¨čŋčĄŒį­žå‡ēå‘Ŋäģ¤" #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "åį§°" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "į”ŸæˆčĄĨ丁" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "æŒ‡åŽščˇ¯åž„ä¸æ˜¯åˇĨäŊœå‰¯æœŦ" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "æ­Ŗåœ¨į”ŸæˆčĄĨ丁文äģļ..." #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "åˇ˛į”ŸæˆčĄĨ丁文äģļ" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "åąžæ€§ - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "å€ŧ" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "äŋå­˜åąžæ€§æ—ļå‡ēįŽ°äē†ä¸€ä¸Ē问éĸ˜ã€‚" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "æŗ¨æ„īŧš åąžæ€§äŋŽæ”šäŧšįĢ‹åŗčĸĢåē”į”¨ã€‚æ‚¨å¯äģĨäŊŋį”¨æ¯éĄšįš„ä¸Šä¸‹æ–‡čœå•æĨå›žéĄžæˆ–æ’¤é”€äŋŽæ”šã€‚\n" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "æ‚¨æƒŗäģŽč¯Ĩį›ŽåŊ•下所有文äģļå’Œå­į›ŽåŊ•ä¸­åˆ é™¤é€‰ä¸­įš„åąžæ€§äšˆīŧŸ" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "文äģļä¸å—į‰ˆæœŦ控åˆļ" #: ui/property_editor.py:112 msgid "Reserved" msgstr "äŋį•™įš„" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "不čƒŊä¸ēåąžæ€§čŽžįŊŽæ–°å€ŧ" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "MIME įąģ型" #: ui/action.py:338 msgid "Finished" msgstr "åˇ˛åŽŒæˆ" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - 厌成" #: ui/action.py:365 msgid "Log Message" msgstr "æ—Ĩåŋ—äŋĄæ¯" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "觪锁" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "æ­Ŗåœ¨čŋčĄŒč§Ŗé”å‘Ŋäģ¤..." #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "č§Ŗé”åŽŒæˆ" #: ui/browser.py:89 msgid "Size" msgstr "文äģļ大小" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "创åģēį›ŽåŊ•..." #: ui/browser.py:353 msgid "Copy to..." msgstr "复åˆļ到 ..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "复åˆļURL到å‰Ē切æŋ" #: ui/browser.py:363 msgid "Move to..." msgstr "į§ģ动到..." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "将选åŒē复åˆļ到å“ĒīŧŸ" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "新äŊįŊŽīŧš" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "将选åŒēį§ģ动到å“ĒīŧŸ" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "æ­Ŗæ¸…į†" #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "æ¸…į†åŽŒæˆ" #: ui/create.py:46 msgid "Repository successfully created" msgstr "į‰ˆæœŦäģ“åē“创åģ翈åŠŸ" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "į‰ˆæœŦåē“创åģēčŋ‡į¨‹ä¸­å‡ēįŽ°é”™č¯¯ã€‚č¯ˇįĄŽčŽ¤æ‰€æŒ‡åŽšį›ŽåŊ•是įŠēįš„ã€‚" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "åąžæ€§åąžäēŽīŧš" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "é€‰ä¸­įš„åąžæ€§å°†äŧščĸĢ递åŊ’åē”į”¨ã€‚" #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "递åŊ’åˆ é™¤åąžæ€§" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "įŧ–čž‘..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "新åģē..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "URL/čˇ¯åž„īŧš" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "加čŊŊ/åˆˇæ–°" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URLīŧš" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "æˇģ加æļˆæ¯" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "čŽ¤č¯įģ†čŠ‚" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "įŧ–čž‘åąžæ€§įģ†čŠ‚" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "文äģļå¤šåį§°" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "æļˆæ¯" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "蝎æˇģåŠ æ‚¨įš„čŽ¤č¯įģ†čŠ‚" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "č¯ˇæäž›æ‚¨įš„ SSL 蝁äšĻ文äģļ" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "前一ä¸Ēæļˆæ¯" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "æ‚¨įĄŽåŽžčĻåˆ é™¤ %item% 吗īŧŸ" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "RabbitVCS 错蝝" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "æ€ģ是æŽĨ受" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "æŽĨ受一æŦĄ" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "递åŊ’åē”į”¨åąžæ€§" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "čŽ¤č¯" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "æŖ€æŸĨ蝁äšĻ" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "įĄŽčŽ¤" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "创åģēæ–‡äģļ多..." #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "åˆ é™¤įĄŽčŽ¤" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "拒įģ" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "指įēšīŧš" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "éĸå‘者īŧš" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "į™ģåŊ•īŧš" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "坆᠁īŧš" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "čˇ¯åž„:" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "前一ä¸Ēæļˆæ¯" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "åąžæ€§" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "åąžæ€§īŧš" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "RabbitVCS 错蝝" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "域īŧš" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "SSL åŽĸæˆˇį̝蝁äšĻ" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "äŋå­˜čޤ蝁" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "文æœŦ更攚" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "čŋ™äē›äŧščĸĢ发送到回æ”ļįĢ™" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "有效īŧš" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "å€ŧīŧš" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "链æŽĨ" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "į‰ˆæœŦäŋĄæ¯" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "äŊœč€…īŧš" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "感č°ĸīŧš" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "受åŊąå“įš„æ–‡äģļ (双å‡ģäŧšæ¯”čžƒ Base)" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "į‰ˆæœŦ襨" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "限åˆļīŧš" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "æ—Ĩåŋ—" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "åˆˇæ–°" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "æ­Ŗåœ¨æ˜žį¤ēį‰ˆæœŦīŧš" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "į숿­ĸäēŽå¤åˆļ" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" "æ¸…į†č¯ˇæą‚....\n" "\n" "åŧ€å§‹åˇĨäŊœå‰¯æœŦæ¸…į†äšˆīŧŸ" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "čēĢäģŊénj蝁" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "æ—Ĩåŋ—äŋĄæ¯" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "æ—Ĩåŋ—选饚" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "ᔍäēŽæ¯”čžƒæ–‡äģļįš„į¨‹åē" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "RabbitVCS" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "URL åŽ†å˛" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "æĩč§ˆ..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "清除äŊ įš„čޤ蝁äŋĄæ¯" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "吝ᔍåžŊįĢ " #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "å¯į”¨æ–‡äģļåąžæ€§" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "吝ᔍ递åŊ’įŠļæ€æŖ€æŸĨ" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "å¤–éƒ¨į¨‹åē" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "叏规" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "蝭荀īŧš" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "æ—Ĩåŋ—" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "最小æ—Ĩåŋ—įē§åˆĢ" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "莰äŊįš„ URL æ•°į›Ž" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "莰äŊįš„äŋĄæ¯æ•°é‡" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "厞äŋå­˜įš„æ•°æŽ" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "昞į¤ē RabbitVCS č°ƒč¯•åˇĨå…ˇ" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "č°ƒč¯•čœå•į”¨äēŽč¯Šæ–­ RabbitVCS č‡ĒčēĢįš„é—Žéĸ˜" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "įąģ型īŧš" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "čĻé”åŽšįš„æ–‡äģļ" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "č¯ˇæčŋ°æ‚¨é”åޚčŋ™ä盿–‡äģļįš„åŽŸå› " #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "锁厚文äģļ" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "选拊 / 取æļˆé€‰æ‹Š 全部" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "偎锁" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "äģŽį‰ˆæœŦ" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "č‡ŗį‰ˆæœŦ" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "æŗ¨é‡Š" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "æ›´æ”šįš„æ–‡äģļ (双å‡ģäŧšæ¯”čžƒ Base)" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "提äē¤įģ™īŧš" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "昞į¤ēéžį‰ˆæœŦ控åˆļįš„æ–‡äģļ" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "通įŸĨäŋĄæ¯" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "čŋœį¨‹ URIīŧš" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "åˇĨäŊœå‰¯æœŦīŧš" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "æˇģ加一ä¸Ēæ–°įš„åąžæ€§ã€‚" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "å…ŗé—­čŋ™ä¸Ēå¯šč¯æĄ†ã€‚" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "åąžæ€§įŧ–čž‘å™¨" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "åˆˇæ–°åąžæ€§åˆ—čĄ¨" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "攚变您åˇĨäŊœå‰¯æœŦįš„åąžæ€§" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "äģŽīŧš" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "臺īŧš" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "选项" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "į‰ˆæœŦ" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "ᜁį•Ĩ外部" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "递åŊ’" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "å¯ŧå…Ĩæļˆæ¯" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "į‰ˆæœŦåē“" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "包æ‹Ŧ厞åŋŊį•Ĩįš„æ–‡äģļ" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "æĨč‡ĒURL" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "æĨč‡Ēīŧš(URL 和čρ合åšļįš„į‰ˆæœŦ)" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "į‰ˆæœŦčŒƒå›´" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "臺īŧš(URL 和čρ合åšļįš„į‰ˆæœŦ)" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "čρ合åšļč‡Ē URL" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "åˇĨäŊœå‰¯æœŦ" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "åĻ‚æžœæ‚¨å¯šæŸä¸Ē分支čŋ›čĄŒäē†äŋŽæ”šīŧŒåšļä¸”æƒŗå°†čŋ™äē›äŋŽæ”šä¸ŽåĻ一分支合åšļīŧŒé€‰æ‹Ščŋ™į§æ–šæŗ•ã€‚" #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "åĻ‚æžœæ‚¨æƒŗåˆåšļ两ä¸Ēä¸åŒįš„åˆ†æ”¯åˆ°æ‚¨įš„åˇĨäŊœå‰¯æœŦįš„č¯īŧŒč¯ˇé€‰æ‹Ščŋ™ä¸Ēæ–šæŗ•ã€‚" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "åŋŊį•Ĩæ—ŠæœŸįš„" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "合åšļ劊手" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "合åšļ一ä¸ĒčŒƒå›´įš„į‰ˆæœŦ" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "合åšļ两ä¸Ēä¸åŒįš„æēį æ ‘" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "äģ…čްåŊ•合åšļ" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "昞į¤ēæ—Ĩåŋ—" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "æĩ‹č¯•合åšļ" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" "äŊŋᔍæ—Ĩåŋ—å¯šč¯æĄ†æĨé€‰æ‹Šæ‚¨æƒŗåˆåšļįš„į‰ˆæœŦã€‚æˆ–č€…æ‰‹åŠ¨æŒ‡åŽšį‰ˆæœŦīŧŒį”¨é€—åˇåˆ†å‰˛ã€‚æ‚¨å¯äģĨ通čŋ‡å‡åˇ\"-\"æĨ指厚一ä¸Ēį‰ˆæœŦčŒƒå›´ã€‚\n" "\n" "例åĻ‚īŧš4-7,9,11,15-HEAD\n" "\n" "čρ合åšļæ‰€æœ‰åˆ†æ”¯č¯ˇäŋæŒįŠēį™Ŋ。" rabbitvcs-0.19/po/zh_TW.po000066400000000000000000001125531445560650400154530ustar00rootroot00000000000000# Chinese (Traditional) translation for rabbitvcs # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the rabbitvcs package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: rabbitvcs\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-11-26 09:51-0500\n" "PO-Revision-Date: 2010-06-09 03:20+0000\n" "Last-Translator: Yu - Sian , Liu \n" "Language-Team: Chinese (Traditional) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2010-12-09 23:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: util/helper.py:109 msgid "just now" msgstr "" #: util/helper.py:111 #, python-format msgid "%d minute(s) ago" msgstr "" #: util/helper.py:631 #, python-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" #: util/helper.py:634 #, python-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i 分鐘" #: util/helper.py:637 #, python-format msgid "%i hour" msgid_plural "%i hours" msgstr[0] "%i 小時" #: util/helper.py:640 #, python-format msgid "%i day" msgid_plural "%i days" msgstr[0] "" msgstr[1] "" #: util/helper.py:643 #, python-format msgid "%i week" msgid_plural "%i weeks" msgstr[0] "" msgstr[1] "" #: util/helper.py:646 #, python-format msgid "%i month" msgid_plural "%i months" msgstr[0] "" msgstr[1] "" #: util/helper.py:649 #, python-format msgid "%i year" msgid_plural "%i years" msgstr[0] "" msgstr[1] "" #: util/contextmenuitems.py:270 msgid "Debug" msgstr "åĩ錯" #: util/contextmenuitems.py:275 msgid "Bugs" msgstr "å•éĄŒå›žå ą" #: util/contextmenuitems.py:280 msgid "Open Shell" msgstr "" #: util/contextmenuitems.py:286 msgid "Refresh Status" msgstr "" #: util/contextmenuitems.py:291 msgid "Debug Revert" msgstr "" #: util/contextmenuitems.py:292 msgid "Reverts everything it sees" msgstr "" #: util/contextmenuitems.py:298 msgid "Invalidate" msgstr "" #: util/contextmenuitems.py:299 msgid "Force an invalidate_extension_info() call" msgstr "" #: util/contextmenuitems.py:305 msgid "Add Emblem" msgstr "" #: util/contextmenuitems.py:306 msgid "Add an emblem" msgstr "" #: util/contextmenuitems.py:312 msgid "Checkout..." msgstr "" #: util/contextmenuitems.py:313 msgid "Check out a working copy" msgstr "" #: util/contextmenuitems.py:318 ui/update.py:53 ui/update.py:97 #: ui/glade/update.glade.h:6 msgid "Update" msgstr "更新" #: util/contextmenuitems.py:319 msgid "Update a working copy" msgstr "" #: util/contextmenuitems.py:324 ui/commit.py:288 ui/commit.py:384 #: ui/glade/commit.glade.h:4 msgid "Commit" msgstr "提äē¤" #: util/contextmenuitems.py:325 msgid "Commit modifications to the repository" msgstr "" #: util/contextmenuitems.py:330 ui/glade/property_page.glade.h:4 msgid "RabbitVCS" msgstr "" #: util/contextmenuitems.py:335 msgid "RabbitVCS SVN" msgstr "" #: util/contextmenuitems.py:340 msgid "RabbitVCS Git" msgstr "" #: util/contextmenuitems.py:345 ui/glade/browser.glade.h:2 msgid "Repository Browser" msgstr "" #: util/contextmenuitems.py:346 msgid "Browse a repository tree" msgstr "" #: util/contextmenuitems.py:351 msgid "Check for Modifications..." msgstr "" #: util/contextmenuitems.py:352 msgid "Check for modifications made to the repository" msgstr "" #: util/contextmenuitems.py:357 msgid "Diff Menu..." msgstr "" #: util/contextmenuitems.py:358 msgid "List of comparison options" msgstr "" #: util/contextmenuitems.py:363 msgid "View diff against base" msgstr "" #: util/contextmenuitems.py:364 msgid "View the modifications made to a file" msgstr "" #: util/contextmenuitems.py:369 msgid "View diff between files/folders" msgstr "" #: util/contextmenuitems.py:370 msgid "View the differences between two files" msgstr "" #: util/contextmenuitems.py:375 ui/log.py:786 msgid "View diff against previous revision" msgstr "" #: util/contextmenuitems.py:376 msgid "View the modifications made to a file since its last change" msgstr "" #: util/contextmenuitems.py:381 msgid "Compare with base" msgstr "" #: util/contextmenuitems.py:382 msgid "Compare with base using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:387 msgid "Compare files/folders" msgstr "" #: util/contextmenuitems.py:388 msgid "Compare the differences between two items" msgstr "" #: util/contextmenuitems.py:393 ui/log.py:801 msgid "Compare with previous revision" msgstr "" #: util/contextmenuitems.py:394 msgid "Compare with previous revision using side-by-side comparison tool" msgstr "" #: util/contextmenuitems.py:399 msgid "Show Changes..." msgstr "" #: util/contextmenuitems.py:400 msgid "Show changes between paths and revisions" msgstr "" #: util/contextmenuitems.py:405 msgid "Show Log" msgstr "éĄ¯į¤ēæ—Ĩčnj" #: util/contextmenuitems.py:406 msgid "Show a file's log information" msgstr "" #: util/contextmenuitems.py:411 ui/add.py:156 ui/tags.py:273 #: ui/branches.py:274 ui/widget.py:1199 ui/glade/add.glade.h:1 msgid "Add" msgstr "加å…Ĩ" #: util/contextmenuitems.py:412 msgid "Schedule items to be added to the repository" msgstr "" #: util/contextmenuitems.py:417 msgid "Add to ignore list" msgstr "" #: util/contextmenuitems.py:422 msgid "Update to revision..." msgstr "" #: util/contextmenuitems.py:423 msgid "Update a file to a specific revision" msgstr "" #: util/contextmenuitems.py:428 msgid "Rename..." msgstr "重新å‘Ŋ名..." #: util/contextmenuitems.py:429 msgid "Schedule an item to be renamed on the repository" msgstr "" #: util/contextmenuitems.py:434 ui/glade/properties.glade.h:3 msgid "Delete" msgstr "åˆĒ除" #: util/contextmenuitems.py:435 msgid "Schedule an item to be deleted from the repository" msgstr "" #: util/contextmenuitems.py:440 ui/revert.py:50 ui/revert.py:103 #: ui/revert.py:115 ui/revert.py:168 msgid "Revert" msgstr "還原" #: util/contextmenuitems.py:441 msgid "Revert an item to its unmodified state" msgstr "" #: util/contextmenuitems.py:446 ui/resolve.py:48 ui/resolve.py:102 msgid "Resolve" msgstr "č§Ŗæąē" #: util/contextmenuitems.py:447 msgid "Mark a conflicted item as resolved" msgstr "" #: util/contextmenuitems.py:452 msgid "Restore" msgstr "還原" #: util/contextmenuitems.py:453 msgid "Restore a missing item" msgstr "" #: util/contextmenuitems.py:457 msgid "Relocate..." msgstr "" #: util/contextmenuitems.py:458 msgid "Relocate your working copy" msgstr "" #: util/contextmenuitems.py:463 msgid "Get Lock..." msgstr "" #: util/contextmenuitems.py:464 msgid "Locally lock items" msgstr "" #: util/contextmenuitems.py:469 msgid "Release Lock..." msgstr "" #: util/contextmenuitems.py:470 msgid "Release lock on an item" msgstr "" #: util/contextmenuitems.py:475 ui/cleanup.py:55 msgid "Cleanup" msgstr "清除" #: util/contextmenuitems.py:476 msgid "Clean up working copy" msgstr "" #: util/contextmenuitems.py:481 msgid "Export..." msgstr "" #: util/contextmenuitems.py:482 msgid "Export a working copy or repository with no versioning information" msgstr "" #: util/contextmenuitems.py:487 msgid "Create Repository here" msgstr "" #: util/contextmenuitems.py:488 msgid "Create a repository in a folder" msgstr "" #: util/contextmenuitems.py:493 ui/import.py:80 ui/glade/import.glade.h:3 msgid "Import" msgstr "匯å…Ĩ" #: util/contextmenuitems.py:494 msgid "Import an item into a repository" msgstr "" #: util/contextmenuitems.py:503 msgid "Branch/tag..." msgstr "" #: util/contextmenuitems.py:504 msgid "Copy an item to another location in the repository" msgstr "" #: util/contextmenuitems.py:509 msgid "Switch..." msgstr "" #: util/contextmenuitems.py:510 msgid "Change the repository location of a working copy" msgstr "" #: util/contextmenuitems.py:515 msgid "Merge..." msgstr "" #: util/contextmenuitems.py:516 msgid "A wizard with steps for merging" msgstr "" #: util/contextmenuitems.py:521 msgid "Annotate..." msgstr "" #: util/contextmenuitems.py:522 msgid "Annotate a file" msgstr "" #: util/contextmenuitems.py:527 msgid "Create Patch..." msgstr "" #: util/contextmenuitems.py:528 msgid "Creates a unified diff file with all changes you made" msgstr "" #: util/contextmenuitems.py:533 msgid "Apply Patch..." msgstr "" #: util/contextmenuitems.py:534 msgid "Applies a unified diff file to the working copy" msgstr "" #: util/contextmenuitems.py:539 ui/glade/properties.glade.h:7 msgid "Properties" msgstr "åąŦ性" #: util/contextmenuitems.py:540 msgid "View the properties of an item" msgstr "" #: util/contextmenuitems.py:545 msgid "Help" msgstr "" #: util/contextmenuitems.py:546 msgid "View help" msgstr "" #: util/contextmenuitems.py:551 ui/glade/settings.glade.h:28 msgid "Settings" msgstr "č¨­åŽš" #: util/contextmenuitems.py:552 msgid "View or change RabbitVCS settings" msgstr "" #: util/contextmenuitems.py:557 ui/glade/about.glade.h:4 msgid "About" msgstr "關æ–ŧ" #: util/contextmenuitems.py:558 msgid "About RabbitVCS" msgstr "" #: util/contextmenuitems.py:563 msgid "Open" msgstr "" #: util/contextmenuitems.py:564 msgid "Open a file" msgstr "" #: util/contextmenuitems.py:572 msgid "Browse to" msgstr "" #: util/contextmenuitems.py:573 msgid "Browse to a file or folder" msgstr "" #: util/contextmenuitems.py:578 msgid "Revert property" msgstr "" #: util/contextmenuitems.py:580 msgid "Revert this property to its original state" msgstr "" #: util/contextmenuitems.py:584 msgid "Revert property (recursive)" msgstr "" #: util/contextmenuitems.py:586 msgid "Revert this property to its original state (recursive)" msgstr "" #: util/contextmenuitems.py:591 msgid "Delete property" msgstr "" #: util/contextmenuitems.py:593 msgid "Delete this property" msgstr "" #: util/contextmenuitems.py:597 msgid "Delete property (recursive)" msgstr "" #: util/contextmenuitems.py:599 msgid "Delete this property (recursive)" msgstr "" #: util/contextmenuitems.py:604 msgid "Edit details" msgstr "" #: util/contextmenuitems.py:606 msgid "Show and edit property details" msgstr "" #: util/contextmenuitems.py:610 msgid "Initialize Repository" msgstr "" #: util/contextmenuitems.py:615 ui/clone.py:47 ui/clone.py:65 msgid "Clone" msgstr "" #: util/contextmenuitems.py:620 msgid "Fetch/Pull" msgstr "" #: util/contextmenuitems.py:625 ui/push.py:96 msgid "Push" msgstr "" #: util/contextmenuitems.py:630 msgid "Branches" msgstr "" #: util/contextmenuitems.py:635 msgid "Tags" msgstr "" #: util/contextmenuitems.py:640 msgid "Remotes" msgstr "" #: util/contextmenuitems.py:666 msgid "Ignore item by filename" msgstr "" #: util/contextmenuitems.py:685 msgid "Ignore item by file extension" msgstr "" #: ui/update.py:54 ui/update.py:98 ui/updateto.py:94 msgid "Updating..." msgstr "更新中..." #: ui/update.py:56 ui/update.py:103 ui/updateto.py:102 msgid "Completed Update" msgstr "" #: ui/updateto.py:82 msgid "Rollback To Revision" msgstr "" #: ui/updateto.py:83 msgid "Rolling Back..." msgstr "" #: ui/updateto.py:91 msgid "Completed Rollback" msgstr "" #: ui/updateto.py:93 msgid "Update To Revision" msgstr "" #: ui/updateto.py:138 ui/checkout.py:173 msgid "Checkout" msgstr "取å‡ē" #: ui/updateto.py:139 #, python-format msgid "Checking out %s..." msgstr "" #: ui/updateto.py:145 ui/checkout.py:184 msgid "Completed Checkout" msgstr "" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/changes.py:279 #: ui/changes.py:364 ui/log.py:337 ui/log.py:572 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/action.py:118 #: ui/unlock.py:61 ui/browser.py:89 msgid "Path" msgstr "čˇ¯åž‘" #: ui/add.py:72 ui/commit.py:205 ui/commit.py:313 ui/revert.py:62 #: ui/revert.py:128 ui/checkmods.py:67 ui/resolve.py:61 ui/lock.py:72 #: ui/createpatch.py:119 ui/createpatch.py:215 ui/unlock.py:61 msgid "Extension" msgstr "" #: ui/add.py:95 ui/commit.py:93 ui/lock.py:115 ui/unlock.py:85 #: ui/glade/dialogs.glade.h:33 msgid "Loading..." msgstr "čŧ‰å…Ĩ中..." #: ui/add.py:98 ui/commit.py:100 ui/lock.py:118 ui/unlock.py:107 #, python-format msgid "Found %d item(s)" msgstr "扞到 %d å€‹é …į›Ž" #: ui/add.py:157 msgid "Running Add Command..." msgstr "åŸˇčĄŒåŠ å…Ĩ..." #: ui/add.py:159 msgid "Completed Add" msgstr "厌整加å…Ĩ" #: ui/ignore.py:100 msgid "Ignore file:" msgstr "" #: ui/tags.py:62 msgid "Tag Manager" msgstr "" #: ui/tags.py:63 msgid "Tags" msgstr "" #: ui/tags.py:74 msgid "Tag" msgstr "" #: ui/tags.py:99 ui/branches.py:100 ui/glade/dialogs.glade.h:38 #: ui/glade/property_page.glade.h:2 msgid "Name:" msgstr "" #: ui/tags.py:109 ui/tags.py:176 ui/branches.py:155 ui/merge.py:438 #: ui/merge.py:488 ui/glade/browser.glade.h:3 msgid "Revision:" msgstr "äŋŽč¨‚į‰ˆīŧš" #: ui/tags.py:128 ui/tags.py:188 ui/branches.py:167 ui/merge.py:450 #: ui/merge.py:500 msgid "Message:" msgstr "" #: ui/tags.py:145 ui/tags.py:284 ui/branches.py:147 ui/branches.py:291 msgid "Save" msgstr "" #: ui/tags.py:153 msgid "Tagger:" msgstr "" #: ui/tags.py:165 ui/merge.py:427 ui/merge.py:477 msgid "Date:" msgstr "" #: ui/tags.py:230 ui/branches.py:209 ui/remotes.py:128 #, python-format msgid "Are you sure you want to delete %s?" msgstr "" #: ui/tags.py:275 msgid "Add Tag" msgstr "" #: ui/tags.py:293 msgid "Tag Detail" msgstr "" #: ui/export.py:45 ui/export.py:114 #, python-format msgid "Export - %s" msgstr "" #: ui/export.py:72 ui/export.py:131 ui/clone.py:57 ui/checkout.py:163 msgid "The repository URL and destination path are both required fields." msgstr "" #: ui/export.py:92 ui/export.py:151 msgid "Export" msgstr "匯å‡ē" #: ui/export.py:93 ui/export.py:152 msgid "Running Export Command..." msgstr "" #: ui/export.py:104 ui/export.py:160 msgid "Completed Export" msgstr "" #: ui/applypatch.py:57 ui/applypatch.py:113 ui/applypatch.py:143 msgid "Apply Patch" msgstr "" #: ui/applypatch.py:74 msgid "Apply Patch To Directory..." msgstr "" #: ui/applypatch.py:114 ui/applypatch.py:144 msgid "Applying Patch File..." msgstr "" #: ui/applypatch.py:116 ui/applypatch.py:146 msgid "Patch File Applied" msgstr "" #: ui/branches.py:62 msgid "Branch Manager" msgstr "" #: ui/branches.py:63 msgid "Branches" msgstr "" #: ui/branches.py:73 ui/widget.py:855 msgid "Branch" msgstr "" #: ui/branches.py:110 msgid "Start Point:" msgstr "" #: ui/branches.py:129 msgid "Keep old branch's history" msgstr "" #: ui/branches.py:138 msgid "Set as active branch" msgstr "" #: ui/branches.py:280 msgid "Add Branch" msgstr "" #: ui/branches.py:304 msgid "Branch Detail" msgstr "" #: ui/push.py:76 ui/dialog.py:54 ui/annotate.py:128 ui/annotate.py:229 #: ui/log.py:327 ui/log.py:557 ui/browser.py:89 msgid "Date" msgstr "æ—Ĩ期" #: ui/push.py:76 ui/dialog.py:54 ui/log.py:327 ui/log.py:557 #: ui/glade/dialogs.glade.h:36 msgid "Message" msgstr "č¨Šæ¯" #: ui/push.py:97 msgid "Running Push Command..." msgstr "" #: ui/push.py:99 msgid "Completed Push" msgstr "" #: ui/import.py:40 #, python-format msgid "Import - %s" msgstr "匯å…Ĩ - %s" #: ui/import.py:68 msgid "The repository URL field is required." msgstr "" #: ui/import.py:81 msgid "Running Import Command..." msgstr "" #: ui/import.py:89 msgid "Completed Import" msgstr "" #: ui/rename.py:48 msgid "The requested file or folder does not exist." msgstr "" #: ui/rename.py:52 ui/rename.py:84 ui/rename.py:113 ui/browser.py:470 msgid "Rename" msgstr "重新å‘Ŋ名" #: ui/rename.py:52 ui/browser.py:470 ui/glade/dialogs.glade.h:39 msgid "New Name:" msgstr "æ–°åį¨ąīŧš" #: ui/rename.py:60 msgid "The new name field is required" msgstr "" #: ui/rename.py:85 ui/rename.py:114 msgid "Running Rename Command..." msgstr "" #: ui/rename.py:91 ui/rename.py:120 msgid "Completed Rename" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Text Status" msgstr "" #: ui/commit.py:206 ui/revert.py:63 ui/checkmods.py:68 ui/resolve.py:62 #: ui/createpatch.py:120 msgid "Property Status" msgstr "" #: ui/commit.py:289 ui/commit.py:385 msgid "Running Commit Command..." msgstr "" #: ui/commit.py:295 ui/commit.py:394 msgid "Completed Commit" msgstr "厌成提äē¤" #: ui/commit.py:314 ui/revert.py:129 ui/createpatch.py:216 #: ui/property_editor.py:112 msgid "Status" msgstr "į‹€æ…‹" #: ui/diff.py:284 msgid "View diff as side-by-side comparison" msgstr "" #: ui/merge.py:87 msgid "Running Merge Test" msgstr "" #: ui/merge.py:88 msgid "Completed Merge Test" msgstr "" #: ui/merge.py:90 msgid "Running Merge Command" msgstr "" #: ui/merge.py:91 msgid "Completed Merge" msgstr "" #: ui/merge.py:102 msgid "Merge" msgstr "合äŊĩ" #: ui/merge.py:415 ui/merge.py:465 msgid "Author:" msgstr "" #: ui/dialog.py:38 #, python-format msgid "" "An error has occurred in the RabbitVCS Nautilus extension. Please contact " "the RabbitVCS team with the error details listed below:" msgstr "" #: ui/dialog.py:108 msgid "Select a Folder" msgstr "é¸æ“‡ä¸€å€‹čŗ‡æ–™å¤ž" #: ui/dialog.py:138 ui/glade/log.glade.h:11 msgid "to" msgstr "到" #: ui/dialog.py:261 msgid "Select a File" msgstr "選取æĒ”æĄˆ" #: ui/dialog.py:280 msgid "Save As..." msgstr "åĻ存į‚ē..." #: ui/dialog.py:299 ui/glade/dialogs.glade.h:19 msgid "Are you sure you want to continue?" msgstr "" #: ui/dialog.py:327 msgid "the selected item(s)" msgstr "" #: ui/dialog.py:398 msgid "Added a folder to the repository" msgstr "" #: ui/revert.py:104 ui/revert.py:169 msgid "Running Revert Command..." msgstr "" #: ui/revert.py:106 ui/revert.py:171 msgid "Completed Revert" msgstr "" #: ui/clone.py:66 msgid "Running Clone Command..." msgstr "" #: ui/clone.py:73 msgid "Completed Clone" msgstr "" #: ui/relocate.py:77 msgid "The from and to url fields are both required." msgstr "" #: ui/relocate.py:87 ui/glade/relocate.glade.h:3 msgid "Relocate" msgstr "" #: ui/relocate.py:88 msgid "Running Relocate Command..." msgstr "" #: ui/relocate.py:95 msgid "Completed Relocate" msgstr "" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:48 #: ui/log.py:326 ui/log.py:556 ui/widget.py:854 ui/browser.py:89 #: ui/glade/merge.glade.h:17 msgid "Revision" msgstr "äŋŽč¨‚į‰ˆæœŦ" #: ui/checkmods.py:69 ui/annotate.py:127 ui/annotate.py:228 ui/log.py:326 #: ui/log.py:556 ui/browser.py:89 msgid "Author" msgstr "äŊœč€…" #: ui/checkmods.py:160 ui/changes.py:50 ui/changes.py:420 msgid "View unified diff" msgstr "" #: ui/checkmods.py:165 ui/changes.py:425 msgid "Compare side by side" msgstr "" #: ui/resolve.py:103 msgid "Running Resolve Command..." msgstr "" #: ui/resolve.py:106 msgid "Completed Resolve" msgstr "" #: ui/changes.py:49 msgid "More Actions..." msgstr "" #: ui/changes.py:279 ui/changes.py:364 msgid "Change" msgstr "更攚" #: ui/changes.py:279 msgid "Property Change" msgstr "åąŦæ€§æ”ščŽŠ" #: ui/changes.py:321 ui/lock.py:126 msgid "Yes" msgstr "是" #: ui/changes.py:321 msgid "No" msgstr "åĻ" #: ui/changes.py:410 msgid "Open from first revision" msgstr "" #: ui/changes.py:415 msgid "Open from second revision" msgstr "" #: ui/annotate.py:57 msgid "Cannot annotate a directory" msgstr "" #: ui/annotate.py:63 #, python-format msgid "Annotate - %s" msgstr "" #: ui/annotate.py:127 ui/annotate.py:228 msgid "Line" msgstr "" #: ui/annotate.py:128 ui/annotate.py:229 msgid "Text" msgstr "文字" #: ui/annotate.py:143 msgid "The from revision field must be an integer" msgstr "" #: ui/log.py:120 #, python-format msgid "Log - %s" msgstr "į´€éŒ„ - %s" #: ui/log.py:270 ui/log.py:271 ui/glade/log.glade.h:7 msgid "N/A" msgstr "į„Ą" #: ui/log.py:337 ui/log.py:572 ui/action.py:118 msgid "Action" msgstr "動äŊœ" #: ui/log.py:338 msgid "Copy From Path" msgstr "åžžčˇ¯åž‘č¤‡čŖŊ" #: ui/log.py:338 msgid "Copy From Revision" msgstr "åžžäŋŽč¨‚į‰ˆæœŦ中複čŖŊ" #: ui/log.py:556 msgid "Graph" msgstr "" #: ui/log.py:781 msgid "View diff against working copy" msgstr "" #: ui/log.py:791 msgid "View diff between revisions" msgstr "" #: ui/log.py:796 msgid "Compare with working copy" msgstr "" #: ui/log.py:806 msgid "Compare revisions" msgstr "比čŧƒäŋŽč¨‚į‰ˆé–“åˇŽį•°" #: ui/log.py:812 msgid "Show changes against previous revision" msgstr "" #: ui/log.py:818 msgid "Show changes between revisions" msgstr "" #: ui/log.py:823 msgid "Update to this revision" msgstr "" #: ui/log.py:824 msgid "Update the selected path to this revision" msgstr "" #: ui/log.py:829 ui/log.py:833 msgid "Edit author..." msgstr "" #: ui/log.py:837 msgid "Edit log message..." msgstr "" #: ui/log.py:841 msgid "Edit revision properties..." msgstr "" #: ui/log.py:1047 msgid "Edit author" msgstr "" #: ui/log.py:1059 msgid "Edit log message" msgstr "" #: ui/settings.py:43 ui/glade/settings.glade.h:35 msgid "Unknown" msgstr "不明" #: ui/settings.py:45 msgid "There was an error communicating with the status checker service." msgstr "" #: ui/settings.py:59 msgid "English" msgstr "č‹ąæ–‡" #: ui/settings.py:119 msgid "Config file:" msgstr "" #: ui/settings.py:294 msgid "Select a program" msgstr "" #: ui/settings.py:303 msgid "Are you sure you want to clear your repository paths?" msgstr "" #: ui/settings.py:310 msgid "Repository paths cleared" msgstr "" #: ui/settings.py:314 msgid "Are you sure you want to clear your previous messages?" msgstr "" #: ui/settings.py:321 msgid "Previous messages cleared" msgstr "" #: ui/settings.py:325 msgid "Are you sure you want to clear your authentication information?" msgstr "" #: ui/settings.py:342 msgid "Authentication information cleared" msgstr "" #: ui/revprops.py:65 ui/properties.py:158 ui/property_editor.py:155 msgid "Unable to retrieve properties list" msgstr "" #: ui/branch.py:99 msgid "You must supply a destination path." msgstr "" #: ui/branch.py:115 msgid "Branch/tag" msgstr "" #: ui/branch.py:116 msgid "Running Branch/tag Command..." msgstr "" #: ui/branch.py:118 msgid "Completed Branch/tag" msgstr "" #: ui/lock.py:73 msgid "Locked" msgstr "åˇ˛éŽ–åŽš" #: ui/lock.py:167 msgid "Get Lock" msgstr "取垗鎖厚" #: ui/lock.py:168 msgid "Running Lock Command..." msgstr "åŸˇčĄŒä¸ŠéŽ–å‘Ŋäģ¤" #: ui/lock.py:177 msgid "Completed Lock" msgstr "厌成上鎖" #: ui/switch.py:70 msgid "The repository location is a required field." msgstr "" #: ui/switch.py:80 msgid "Switch" msgstr "čŊ‰æ›" #: ui/switch.py:81 msgid "Running Switch Command..." msgstr "" #: ui/switch.py:89 msgid "Completed Switch" msgstr "" #: ui/widget.py:853 ui/widget.py:859 ui/glade/merge.glade.h:10 msgid "HEAD" msgstr "" #: ui/widget.py:860 msgid "Number" msgstr "數字" #: ui/widget.py:861 msgid "Working Copy" msgstr "" #: ui/widget.py:1056 msgid "Repository:" msgstr "" #: ui/widget.py:1075 msgid "Branch:" msgstr "" #: ui/widget.py:1093 ui/glade/dialogs.glade.h:30 msgid "Host:" msgstr "ä¸ģ抟:" #: ui/widget.py:1194 msgid "Add line:" msgstr "" #: ui/checkout.py:139 ui/checkout.py:213 #, python-format msgid "Checkout - %s" msgstr "" #: ui/checkout.py:174 msgid "Running Checkout Command..." msgstr "" #: ui/remotes.py:59 msgid "Remote Repository Manager" msgstr "" #: ui/remotes.py:60 msgid "Remote Repositories" msgstr "" #: ui/remotes.py:66 ui/properties.py:63 ui/property_editor.py:112 msgid "Name" msgstr "åį¨ą" #: ui/remotes.py:66 msgid "Host" msgstr "" #: ui/property_page.py:126 msgid "Repository URL" msgstr "" #: ui/createpatch.py:68 ui/createpatch.py:86 ui/createpatch.py:162 #: ui/createpatch.py:262 msgid "Create Patch" msgstr "" #: ui/createpatch.py:112 ui/createpatch.py:208 msgid "The given path is not a working copy" msgstr "" #: ui/createpatch.py:163 ui/createpatch.py:263 msgid "Creating Patch File..." msgstr "" #: ui/createpatch.py:193 ui/createpatch.py:292 msgid "Patch File Created" msgstr "" #: ui/properties.py:55 #, python-format msgid "Properties - %s" msgstr "åąŦ性 - %s" #: ui/properties.py:63 ui/property_editor.py:112 msgid "Value" msgstr "å€ŧ" #: ui/properties.py:179 msgid "There was a problem saving your properties." msgstr "" #: ui/property_editor.py:56 msgid "" "Note: changes to properties are applied instantly. You may review and " "undo changes using the context menu for each item.\n" msgstr "" #: ui/property_editor.py:61 msgid "" "Do you want to delete the selected properties from all files and " "subdirectories\n" "beneath this directory?" msgstr "" #: ui/property_editor.py:102 msgid "File is not under version control." msgstr "" #: ui/property_editor.py:112 msgid "Reserved" msgstr "äŋį•™" #: ui/property_editor.py:189 msgid "Unable to set new value for property." msgstr "" #: ui/__init__.py:50 msgid "" "You must specify a version control system using the --vcs [svn|git] option" msgstr "" #: ui/action.py:118 msgid "Mime Type" msgstr "MIME éĄžåž‹" #: ui/action.py:338 msgid "Finished" msgstr "åˇ˛åŽŒæˆ" #: ui/action.py:342 #, python-format msgid "%s - Finished" msgstr "%s - åˇ˛åŽŒæˆ" #: ui/action.py:365 msgid "Log Message" msgstr "į´€éŒ„č¨Šæ¯" #: ui/unlock.py:48 ui/unlock.py:125 msgid "Unlock" msgstr "č§Ŗé™¤éŽ–åŽš" #: ui/unlock.py:126 msgid "Running Unlock Command..." msgstr "" #: ui/unlock.py:129 msgid "Completed Unlock" msgstr "" #: ui/browser.py:89 msgid "Size" msgstr "大小" #: ui/browser.py:326 msgid "Select" msgstr "" #: ui/browser.py:348 msgid "Create folder..." msgstr "新åĸžčŗ‡æ–™å¤ž" #: ui/browser.py:353 msgid "Copy to..." msgstr "複čŖŊ到..." #: ui/browser.py:358 msgid "Copy URL to clipboard" msgstr "複čŖŊįļ˛å€åˆ°å‰Ēč˛ŧį°ŋ" #: ui/browser.py:363 msgid "Move to..." msgstr "į§ģ動到..." #: ui/browser.py:531 msgid "Where do you want to copy the selection?" msgstr "" #: ui/browser.py:532 ui/browser.py:561 msgid "New Location:" msgstr "" #: ui/browser.py:560 msgid "Where do you want to move the selection?" msgstr "" #: ui/cleanup.py:56 ui/glade/cleanup.glade.h:1 msgid "Cleaning Up..." msgstr "" #: ui/cleanup.py:58 msgid "Completed Cleanup" msgstr "" #: ui/create.py:46 msgid "Repository successfully created" msgstr "" #: ui/create.py:48 msgid "" "There was an error creating the repository. Make sure the given folder is " "empty." msgstr "" #: ui/glade/properties.glade.h:1 msgid "Properties for:" msgstr "" #: ui/glade/properties.glade.h:2 msgid "Selected properties will be applied recursively." msgstr "" #: ui/glade/properties.glade.h:4 msgid "Delete properties recursively" msgstr "" #: ui/glade/properties.glade.h:5 msgid "Edit..." msgstr "ᎍčŧ¯..." #: ui/glade/properties.glade.h:6 msgid "New..." msgstr "新åĸž..." #: ui/glade/properties.glade.h:8 msgid "URL/Path:" msgstr "" #: ui/glade/browser.glade.h:1 msgid "Load/Refresh" msgstr "" #: ui/glade/browser.glade.h:4 msgid "URL:" msgstr "URL:" #: ui/glade/dialogs.glade.h:1 msgid "A conflict was found in the following file:" msgstr "" #: ui/glade/dialogs.glade.h:2 ui/glade/commit.glade.h:1 msgid "Add Message" msgstr "" #: ui/glade/dialogs.glade.h:3 msgid "Certificate Details" msgstr "" #: ui/glade/dialogs.glade.h:4 msgid "Edit Property Details" msgstr "" #: ui/glade/dialogs.glade.h:5 msgid "Enter Name and Email Details" msgstr "" #: ui/glade/dialogs.glade.h:6 msgid "Folder Name" msgstr "" #: ui/glade/dialogs.glade.h:7 ui/glade/log.glade.h:3 msgid "Message" msgstr "" #: ui/glade/dialogs.glade.h:8 msgid "Please add your authentication details" msgstr "" #: ui/glade/dialogs.glade.h:9 msgid "Please provide your ssl certification file" msgstr "" #: ui/glade/dialogs.glade.h:10 msgid "Previous Messages" msgstr "" #: ui/glade/dialogs.glade.h:12 msgid "" "Are you sure you want to delete %item%?" msgstr "" #: ui/glade/dialogs.glade.h:13 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:14 msgid "Accept Forever" msgstr "" #: ui/glade/dialogs.glade.h:15 msgid "Accept Mine" msgstr "" #: ui/glade/dialogs.glade.h:16 msgid "Accept Once" msgstr "" #: ui/glade/dialogs.glade.h:17 msgid "Accept Theirs" msgstr "" #: ui/glade/dialogs.glade.h:18 msgid "Apply property recursively" msgstr "" #: ui/glade/dialogs.glade.h:20 msgid "Authentication" msgstr "驗證" #: ui/glade/dialogs.glade.h:21 msgid "Cancel" msgstr "" #: ui/glade/dialogs.glade.h:22 msgid "Check Certificate" msgstr "" #: ui/glade/dialogs.glade.h:23 msgid "Confirmation" msgstr "įĸēčĒ" #: ui/glade/dialogs.glade.h:24 msgid "Conflict Resolution Decision" msgstr "" #: ui/glade/dialogs.glade.h:25 msgid "Create Folder..." msgstr "åģēįĢ‹čŗ‡æ–™å¤ž..." #: ui/glade/dialogs.glade.h:26 msgid "Delete Confirmation" msgstr "įĸēčĒåˆĒ除" #: ui/glade/dialogs.glade.h:27 msgid "Deny" msgstr "取æļˆ" #: ui/glade/dialogs.glade.h:28 msgid "Email:" msgstr "" #: ui/glade/dialogs.glade.h:29 msgid "Fingerprint:" msgstr "æŒ‡į´‹:" #: ui/glade/dialogs.glade.h:31 msgid "How do you want to handle this?" msgstr "" #: ui/glade/dialogs.glade.h:32 msgid "Issuer:" msgstr "" #: ui/glade/dialogs.glade.h:34 msgid "Login:" msgstr "å¸ŗč™Ÿīŧš" #: ui/glade/dialogs.glade.h:35 msgid "Merge Manually" msgstr "" #: ui/glade/dialogs.glade.h:37 msgid "Name and Email" msgstr "" #: ui/glade/dialogs.glade.h:40 msgid "Password:" msgstr "密įĸŧīŧš" #: ui/glade/dialogs.glade.h:41 msgid "Path:" msgstr "čˇ¯åž‘:" #: ui/glade/dialogs.glade.h:42 ui/glade/lock.glade.h:4 #: ui/glade/commit.glade.h:5 ui/glade/import.glade.h:5 msgid "Previous Messages" msgstr "äš‹å‰įš„č¨Šæ¯" #: ui/glade/dialogs.glade.h:43 msgid "Property" msgstr "åąŦ性" #: ui/glade/dialogs.glade.h:44 msgid "Property:" msgstr "åąžæ€§:" #: ui/glade/dialogs.glade.h:45 msgid "RabbitVCS Error" msgstr "" #: ui/glade/dialogs.glade.h:46 msgid "Realm:" msgstr "領域īŧš" #: ui/glade/dialogs.glade.h:47 msgid "SSL Client Certification" msgstr "" #: ui/glade/dialogs.glade.h:48 msgid "Save Authentication" msgstr "" #: ui/glade/dialogs.glade.h:49 msgid "Text Change" msgstr "" #: ui/glade/dialogs.glade.h:50 msgid "The item(s) will be sent to the trash can." msgstr "" #: ui/glade/dialogs.glade.h:51 msgid "Valid:" msgstr "" #: ui/glade/dialogs.glade.h:52 msgid "Value:" msgstr "數å€ŧīŧš" #: ui/glade/pull.glade.h:1 msgid "Pull Information" msgstr "" #: ui/glade/pull.glade.h:2 ui/glade/git-update.glade.h:2 msgid "Merge changes into local branch" msgstr "" #: ui/glade/pull.glade.h:3 msgid "Pull" msgstr "" #: ui/glade/manager.glade.h:1 msgid "label" msgstr "" #: ui/glade/about.glade.h:1 msgid "Links" msgstr "" #: ui/glade/about.glade.h:2 msgid "Version Information" msgstr "" #: ui/glade/about.glade.h:3 msgid "RabbitVCS" msgstr "" #: ui/glade/about.glade.h:5 msgid "Authors:" msgstr "äŊœč€…īŧš" #: ui/glade/about.glade.h:6 msgid "Thanks:" msgstr "éŗ´čŦ:" #: ui/glade/property_page.glade.h:1 msgid "Content status:" msgstr "" #: ui/glade/property_page.glade.h:3 msgid "Property status:" msgstr "" #: ui/glade/property_page.glade.h:5 msgid "VCS:" msgstr "" #: ui/glade/log.glade.h:1 msgid "100" msgstr "100" #: ui/glade/log.glade.h:2 msgid "Affected File(s) (double-click to compare with base)" msgstr "" #: ui/glade/log.glade.h:4 msgid "Revisions Table" msgstr "" #: ui/glade/log.glade.h:5 msgid "Limit:" msgstr "限åˆļ:" #: ui/glade/log.glade.h:6 msgid "Log" msgstr "į´€éŒ„" #: ui/glade/log.glade.h:8 msgid "Refresh" msgstr "é‡æ–°æ•´į†" #: ui/glade/log.glade.h:9 msgid "Showing Revisions:" msgstr "" #: ui/glade/log.glade.h:10 msgid "Stop on copy" msgstr "" #: ui/glade/cleanup.glade.h:2 msgid "" "Cleanup Requested....\n" "\n" "Begin working copy cleanup?" msgstr "" #: ui/glade/settings.glade.h:1 msgid "Authentication" msgstr "驗證" #: ui/glade/settings.glade.h:2 msgid "Checker type:" msgstr "" #: ui/glade/settings.glade.h:3 msgid "Configuration Editor" msgstr "" #: ui/glade/settings.glade.h:4 msgid "Log Messages" msgstr "æ—ĨčĒŒč¨Šæ¯" #: ui/glade/settings.glade.h:5 msgid "Logging Options" msgstr "" #: ui/glade/settings.glade.h:6 msgid "Memory usage: " msgstr "" #: ui/glade/settings.glade.h:7 msgid "Other Information" msgstr "" #: ui/glade/settings.glade.h:8 msgid "Process ID:" msgstr "" #: ui/glade/settings.glade.h:9 msgid "Program used to compare files" msgstr "" #: ui/glade/settings.glade.h:10 msgid "RabbitVCS" msgstr "" #: ui/glade/settings.glade.h:11 msgid "URL History" msgstr "" #: ui/glade/settings.glade.h:12 msgid "Browse..." msgstr "į€čĻŊ..." #: ui/glade/settings.glade.h:13 msgid "Clear your authentication information" msgstr "" #: ui/glade/settings.glade.h:14 msgid "Enable emblems" msgstr "" #: ui/glade/settings.glade.h:15 msgid "Enable file attributes" msgstr "" #: ui/glade/settings.glade.h:16 msgid "Enable recursive status checks" msgstr "" #: ui/glade/settings.glade.h:17 msgid "External Programs" msgstr "å¤–éƒ¨į¨‹åŧ" #: ui/glade/settings.glade.h:18 msgid "General" msgstr "一čˆŦ" #: ui/glade/settings.glade.h:19 msgid "Git" msgstr "" #: ui/glade/settings.glade.h:20 msgid "Language:" msgstr "čĒžč¨€:" #: ui/glade/settings.glade.h:21 msgid "Logging" msgstr "į´€éŒ„" #: ui/glade/settings.glade.h:22 msgid "Minimum level to log" msgstr "" #: ui/glade/settings.glade.h:23 msgid "Number of URLs to remember" msgstr "" #: ui/glade/settings.glade.h:24 msgid "Number of messages to remember" msgstr "" #: ui/glade/settings.glade.h:25 msgid "Refresh Information" msgstr "" #: ui/glade/settings.glade.h:26 msgid "Restart Checker" msgstr "" #: ui/glade/settings.glade.h:27 msgid "Saved Data" msgstr "" #: ui/glade/settings.glade.h:29 msgid "Show RabbitVCS debugging tools" msgstr "" #: ui/glade/settings.glade.h:30 msgid "Show new version on the left side" msgstr "" #: ui/glade/settings.glade.h:31 msgid "Status Checker" msgstr "" #: ui/glade/settings.glade.h:32 msgid "Stop Checker" msgstr "" #: ui/glade/settings.glade.h:33 msgid "The debug menu is used to diagnose problems with RabbitVCS itself" msgstr "" #: ui/glade/settings.glade.h:34 msgid "Type:" msgstr "éĄžåž‹īŧš" #: ui/glade/lock.glade.h:1 msgid "Files to lock" msgstr "" #: ui/glade/lock.glade.h:2 msgid "Please describe why you are locking these files" msgstr "" #: ui/glade/lock.glade.h:3 msgid "Lock Files" msgstr "" #: ui/glade/lock.glade.h:5 ui/glade/add.glade.h:2 ui/glade/commit.glade.h:6 msgid "Select / Deselect all" msgstr "" #: ui/glade/lock.glade.h:6 msgid "Steal the locks" msgstr "" #: ui/glade/annotate.glade.h:1 msgid "From Revision" msgstr "" #: ui/glade/annotate.glade.h:2 msgid "To Revision" msgstr "" #: ui/glade/annotate.glade.h:3 msgid "Annotate" msgstr "č¨ģč§Ŗ" #: ui/glade/ignore.glade.h:1 msgid "Ignore and exclude files from being tracked" msgstr "" #: ui/glade/ignore.glade.h:2 msgid "Ignore" msgstr "" #: ui/glade/commit.glade.h:2 msgid "Changed Files (double-click to compare with base)" msgstr "" #: ui/glade/commit.glade.h:3 msgid "Commit to:" msgstr "" #: ui/glade/commit.glade.h:7 msgid "Show unversioned files" msgstr "" #: ui/glade/notification.glade.h:1 msgid "Notification Messages" msgstr "通įŸĨč¨Šæ¯" #: ui/glade/property_editor.glade.h:1 msgid "Remote URI:" msgstr "" #: ui/glade/property_editor.glade.h:2 msgid "Working Copy:" msgstr "" #: ui/glade/property_editor.glade.h:3 msgid "Add a new property." msgstr "" #: ui/glade/property_editor.glade.h:4 msgid "Close this dialog." msgstr "" #: ui/glade/property_editor.glade.h:5 msgid "Property Editor" msgstr "åąŦæ€§įˇ¨čŧ¯å™¨" #: ui/glade/property_editor.glade.h:6 msgid "Refresh the list of properties." msgstr "" #: ui/glade/relocate.glade.h:1 msgid "Change the repository of your working copy" msgstr "" #: ui/glade/relocate.glade.h:2 msgid "From:" msgstr "åžž:" #: ui/glade/relocate.glade.h:4 msgid "To:" msgstr "到īŧš" #: ui/glade/git-update.glade.h:1 ui/glade/update.glade.h:1 #: ui/glade/merge.glade.h:3 msgid "Options" msgstr "選項" #: ui/glade/git-update.glade.h:3 msgid "Update Local Repository" msgstr "" #: ui/glade/update.glade.h:2 msgid "Revision" msgstr "" #: ui/glade/update.glade.h:3 msgid "Omit Externals" msgstr "" #: ui/glade/update.glade.h:4 ui/glade/merge.glade.h:16 msgid "Recursive" msgstr "遞čŋ´é€˛å…Ĩå­į›ŽéŒ„" #: ui/glade/update.glade.h:5 msgid "Rollback to specified revision number" msgstr "" #: ui/glade/import.glade.h:1 msgid "Import Message" msgstr "" #: ui/glade/import.glade.h:2 msgid "Repository" msgstr "" #: ui/glade/import.glade.h:4 msgid "Include ignored files" msgstr "" #: ui/glade/merge.glade.h:1 msgid "From URL" msgstr "åžž URL 新åĸž" #: ui/glade/merge.glade.h:2 msgid "From: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:4 msgid "Revision Range" msgstr "" #: ui/glade/merge.glade.h:5 msgid "To: (URL and revision to merge)" msgstr "" #: ui/glade/merge.glade.h:6 msgid "URL to merge from" msgstr "" #: ui/glade/merge.glade.h:7 msgid "Working Copy" msgstr "" #: ui/glade/merge.glade.h:8 msgid "" "Choose this method if you have made some changes to a branch and wish to " "merge your changes with another branch." msgstr "" #: ui/glade/merge.glade.h:9 msgid "" "Choose this method if you wish to merge two different branches into your " "working copy." msgstr "" #: ui/glade/merge.glade.h:11 msgid "Ignore ancestry" msgstr "" #: ui/glade/merge.glade.h:12 msgid "Merge Assistant" msgstr "" #: ui/glade/merge.glade.h:13 msgid "Merge a range of revisions" msgstr "" #: ui/glade/merge.glade.h:14 msgid "Merge two different trees" msgstr "" #: ui/glade/merge.glade.h:15 msgid "Only record the merge" msgstr "" #: ui/glade/merge.glade.h:18 msgid "Show log" msgstr "" #: ui/glade/merge.glade.h:19 msgid "Test Merge" msgstr "" #: ui/glade/merge.glade.h:20 msgid "" "Use the log dialog to select the revisions that you wish to merge. Or write " "out the revisions manually, each separated by a comma. You can specify a " "revision range by a dash. \n" "\n" "Example: 4-7,9,11,15-HEAD\n" "\n" "To merge all revisions, leave the box empty." msgstr "" rabbitvcs-0.19/rabbitvcs/000077500000000000000000000000001445560650400154125ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/__init__.py000066400000000000000000000066441445560650400175350ustar00rootroot00000000000000from __future__ import absolute_import # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import gettext as _gettext from locale import getdefaultlocale # Hack to make RabbitVCS win in the battle against TortoiseHg try: import mercurial.demandimport mercurial.demandimport.enable = lambda: None except Exception as e: pass version = "0.19" APP_NAME = "RabbitVCS" TEMP_DIR_PREFIX = "rabbitvcs-" LOCALE_DIR = "%s/locale" % os.path.dirname(os.path.dirname(os.path.realpath(__file__))) if not os.path.exists(LOCALE_DIR): LOCALE_DIR = "/usr/share/locale" WEBSITE = "http://www.rabbitvcs.org/" langs = [] language = os.environ.get("LANGUAGE", None) if language: langs += language.split(":") if getdefaultlocale()[0] != None: langs += [getdefaultlocale()[0]] _gettext.bindtextdomain(APP_NAME, LOCALE_DIR) _gettext.textdomain(APP_NAME) current_translation = None class gettext(object): @staticmethod def set_language(langs): global current_translation current_translation = _gettext.translation( APP_NAME, LOCALE_DIR, languages=langs, fallback=True ) @staticmethod def gettext(message): if not current_translation: return message return current_translation.gettext(message) @staticmethod def ngettext(msgid1, msgid2, n): return gettext.gettext(msgid1 if n == 1 else msgid2) gettext.set_language(langs) def package_name(): """ Report the application name in a form appropriate for building package files. """ return APP_NAME.lower() def package_version(): """ Report the version number of the application, minus any name extensions. """ app_version = version.split("-")[0] # TODO: sanity-check app_version: make sure it's just digits and dots return app_version def package_identifier(): """ Return a package identifier suitable for use in a package file. """ return "%s-%s" % (package_name(), package_version()) def package_prefix(): """ Return the prefix of the local RabbitVCS installation """ try: from rabbitvcs.buildinfo import rabbitvcs_prefix return rabbitvcs_prefix except ImportError as e: return "" def get_icon_path(): """ Return the path to the icon folder """ try: from rabbitvcs.buildinfo import icon_path return icon_path except ImportError as e: return "%s/data/icons/hicolor" % os.path.dirname( os.path.dirname(os.path.realpath(__file__)) ) rabbitvcs-0.19/rabbitvcs/debug/000077500000000000000000000000001445560650400165005ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/debug/__init__.py000066400000000000000000000016761445560650400206230ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # rabbitvcs-0.19/rabbitvcs/debug/pythonconsole.py000066400000000000000000000313151445560650400217610ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # pythonconsole.py -- Console widget # Widely stolen from Pluma's Python console. # Copyright (C), 1998 James Henstridge # Copyright (C), 2005 Adam Hooper # Copyright (C) 2006 - Steve FrÊcinaux from rabbitvcs.util.strings import S from gi.repository import GLib, Gtk, Gdk, Pango import string import sys import re import traceback import gi gi.require_version("Gtk", "3.0") class PythonConsole(Gtk.ScrolledWindow): __gsignals__ = { "grab-focus": "override", } DEFAULT_FONT = "Monospace" _RE_SPACES = re.compile(r"^\s+") def __init__(self, exit=lambda: None, namespace={}): Gtk.ScrolledWindow.__init__(self) self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) self.set_shadow_type(Gtk.ShadowType.IN) self.view = Gtk.TextView() self.view.set_editable(True) self.view.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) self.add(self.view) self.view.show() buffer = self.view.get_buffer() self.namespace = namespace self.exit = exit self.block_command = False # Chose a monospace font. fontname = self.DEFAULT_FONT for f in self.get_pango_context().list_families(): name = f.get_name() if f.get_name() in ["Courier New", "Courier Mono"]: fontname = name break self.modify_font(Pango.FontDescription(fontname)) # Init first line buffer.create_mark("input-line", buffer.get_end_iter(), True) buffer.insert(buffer.get_end_iter(), ">>> ") buffer.create_mark("input", buffer.get_end_iter(), True) # Init history self.history = [""] self.history_pos = 0 self.current_command = "" self.namespace["__history__"] = self.history # Set up hooks for standard output. self.stdout = OutFile(self, sys.stdout.fileno()) self.stderr = OutFile(self, sys.stderr.fileno()) # Signals self.view.connect("key-press-event", self._key_press_event_cb) buffer.connect("mark-set", self.__mark_set_cb) def do_grab_focus(self): self.view.grab_focus() def _key_press_event_cb(self, view, event): modifier_mask = Gtk.accelerator_get_default_mod_mask() event_state = event.state & modifier_mask keyname = Gdk.keyval_name(event.keyval) if keyname == "d" and event_state == Gdk.ModifierType.CONTROL_MASK: self.exit() elif keyname == "Return" and event_state == Gdk.ModifierType.CONTROL_MASK: # Get the command buffer = view.get_buffer() inp_mark = buffer.get_mark("input") inp = buffer.get_iter_at_mark(inp_mark) cur = buffer.get_end_iter() line = buffer.get_text(inp, cur, False) self.current_command = self.current_command + line + "\n" self.history_add(line) # Prepare the new line cur = buffer.get_end_iter() buffer.insert(cur, "\n... ") cur = buffer.get_end_iter() buffer.move_mark(inp_mark, cur) # Keep indentation of precendent line spaces = self._RE_SPACES.match(line) if spaces is not None: buffer.insert(cur, line[spaces.start() : spaces.end()]) cur = buffer.get_end_iter() buffer.place_cursor(cur) GLib.idle_add(self.scroll_to_end) return True elif keyname == "Return": # Get the marks buffer = view.get_buffer() lin_mark = buffer.get_mark("input-line") inp_mark = buffer.get_mark("input") # Get the command line inp = buffer.get_iter_at_mark(inp_mark) cur = buffer.get_end_iter() line = buffer.get_text(inp, cur, False) self.current_command = self.current_command + line + "\n" self.history_add(line) buffer.insert(cur, "\n") cur_strip = self.current_command.rstrip() if cur_strip.endswith(":") or ( self.current_command[-2:] != "\n\n" and self.block_command ): # Unfinished block command self.block_command = True com_mark = "... " elif cur_strip.endswith("\\"): com_mark = "... " else: # Eval the command self.__run(self.current_command) self.current_command = "" self.block_command = False com_mark = ">>> " # Prepare the new line cur = buffer.get_end_iter() buffer.move_mark(lin_mark, cur) buffer.insert(cur, com_mark) cur = buffer.get_end_iter() buffer.move_mark(inp_mark, cur) buffer.place_cursor(cur) GLib.idle_add(self.scroll_to_end) return True elif keyname == "KP_Down" or keyname == "Down": # Next entry from history view.emit_stop_by_name("key_press_event") self.history_down() GLib.idle_add(self.scroll_to_end) return True elif keyname == "KP_Up" or keyname == "Up": # Previous entry from history view.emit_stop_by_name("key_press_event") self.history_up() GLib.idle_add(self.scroll_to_end) return True elif keyname == "KP_Left" or keyname == "Left" or keyname == "BackSpace": buffer = view.get_buffer() inp = buffer.get_iter_at_mark(buffer.get_mark("input")) cur = buffer.get_iter_at_mark(buffer.get_insert()) if inp.compare(cur) == 0: if not event_state: buffer.place_cursor(inp) return True return False # For the console we enable smart/home end behavior inconditionally # since it is useful when editing python elif ( keyname == "KP_Home" or keyname == "Home" ) and event_state == event_state & ( Gdk.ModifierType.SHIFT_MASK | Gdk.ModifierType.CONTROL_MASK ): # Go to the begin of the command instead of the begin of the line buffer = view.get_buffer() iter = buffer.get_iter_at_mark(buffer.get_mark("input")) ins = buffer.get_iter_at_mark(buffer.get_insert()) while iter.get_char().isspace(): iter.forward_char() if iter.equal(ins): iter = buffer.get_iter_at_mark(buffer.get_mark("input")) if event_state & Gdk.ModifierType.SHIFT_MASK: buffer.move_mark_by_name("insert", iter) else: buffer.place_cursor(iter) return True elif ( keyname == "KP_End" or keyname == "End" ) and event_state == event_state & ( Gdk.ModifierType.SHIFT_MASK | Gdk.ModifierType.CONTROL_MASK ): buffer = view.get_buffer() iter = buffer.get_end_iter() ins = buffer.get_iter_at_mark(buffer.get_insert()) iter.backward_char() while iter.get_char().isspace(): iter.backward_char() iter.forward_char() if iter.equal(ins): iter = buffer.get_end_iter() if event_state & Gdk.ModifierType.SHIFT_MASK: buffer.move_mark_by_name("insert", iter) else: buffer.place_cursor(iter) return True def __mark_set_cb(self, buffer, iter, name): input = buffer.get_iter_at_mark(buffer.get_mark("input")) pos = buffer.get_iter_at_mark(buffer.get_insert()) self.view.set_editable(pos.compare(input) != -1) def get_command_line(self): buffer = self.view.get_buffer() inp = buffer.get_iter_at_mark(buffer.get_mark("input")) cur = buffer.get_end_iter() return buffer.get_text(inp, cur, False) def set_command_line(self, command): buffer = self.view.get_buffer() mark = buffer.get_mark("input") inp = buffer.get_iter_at_mark(mark) cur = buffer.get_end_iter() buffer.delete(inp, cur) buffer.insert(inp, command) self.view.grab_focus() def history_add(self, line): if line.strip() != "": self.history_pos = len(self.history) self.history[self.history_pos - 1] = line self.history.append("") def history_up(self): if self.history_pos > 0: self.history[self.history_pos] = self.get_command_line() self.history_pos = self.history_pos - 1 self.set_command_line(self.history[self.history_pos]) def history_down(self): if self.history_pos < len(self.history) - 1: self.history[self.history_pos] = self.get_command_line() self.history_pos = self.history_pos + 1 self.set_command_line(self.history[self.history_pos]) def scroll_to_end(self): iter = self.view.get_buffer().get_end_iter() self.view.scroll_to_iter(iter, 0.0, False, 0.5, 0.5) return False def write(self, text): buffer = self.view.get_buffer() buffer.insert(buffer.get_end_iter(), text) GLib.idle_add(self.scroll_to_end) def eval(self, command, display_command=False): buffer = self.view.get_buffer() lin = buffer.get_mark("input-line") buffer.delete(buffer.get_iter_at_mark(lin), buffer.get_end_iter()) if isinstance(command, list) or isinstance(command, tuple): for c in command: if display_command: self.write(">>> " + c + "\n") self.__run(c) else: if display_command: self.write(">>> " + c + "\n") self.__run(command) cur = buffer.get_end_iter() buffer.move_mark_by_name("input-line", cur) buffer.insert(cur, ">>> ") cur = buffer.get_end_iter() buffer.move_mark_by_name("input", cur) self.view.scroll_to_iter(buffer.get_end_iter(), 0.0, False, 0.5, 0.5) def __run(self, command): sys.stdout, self.stdout = self.stdout, sys.stdout sys.stderr, self.stderr = self.stderr, sys.stderr # eval and exec are broken in how they deal with utf8-encoded # strings so we have to explicitly decode the command before # passing it along command = S(command).unicode() try: try: r = eval(command, globals(), self.namespace) if not r is None: print(repr(r)) except SystemExit: self.exit() except SyntaxError: exec(command, globals(), self.namespace) except SystemExit: self.exit() except: if hasattr(sys, "last_type") and sys.last_type == SystemExit: self.exit() else: traceback.print_exc() sys.stdout, self.stdout = self.stdout, sys.stdout sys.stderr, self.stderr = self.stderr, sys.stderr class OutFile: """ A fake output file object. """ def __init__(self, console, fn): self.fn = fn self.console = console def close(self): pass def flush(self): pass def fileno(self): return self.fn def isatty(self): return 0 def read(self, a): return "" def readline(self): return "" def readlines(self): return [] def write(self, s): self.console.write(s) def writelines(self, l): self.console.write(l) def seek(self, a): raise IOError(29, "Illegal seek") def tell(self): raise IOError(29, "Illegal seek") truncate = tell rabbitvcs-0.19/rabbitvcs/services/000077500000000000000000000000001445560650400172355ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/services/__init__.py000066400000000000000000000000001445560650400213340ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/services/checkerservice.py000066400000000000000000000414241445560650400226010ustar00rootroot00000000000000# # Copyright (C) 2009 Jason Heeris # Copyright (C) 2009 by Bruce van der Kooij # Copyright (C) 2009 by Adam Plumb # # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ The checker service for RabbitVCS background status checks. This file can be run as a Python script, in which case it starts a background VCS status checking service that can be called via DBUS. It also contains class definitions to call these methods from within a separate Python process. This currently works like so: 1. Nautilus loads our extension, RabbitVCS 2. RabbitVCS creates a StatusCheckerStub 3. StatusCheckerStub calls start(), which is a wrapper for a more general service starter convenience method 4. The service starter method looks for a DBUS object with the given service name and object path; if none is found, it creates it by running this script RabbitVCS can then call the stub methods, getting status info via the CheckStatus method itself, or more likely from a callback upon completion of a status check. NOTE: as a general rule, the data piped between processes or sent over DBUS should be kept to a minimum. Use convenience methods to condense and summarise data wherever possible (this is the case in the actual status cache and checker code). """ from __future__ import absolute_import from rabbitvcs import version as SERVICE_VERSION import os import os.path import sys import json from gi.repository import GObject from gi.repository import GLib import dbus import dbus.mainloop.glib import dbus.service import rabbitvcs.util.decorators import rabbitvcs.util._locale from rabbitvcs.util import helper from rabbitvcs.util.strings import S import rabbitvcs.services.service from rabbitvcs.services.statuschecker import StatusChecker import rabbitvcs.vcs.status from rabbitvcs.util.log import Log log = Log("rabbitvcs.services.checkerservice") INTERFACE = "org.google.code.rabbitvcs.StatusChecker" OBJECT_PATH = "/org/google/code/rabbitvcs/StatusChecker" SERVICE = "org.google.code.rabbitvcs.RabbitVCS.Checker" TIMEOUT = 60 * 15 * 100 # seconds def find_class(module, name): """Given a module name and a class name, return the actual type object.""" # From Python stdlib pickle module source __import__(module) mod = sys.modules[module] klass = getattr(mod, name) return klass def encode_status(status): """Before encoding a status object to JSON, we need to turn it into something simpler. """ return status.__getstate__() def decode_status(json_dict): """Once we get a JSON encoded string out the other side of DBUS, we need to reconstitute the original object. This method is based on the pickle module in the Python stdlib. """ cl = find_class(json_dict["__module__"], json_dict["__type__"]) st = None if cl in rabbitvcs.vcs.status.STATUS_TYPES: st = cl.__new__(cl) st.__setstate__(json_dict) elif "path" in json_dict: log.warning("Could not deduce status class: %s" % json_dict["__type__"]) st = rabbitvcs.vcs.status.Status.status_error(json_dict["path"]) else: raise TypeError("RabbitVCS status object has no path") return st def output_and_flush(*args): # Idle output function. sys.stdout.write(*args) sys.stdout.flush() class StatusCheckerService(dbus.service.Object): """StatusCheckerService objects wrap a StatusCheckerPlus instance, exporting methods that can be called via DBUS. There should only be a single such object running in a separate process from the GUI (ie. do not create this in the Nautilus extension code, you should use a StatusCheckerStub there instead). """ def __init__(self, connection, mainloop): """Creates a new status checker wrapper service, with the given DBUS connection. The mainloop argument is needed for process management (eg. calling Quit() for graceful exiting). @param connection: the DBUS connection (eg. session bus, system bus) @type connection: a DBUS connection object @param mainloop: the main loop that DBUS is using @type mainloop: any main loop with a quit() method """ dbus.service.Object.__init__(self, connection, OBJECT_PATH) self.encoder = json.JSONEncoder(default=encode_status, separators=(",", ":")) self.mainloop = mainloop # Start the status checking daemon so we can do requests in the # background self.status_checker = StatusChecker() @dbus.service.method(INTERFACE) def ExtraInformation(self): return self.status_checker.extra_info() @dbus.service.method(INTERFACE) def MemoryUsage(self): own_mem = helper.process_memory(os.getpid()) checker_mem = self.status_checker.get_memory_usage() return own_mem + checker_mem @dbus.service.method(INTERFACE) def SetLocale(self, language="", encoding=""): return rabbitvcs.util._locale.set_locale(language, encoding) @dbus.service.method(INTERFACE) def PID(self): return os.getpid() @dbus.service.method(INTERFACE) def CheckerType(self): return self.status_checker.CHECKER_NAME @dbus.service.method(INTERFACE, in_signature="aybbb", out_signature="s") def CheckStatus(self, path, recurse=False, invalidate=False, summary=False): """Requests a status check from the underlying status checker. Path is given as an array of bytes instead of a string because dbus does not support strings with invalid characters. """ status = self.status_checker.check_status( S(bytearray(path)), recurse=recurse, summary=summary, invalidate=invalidate ) return self.encoder.encode(status) @dbus.service.method(INTERFACE, in_signature="aay", out_signature="s") def GenerateMenuConditions(self, paths): upaths = [] for path in paths: upaths.append(S(bytearray(path))) path_dict = self.status_checker.generate_menu_conditions(upaths) return json.dumps(path_dict) @dbus.service.method(INTERFACE) def CheckVersionOrDie(self, version): """ If the version passed does not match the version of RabbitVCS available when this service started, the service will exit. The return value is None if the versions match, else it's the PID of the service (useful for waiting for the process to exit). """ if not self.CheckVersion(version): log.warning( "Version mismatch, quitting checker service " "(service: %s, extension: %s)" % (SERVICE_VERSION, version) ) return self.Quit() return None @dbus.service.method(INTERFACE) def CheckVersion(self, version): """ Return True iff the version of RabbitVCS imported by this service is the same as that passed in (ie. used by extension code). """ return version == SERVICE_VERSION @dbus.service.method(INTERFACE) def Quit(self): """ Quits the service, performing any necessary cleanup operations. You can call this from the command line with: dbus-send --print-reply \ --dest=org.google.code.rabbitvcs.RabbitVCS.Checker \ /org/google/code/rabbitvcs/StatusChecker \ org.google.code.rabbitvcs.StatusChecker.Quit If calling this programmatically, then you can do "os.waitpid(pid, 0)" on the returned PID to prevent a zombie process. """ self.status_checker.quit() log.debug("Quitting main loop...") self.mainloop.quit() return self.PID() class StatusCheckerStub(object): """StatusCheckerStub objects contain methods that call an actual status checker running in another process. These objects should be created by the GUI as needed (eg. the nautilus extension code). The inter-process communication is via DBUS. """ def __init__(self): """Creates an object that can call the VCS status checker via DBUS. If there is not already a DBUS object with the path "OBJECT_PATH", we create one by starting a new Python process that runs this file. """ # We need this to for the client to be able to do asynchronous calls dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) self.session_bus = dbus.SessionBus() self.decoder = json.JSONDecoder(object_hook=decode_status) self.status_checker = None self._connect_to_checker() def _connect_to_checker(self): # Start the status checker, if it's not running this should start it up. # Otherwise it leaves it alone. start() # Try to get a new checker try: self.status_checker = self.session_bus.get_object(SERVICE, OBJECT_PATH) # Sets the checker locale. self.status_checker.SetLocale(*rabbitvcs.util._locale.get_locale()) except dbus.DBusException as ex: # There is not much we should do about this... log.exception(ex) def assert_version(self, version): """ This will use the CheckVersionOrDie method to ensure that either the checker service currently running has the correct version, or that it is quit and restarted. Note that if the version of the newly started checker still doesn't match, nothing is done. """ try: pid = self.status_checker.CheckVersionOrDie(version) except dbus.DBusException as ex: log.exception(ex) self._connect_to_checker() else: if pid is not None: try: os.waitpid(pid, 0) except OSError: # Process already gone... pass start() self._connect_to_checker() try: if not self.status_checker.CheckVersion(version): log.warning("Version mismatch even after restart!") except dbus.DBusException as ex: log.exception(ex) self._connect_to_checker() def check_status_now(self, path, recurse=False, invalidate=False, summary=False): status = None try: json_status = self.status_checker.CheckStatus( bytearray(S(path).bytes()), recurse, invalidate, summary, dbus_interface=INTERFACE, timeout=TIMEOUT, ) status = self.decoder.decode(json_status) # Test client error problems :) # raise dbus.DBusException("Test") except dbus.DBusException as ex: log.exception(ex) status = rabbitvcs.vcs.status.Status.status_error(path) # Try to reconnect self._connect_to_checker() return status def check_status_later( self, path, callback, recurse=False, invalidate=False, summary=False ): def real_reply_handler(json_status): # Note that this a closure referring to the outer functions callback # parameter status = self.decoder.decode(json_status) path1 = S(path) path2 = S(status.path) assert path1 == path2, ( "Status check returned the wrong path " "(asked about %s, got back %s)" % (path1.display(), path2.display()) ) callback(status) def reply_handler(*args, **kwargs): # The callback should be performed as a low priority task, so we # keep Nautilus as responsive as possible. GLib.idle_add(real_reply_handler, *args, **kwargs) def error_handler(dbus_ex): log.exception(dbus_ex) self._connect_to_checker() callback(rabbitvcs.vcs.status.Status.status_error(path)) try: self.status_checker.CheckStatus( bytearray(S(path).bytes()), recurse, invalidate, summary, dbus_interface=INTERFACE, timeout=TIMEOUT, reply_handler=reply_handler, error_handler=error_handler, ) except dbus.DBusException as ex: log.exception(ex) callback(rabbitvcs.vcs.status.Status.status_error(path)) # Try to reconnect self._connect_to_checker() # @rabbitvcs.util.decorators.deprecated # Can't decide whether this should be deprecated or not... -JH def check_status( self, path, recurse=False, invalidate=False, summary=False, callback=None ): """Check the VCS status of the given path. This is a pass-through method to the check_status method of the DBUS service (which is, in turn, a wrapper around the real status checker). """ if callback: GLib.idle_add( self.check_status_later, path, callback, recurse, invalidate, summary ) return rabbitvcs.vcs.status.Status.status_calc(path) else: return self.check_status_now(path, recurse, invalidate, summary) def generate_menu_conditions(self, provider, base_dir, paths, callback): def real_reply_handler(obj): # Note that this a closure referring to the outer functions callback # parameter path_dict = json.loads(obj) callback(provider, base_dir, paths, path_dict) def reply_handler(*args, **kwargs): # The callback should be performed as a low priority task, so we # keep Nautilus as responsive as possible. GLib.idle_add(real_reply_handler, *args, **kwargs) def error_handler(dbus_ex): log.exception(dbus_ex) self._connect_to_checker() callback(provider, base_dir, paths, {}) bpaths = [bytearray(S(p).bytes()) for p in paths] try: self.status_checker.GenerateMenuConditions( bpaths, dbus_interface=INTERFACE, timeout=TIMEOUT, reply_handler=reply_handler, error_handler=error_handler, ) except dbus.DBusException as ex: log.exception(ex) callback(provider, base_dir, paths, {}) # Try to reconnect self._connect_to_checker() def generate_menu_conditions_async(self, provider, base_dir, paths, callback): GLib.idle_add( self.generate_menu_conditions, provider, base_dir, paths, callback ) return {} def start(): """Starts the checker service, via the utility method in "service.py".""" rabbitvcs.services.service.start_service( os.path.abspath(__file__), SERVICE, OBJECT_PATH ) def Main(): """The main point of entry for the checker service. This will set up the DBUS and glib extensions, the gobject/glib main loop, and start the service. """ global log log = Log("rabbitvcs.services.checkerservice:main") log.debug("Checker: starting service: %s (%s)" % (OBJECT_PATH, os.getpid())) # We need this to for the client to be able to do asynchronous calls dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) # The following calls are required to make DBus thread-aware and therefore # support the ability run threads. helper.gobject_threads_init() dbus.mainloop.glib.threads_init() # This registers our service name with the bus session_bus = dbus.SessionBus() service_name = dbus.service.BusName(SERVICE, session_bus) mainloop = GLib.MainLoop() checker_service = StatusCheckerService(session_bus, mainloop) GLib.idle_add(output_and_flush, "Started status checker service\n") mainloop.run() log.debug("Checker: ended service: %s (%s)" % (OBJECT_PATH, os.getpid())) if __name__ == "__main__": rabbitvcs.util._locale.initialize_locale() # import cProfile # import rabbitvcs.util.helper # profile_data_file = os.path.join( # rabbitvcs.util.helper.get_home_folder(), # "checkerservice.stats") # cProfile.run("Main()", profile_data_file) Main() rabbitvcs-0.19/rabbitvcs/services/service.py000066400000000000000000000060731445560650400212550ustar00rootroot00000000000000# # Copyright (C) 2009 Jason Heeris # Copyright (C) 2009 by Bruce van der Kooij # Copyright (C) 2009 by Adam Plumb # # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Simple utility module for starting DBUS services. This module contains helper functions for starting DBUS services. Usually they would be used from within a constructor. """ from __future__ import absolute_import import sys import subprocess import dbus from rabbitvcs.util.log import Log log = Log("rabbitvcs.services.service") def start_service(script_file, dbus_service_name, dbus_object_path): """ This function is used to start a service that exports a DBUS object. If the DBUS object can be found already, nothing is done and the function returns True. Otherwise we try to start the given script file and wait until we receive a newline over stdout. The "wait for newline" mechanism ensures any function calling this one will not try to access the object via DBUS until it is ready. It is recommended to use something like glib.idle_add(sys.stdout.write, "Started service\n") glib.idle_add(sys.stdout.flush) mainloop.run() That way a newline will be sent when the mainloop is started. @param script_file: the Python script file to run if the DBUS object does not already exist @type script_file: a Python script file that will create the DBUS object and send a newline over stdout when it is ready @param dbus_service_name: the name of the DBUS service to request @type dbus_service_name: string (confirming to the DBUS service format) @param dbus_object_path: the DBUS object path to request @type dbus_object_path: string (confirming to the DBUS object path format) @rtype: boolean @return: Whether or not the service was successfully started. """ object_exists = False try: session_bus = dbus.SessionBus() obj = session_bus.get_object(dbus_service_name, dbus_object_path) object_exists = True except dbus.DBusException: proc = subprocess.Popen( [sys.executable, script_file], stdin=subprocess.PIPE, stdout=subprocess.PIPE ) pid = proc.pid log.debug("Started process: %i" % pid) # Wait for subprocess to send a newline, to tell us it's ready proc.stdout.readline() # We don't care what the message is object_exists = True return object_exists rabbitvcs-0.19/rabbitvcs/services/statuschecker.py000066400000000000000000000043451445560650400224650ustar00rootroot00000000000000# # Copyright (C) 2009 Jason Heeris # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Very simple status checking class. Useful when you can't get any of the others to work, or you need to prototype things. """ from __future__ import absolute_import from rabbitvcs.util.log import Log import rabbitvcs.vcs import rabbitvcs.vcs.status from rabbitvcs import gettext _ = gettext.gettext log = Log("rabbitvcs.services.statuschecker") class StatusChecker(object): """A class for performing status checks.""" # All subclasses should override this! This is to be displayed in the # settings dialog CHECKER_NAME = _("Simple status checker") def __init__(self): """Initialises status checker. Obviously.""" self.vcs_client = rabbitvcs.vcs.create_vcs_instance() self.conditions_dict_cache = {} def check_status(self, path, recurse, summary, invalidate): """Performs a status check, blocking until the check is done.""" path_status = self.vcs_client.status(path, summary, invalidate) return path_status def generate_menu_conditions(self, paths, invalidate=False): from rabbitvcs.util.contextmenu import MainContextMenuConditions conditions = MainContextMenuConditions(self.vcs_client, paths) return conditions.path_dict def extra_info(self): return None def get_memory_usage(self): """Returns any additional memory of any subprocesses used by this checker. In other words, DO NOT return the memory usage of THIS process! """ return 0 def quit(self): # We will exit when the main process does pass rabbitvcs-0.19/rabbitvcs/test.py000066400000000000000000000024071445560650400167460ustar00rootroot00000000000000from __future__ import absolute_import # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import unittest import doctest import rabbitvcs.util.helper if __name__ == "__main__": suite = unittest.TestSuite() for module in (rabbitvcs.util.helper,): suite.addTest(doctest.DocTestSuite(module)) runner = unittest.TextTestRunner() runner.run(suite) rabbitvcs-0.19/rabbitvcs/tests/000077500000000000000000000000001445560650400165545ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/tests/__init__.py000066400000000000000000000016761445560650400206770ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # rabbitvcs-0.19/rabbitvcs/tests/nautilus.py000066400000000000000000000006071445560650400207750ustar00rootroot00000000000000""" Dummy nautilus module for testing. It should provide the bare minimum to get the RabbitVCS extension to load properly. """ class InfoProvider(object): pass class MenuProvider(object): pass class ColumnProvider(object): pass class NautilusVFSFile(object): def add_string_attribute(self, key, value): """Pretend to add a string attribute.""" pass rabbitvcs-0.19/rabbitvcs/tests/test_rabbitvcs.py000066400000000000000000000133321445560650400221460ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Unit tests for the top-level rabbitvcs package. """ from __future__ import absolute_import from os.path import normpath, join, dirname, abspath import sys toplevel = normpath(join(dirname(abspath(__file__)), "..", "..")) sys.path.insert(0, toplevel) from rabbitvcs.util.extensions.nautilus import RabbitVCS import rabbitvcs import pysvn from . import nautilus import traceback from unittest import TestCase, main # make sure the current working copy is in sys.path before anything else from os.path import abspath, dirname, join, normpath import sys class RabbitVCSTest(TestCase): """ Main RabbitVCS tests. """ def test_package_name(self): """Make sure the package name is reported properly.""" result = rabbitvcs.package_name() self.assertEqual(result, "rabbitvcs") def test_package_version(self): """Make sure the package version is reported properly.""" result = rabbitvcs.package_version() for character in result: if not (character.isdigit() or character == "."): self.fail( "Not all characters in package version " "'%s' were digits or dots." % result ) def test_package_identifier(self): """Make sure the package identifier is reported properly.""" result = rabbitvcs.package_identifier() version = rabbitvcs.package_version() self.assertEqual(result, "rabbitvcs-%s" % version) class FakeVersion(object): """ Fake revision info for FakeInfo, below. """ def __init__(self, number): self.number = number class FakeInfo(object): """ Fake pysvn.Client.info() response. """ def __init__(self): self.data = { "text_status": pysvn.wc_status_kind.none, "commit_revision": FakeVersion(1234), "commit_author": None, "commit_time": 0.0, "url": None, } class FakeClient(object): """ Fake pysvn.Client that can have its behavior controlled. """ instance_count = 0 send_empty_info = True def __init__(self, *args, **kwargs): FakeClient.instance_count += 1 def info(self, path): if self.send_empty_info: return None else: return FakeInfo() def status(self, path, recurse=False): """Return a fake status, as a list.""" return [FakeInfo()] class FakeLog(object): """ Fake logger that allows us to pick the log messages out from within unit tests. """ def __init__(self, prefix): self.prefix = prefix self.messages = [] def exception(self): """ Log an exception. Just add the (exc_type, message, traceback) tuple onto the list of messages. """ info = sys.exc_info() self.messages.append(info) class RabbitVCSPySvnTest(TestCase): """ RabbitVCS tests that involve pysvn in such a way that we need to fiddle with pysvn stuff for the tests to work. """ def setUp(self): self.oldClient = pysvn.Client pysvn.Client = FakeClient FakeClient.instance_count = 0 self.oldLog = RabbitVCS.log self.logger = FakeLog("rabbitvcs") RabbitVCS.log = self.logger self.nsvn = RabbitVCS.RabbitVCS() def test_update_columns_missing_info(self): """ Test the behavior of update_columns() when the info() call returns None. See http://code.google.com/p/rabbitvcs/issues/detail?id=119 The desired behavior is that an error message is logged which indicates that the given path is not under source control. """ path = "awesomepath" FakeClient.send_empty_info = True item = nautilus.NautilusVFSFile() self.nsvn.update_columns(item, path) self.assertEqual(FakeClient.instance_count, 2) self.assertEqual(len(self.logger.messages), 1) last_message = self.logger.messages[-1] self.assertEqual( str(last_message[1]), "The path 'awesomepath' does not " "appear to be under source control.", ) def test_update_columns_correct_info(self): """ Test the side effects of update_columns() when things happen normally. """ path = "excellentpath" FakeClient.send_empty_info = False item = nautilus.NautilusVFSFile() self.nsvn.update_columns(item, path) self.assertEqual(FakeClient.instance_count, 2) if len(self.logger.messages) > 0: for e, m, t in self.logger.messages: traceback.print_exception(e, m, t) self.fail() def tearDown(self): RabbitVCS.log = self.oldLog pysvn.Client = self.oldClient if __name__ == "__main__": main() rabbitvcs-0.19/rabbitvcs/ui/000077500000000000000000000000001445560650400160275ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/ui/__init__.py000066400000000000000000000212251445560650400201420ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ UI layer. """ from __future__ import absolute_import import rabbitvcs.vcs.status from rabbitvcs import APP_NAME, LOCALE_DIR, gettext import os from six.moves import range from rabbitvcs.util import helper import gi try: gi.require_version("Gtk", "3.0") except: gi.require_version("Gtk", "4.0") from gi.repository import Gtk, Gdk, GLib sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext REVISION_OPT = (["-r", "--revision"], {"help": "specify the revision number"}) BASEDIR_OPT = (["-b", "--base-dir"], {}) QUIET_OPT = ( ["-q", "--quiet"], { "help": "Run the add command quietly, with no UI.", "action": "store_true", "default": False, }, ) VCS_OPT = (["--vcs"], {"help": "specify the version control system"}) VCS_OPT_ERROR = _( "You must specify a version control system using the --vcs [svn|git] option" ) #: Maps statuses to emblems. STATUS_EMBLEMS = { rabbitvcs.vcs.status.status_normal: "rabbitvcs-normal", rabbitvcs.vcs.status.status_modified: "rabbitvcs-modified", rabbitvcs.vcs.status.status_added: "rabbitvcs-added", rabbitvcs.vcs.status.status_deleted: "rabbitvcs-deleted", rabbitvcs.vcs.status.status_ignored: "rabbitvcs-ignored", rabbitvcs.vcs.status.status_read_only: "rabbitvcs-locked", rabbitvcs.vcs.status.status_locked: "rabbitvcs-locked", rabbitvcs.vcs.status.status_unknown: "rabbitvcs-unknown", rabbitvcs.vcs.status.status_missing: "rabbitvcs-complicated", rabbitvcs.vcs.status.status_replaced: "rabbitvcs-modified", rabbitvcs.vcs.status.status_complicated: "rabbitvcs-complicated", rabbitvcs.vcs.status.status_calculating: "rabbitvcs-calculating", rabbitvcs.vcs.status.status_error: "rabbitvcs-error", rabbitvcs.vcs.status.status_unversioned: "rabbitvcs-unversioned", } class GtkBuilderWidgetWrapper(object): def __init__(self, gtkbuilder_filename=None, gtkbuilder_id=None, claim_domain=True): if gtkbuilder_filename: self.gtkbuilder_filename = gtkbuilder_filename if gtkbuilder_id: self.gtkbuilder_id = gtkbuilder_id self.claim_domain = claim_domain self.tree = self.get_tree() self.tree.connect_signals(self) def get_tree(self): path = "%s/xml/%s.xml" % ( os.path.dirname(os.path.realpath(__file__)), self.gtkbuilder_filename, ) tree = Gtk.Builder() tree.add_from_file(path) if self.claim_domain: tree.set_translation_domain(APP_NAME) return tree def get_widget(self, id=None): if not id: id = self.gtkbuilder_id return self.tree.get_object(id) class InterfaceView(GtkBuilderWidgetWrapper): """ Every ui window should inherit this class and send it the "self" variable, the Gtkbuilder filename (without the extension), and the id of the main window widget. When calling from the __main__ area (i.e. a window is opened via CLI, call the register_gtk_quit method to make sure the main app quits when the app is destroyed or finished. """ def __init__(self, *args, **kwargs): GtkBuilderWidgetWrapper.__init__(self, *args, **kwargs) self.do_gtk_quit = False # On OSX, there is a glitch where GTK applications do not always come to the front # when a launched (and methods like 'present()' don't appear to work correctly). # So until GTK on OSX is fixed let's work around this issue... import platform if platform.system() == "Darwin": try: import subprocess subprocess.Popen( 'osascript -e "tell application \\"Python\\" to activate"', shell=True, ) except: pass def hide(self): window = self.get_widget(self.gtkbuilder_id) if window: window.set_property("visible", False) def show(self): window = self.get_widget(self.gtkbuilder_id) if window: window.set_property("visible", True) def destroy(self): self.close() def close(self, threaded=False): window = self.get_widget(self.gtkbuilder_id) if window is not None: if threaded: helper.run_in_main_thread(window.destroy) else: window.destroy() if self.do_gtk_quit: Gtk.main_quit() def register_gtk_quit(self): window = self.get_widget(self.gtkbuilder_id) self.do_gtk_quit = True # This means we've already been closed if window is None: GLib.idle_add(Gtk.main_quit) def gtk_quit_is_set(self): return self.do_gtk_quit def on_destroy(self, widget): self.destroy() def on_cancel_clicked(self, widget): self.close() def on_close_clicked(self, widget): self.close() def on_refresh_clicked(self, widget): return True def on_key_pressed(self, widget, event, *args): if event.keyval == Gdk.keyval_from_name("Escape"): self.on_cancel_clicked(widget) return True if ( event.state & Gdk.ModifierType.CONTROL_MASK and Gdk.keyval_name(event.keyval).lower() == "w" ): self.on_cancel_clicked(widget) return True if ( event.state & Gdk.ModifierType.CONTROL_MASK and Gdk.keyval_name(event.keyval).lower() == "q" ): self.on_cancel_clicked(widget) return True if ( event.state & Gdk.ModifierType.CONTROL_MASK and Gdk.keyval_name(event.keyval).lower() == "r" ): self.on_refresh_clicked(widget) return True def change_button(self, id, label=None, icon=None): """ Replace label and/or icon of the named button. """ button = self.get_widget(id) if label: button.set_label(label) if icon: image = Gtk.Image.new_from_icon_name(icon, Gtk.IconSize.BUTTON) button.set_image(image) class InterfaceNonView(object): """ Provides a way for an interface to handle quitting, etc without having to have a visible interface. """ def __init__(self): self.do_gtk_quit = False def close(self): if self.do_gtk_quit: if not Gtk.main_level(): GLib.idle_add(Gtk.main_quit) self.do_gtk_quit = False else: try: Gtk.main_quit() except RuntimeError: raise SystemExit() def register_gtk_quit(self): self.do_gtk_quit = True def gtk_quit_is_set(self): return self.do_gtk_quit class VCSNotSupportedError(Exception): """Indicates the desired VCS is not valid for a given action""" def __init__(self, *args, **kwargs): Exception.__init__(self, *args, **kwargs) def main(allowed_options=None, description=None, usage=None): from os import getcwd from sys import argv from optparse import OptionParser from rabbitvcs.util.helper import get_common_directory parser = OptionParser(usage=usage, description=description) if allowed_options: for (option_args, option_kwargs) in allowed_options: parser.add_option(*option_args, **option_kwargs) (options, args) = parser.parse_args(argv) # Convert "." to current working directory paths = args[1:] for i in range(0, len(paths)): if paths[i] == ".": paths[i] = getcwd() if not paths: paths = [getcwd()] if parser.has_option("--base-dir") and not options.base_dir: options.base_dir = get_common_directory(paths) return (options, paths) rabbitvcs-0.19/rabbitvcs/ui/about.py000066400000000000000000000067541445560650400175270ustar00rootroot00000000000000from __future__ import absolute_import from six.moves import map from rabbitvcs import gettext import configobj import pysvn import rabbitvcs.ui.widget from rabbitvcs.ui import InterfaceView import rabbitvcs from gi.repository import Gtk, GObject, GdkPixbuf import gi from rabbitvcs.util import helper import re import string import os.path # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # license = """\ RabbitVCS is free software; you can 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. RabbitVCS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with RabbitVCS; If not, see . """ gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class About(object): """ This class provides an interface to the About window. """ def __init__(self): self.about = Gtk.AboutDialog() self.about.set_name(rabbitvcs.APP_NAME) self.about.set_program_name(rabbitvcs.APP_NAME) self.about.set_version(rabbitvcs.version) self.about.set_website("http://www.rabbitvcs.org") self.about.set_website_label("http://www.rabbitvcs.org") doc_path_root = "/usr/share/doc" doc_path_regex = re.compile("rabbitvcs") authors_path = None for dir in os.listdir(doc_path_root): if doc_path_regex.search(dir): # Find all the doc directories containing "rabbitvcs" tmp_authors_path = os.path.join(doc_path_root, dir, "AUTHORS") if os.path.exists(tmp_authors_path): authors_path = tmp_authors_path # At this point we have found a likely-looking AUTHORS break if not authors_path: # Assumes the user is running RabbitVCS through an svn checkout # and the doc files are two directories up (from rabbitvcs/ui). doc_path = os.path.dirname(os.path.realpath(__file__)).split("/") doc_path = "/".join(doc_path[:-2]) authors_path = os.path.join(doc_path, "AUTHORS") authors = open(authors_path, "r").read() self.about.set_authors(authors.split("\n")) pixbuf = GdkPixbuf.Pixbuf.new_from_file( rabbitvcs.get_icon_path() + "/scalable/apps/rabbitvcs.svg" ) self.about.set_logo(pixbuf) versions = [] versions.append("Subversion - %s" % ".".join(list(map(str, pysvn.svn_version)))) versions.append("Pysvn - %s" % ".".join(list(map(str, pysvn.version)))) versions.append("ConfigObj - %s" % str(configobj.__version__)) self.about.set_comments("\n".join(versions)) self.about.set_license(license) def run(self): self.about.show_all() self.about.run() self.about.destroy() if __name__ == "__main__": window = About() window.run() rabbitvcs-0.19/rabbitvcs/ui/action.py000066400000000000000000000570131445560650400176640ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from __future__ import division, absolute_import from rabbitvcs.util.log import Log from rabbitvcs import gettext from rabbitvcs.util.decorators import gtk_unsafe from rabbitvcs.ui.dialog import MessageBox from rabbitvcs.util.strings import S from rabbitvcs.util import helper import rabbitvcs.vcs import rabbitvcs.util import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk import threading from os.path import basename import shutil import gi gi.require_version("Gtk", "3.0") _ = gettext.gettext helper.gobject_threads_init() log = Log("rabbitvcs.ui.action") class VCSNotifier(InterfaceView): """ Provides a base class to handle threaded/gtk_unsafe calls to our vcs """ def __init__(self, callback_cancel=None, visible=True): InterfaceView.__init__(self) if visible: self.show() self.callback_cancel = callback_cancel self.was_canceled_by_user = False self.canceled = False def set_canceled_by_user(self, was_canceled_by_user): self.was_canceled_by_user = was_canceled_by_user def toggle_ok_button(self, sensitive): pass def append(self, entry): pass def focus_on_ok_button(self): pass class DummyNotifier(object): def __init__(self): pass def close(self): pass def set_canceled_by_user(self, was_canceled_by_user): pass @gtk_unsafe def exception_callback(self, e): log.exception(e) MessageBox(str(e)) class MessageCallbackNotifier(VCSNotifier): """ Provides an interface to handle the Notification UI. """ gtkbuilder_filename = "notification" gtkbuilder_id = "Notification" def __init__(self, callback_cancel=None, visible=True, client_in_same_thread=True): """ @type callback_cancel: def @param callback_cancel: A method to call when cancel button is clicked. @type visible: boolean @param visible: Show the notification window. Defaults to True. """ VCSNotifier.__init__(self, callback_cancel, visible) self.client_in_same_thread = client_in_same_thread self.table = rabbitvcs.ui.widget.Table( self.get_widget("table"), [GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING], [_("Action"), _("Path"), _("Mime Type")], ) self.pbar = rabbitvcs.ui.widget.ProgressBar(self.get_widget("pbar")) self.pbar.start_pulsate() self.finished = False def on_destroy(self, widget): if self.callback_cancel is not None: self.callback_cancel() self.canceled = True self.close() def on_cancel_clicked(self, widget): if self.canceled or self.finished: self.close() if self.callback_cancel is not None: self.callback_cancel() self.canceled = True def on_ok_clicked(self, widget): self.close() @gtk_unsafe def toggle_ok_button(self, sensitive): self.finished = True self.get_widget("ok").set_sensitive(sensitive) self.get_widget("saveas").set_sensitive(sensitive) @gtk_unsafe def append(self, entry): self.table.append(entry) self.table.scroll_to_bottom() def get_title(self): return self.get_widget("Notification").get_title() @gtk_unsafe def set_title(self, title): self.get_widget("Notification").set_title(title) @gtk_unsafe def set_header(self, header): self.set_title(header) self.get_widget("action").set_markup( '%s' % header ) @gtk_unsafe def focus_on_ok_button(self): self.get_widget("ok").grab_focus() def exception_callback(self, e): self.append(["", str(e), ""]) def on_saveas_clicked(self, widget): self.saveas() @gtk_unsafe def enable_saveas(self): self.get_widget("saveas").set_sensitive(True) @gtk_unsafe def disable_saveas(self): self.get_widget("saveas").set_sensitive(False) def saveas(self, path=None): if path is None: from rabbitvcs.ui.dialog import FileSaveAs dialog = FileSaveAs() path = dialog.run() if path is not None: fh = open(path, "w") fh.write(self.table.generate_string_from_data()) fh.close() class LoadingNotifier(VCSNotifier): gtkbuilder_filename = "dialogs/loading" gtkbuilder_id = "Loading" def __init__(self, callback_cancel=None, visible=True): VCSNotifier.__init__(self, callback_cancel, visible) self.pbar = rabbitvcs.ui.widget.ProgressBar(self.get_widget("pbar")) self.pbar.start_pulsate() def on_destroy(self, widget): self.close() def on_loading_cancel_clicked(self, widget): self.set_canceled_by_user(True) if self.callback_cancel is not None: self.callback_cancel() self.close() def get_title(self): return self.get_widget("Loading").get_title() @gtk_unsafe def set_title(self, title): self.get_widget("Loading").set_title(title) def set_header(self, header): self.set_title(header) @gtk_unsafe def exception_callback(self, e): if not self.was_canceled_by_user: log.exception(e) MessageBox(str(e)) class VCSAction(threading.Thread): """ Provides a central interface to handle vcs actions & callbacks. Loads UI elements that require user interaction. """ def __init__( self, client, register_gtk_quit=False, notification=True, run_in_thread=True ): self.run_in_thread = run_in_thread if run_in_thread is True: threading.Thread.__init__(self) self.message = None self.queue = rabbitvcs.util.FunctionQueue() self.login_tries = 0 self.cancel = False self.has_loader = False self.has_notifier = False if notification: self.notification = MessageCallbackNotifier( self.set_cancel, notification, client_in_same_thread=self.client_in_same_thread, ) self.has_notifier = True elif run_in_thread: visible = run_in_thread self.notification = LoadingNotifier(self.set_cancel, visible=visible) self.has_loader = True else: self.notification = DummyNotifier() self.pbar_ticks = None self.pbar_ticks_current = -1 # Tells the notification window to do a Gtk.main_quit() when closing # Is used when the script is run from a command line if register_gtk_quit: self.notification.register_gtk_quit() def schedule(self): if self.run_in_thread: self.start() else: self.run() def set_pbar_ticks(self, num): """ Set the total number of ticks to represent in the progress bar. Each time the notify method is called, update the pbar fraction. If this function isn't called, the progress bar just pulsates. @type num: integer @param num: The number of ticks in the progress bar. """ self.pbar_ticks = num def set_progress_fraction(self, fraction): """ An alternative method to access the progress bar directly. @type percentage: int @param percentage: The percentage value to set the progress bar. """ if self.has_notifier: self.notification.pbar.update(fraction) def set_header(self, header): self.notification.set_header(header) def cancel(self): """ PySVN calls this callback method frequently to see if the user wants to cancel the action. If self.cancel is True, then it will cancel the action. If self.cancel is False, it will continue. """ return self.cancel def set_cancel(self, cancel=True): """ Used as a callback function by the Notification UI. When the cancel button is clicked, it sets self.cancel to True, and the cancel callback method returns True. """ self.cancel = cancel self.notification.set_canceled_by_user(True) self.queue.cancel_queue() def finish(self, message=None): """ This is called when the final notifcation message has been received, or it is called manually when no final notification message is expected. It sets the current "status", and enables the OK button to allow the user to leave the window. @type message: string @param message: A message to show the user. """ if self.has_notifier: self.notification.append(["", _("Finished"), ""]) self.notification.focus_on_ok_button() title = self.notification.get_title() self.notification.set_title(_("%s - Finished") % title) self.set_status(message) self.notification.pbar.stop_pulsate() self.notification.pbar.update(1) self.notification.toggle_ok_button(True) def get_log_message(self): """ A callback method that retrieves a supplied log message. Returns a list where the first element is True/False. Returning true tells the action to continue, false tells it to cancel. The second element is the log message, which is specified by self.message. self.message is set by calling the self.set_log_message() method from the UI interface class. @rtype: (boolean, string) @return: (True=continue/False=cancel, log message) """ should_continue = True message = self.message if message is None: settings = rabbitvcs.util.settings.SettingsManager() message = settings.get_multiline("general", "default_commit_message") result = helper.run_in_main_thread( lambda: rabbitvcs.ui.dialog.TextChange(_("Log Message"), message).run() ) should_continue = result[0] == Gtk.ResponseType.OK message = result[1] if isinstance(message, bytes): message = message.decode() if not should_continue: self.set_cancel() return should_continue, message def get_login(self, realm, username, may_save): """ A callback method that requests a username/password to login to a password-protected repository. This method runs the Authentication dialog, which provides a username, password, and saving widget. The dialog returns a tuple, which is returned directly to the VCS caller. If the login fails greater than three times, cancel the action. The dialog must be called from within a threaded block, otherwise it will not be responsive. @type realm: string @param realm: The realm of the repository. @type username: string @param username: Username passed by the vcs caller. @type may_save: boolean @param may_save: Whether or not the authentication can be saved. @rtype: (boolean, string, string, boolean) @return: (True=continue/False=cancel, username,password, may_save) """ if self.login_tries >= 3: return (False, "", "", False) result = helper.run_in_main_thread( lambda: rabbitvcs.ui.dialog.Authentication(realm, may_save).run() ) if result is not None: self.login_tries += 1 return result def get_ssl_trust(self, data): """ A callback method that requires the user to either accept or deny a certificate from an ssl secured repository. It opens a dialog that shows the user information about the ssl certificate and then gives them the option of denying, accepting, or accepting once. The dialog must be called from within a threaded block, otherwise it will not be responsive. @type data: dictionary @param data: A dictionary with SSL certificate info. @rtype: (boolean, int, boolean) @return: (True=Accept/False=Deny, number of accepted failures, remember) """ result = 0 if data: result = helper.run_in_main_thread( lambda: rabbitvcs.ui.dialog.Certificate( data["realm"], data["hostname"], data["issuer_dname"], data["valid_from"], data["valid_until"], data["finger_print"], ).run() ) if result == 0: # Deny return (False, 0, False) elif result == 1: # Accept Once return (True, data["failures"], False) elif result == 2: # Accept Forever return (True, data["failures"], True) def get_ssl_password(self, realm, may_save): """ A callback method that is used to get an ssl certificate passphrase. The dialog must be called from within a threaded block, otherwise it will not be responsive. @type realm: string @param realm: The certificate realm. @type may_save: boolean @param may_save: Whether or not the passphrase can be saved. @rtype: (boolean, string, boolean) @return: (True=continue/False=cancel, password, may save) """ return helper.run_in_main_thread( lambda: rabbitvcs.ui.dialog.CertAuthentication(realm, may_save).run() ) def get_client_cert(self, realm, may_save): """ A callback method that is used to get an ssl certificate. The dialog must be called from within a threaded block, otherwise it will not be responsive. @type realm: string @param realm: The certificate realm. @type may_save: boolean @param may_save: Whether or not the passphrase can be saved. @rtype: (boolean, string, boolean) @return: (True=continue/False=cancel, password, may save) """ return helper.run_in_main_thread( lambda: rabbitvcs.ui.dialog.SSLClientCertPrompt(realm, may_save).run() ) def set_log_message(self, message): """ Set this action's log message from the UI interface. self.message is referred to when the VCS does the get_log_message callback. @type message: string @param message: Set a log message. """ self.message = message @gtk_unsafe def set_status(self, message): """ Set the current status of the VCS action. Currently, this method is called at the beginning and end of each action, to display what is going on. Currently, it just appends the status message to the notification window. In the future, I may set up a progress bar and put the status message there. @type message: string @param message: A status message. """ if message is not None: self.notification.get_widget("status").set_text(S(message).display()) def append(self, func, *args, **kwargs): """ Append a function call to the action queue. """ self.queue.append(func, *args, **kwargs) def get_result(self, index): """ Retrieve the result of a single function call by specifying the order in which the function was in the queue. @type index: int @param index: The queue index """ return self.queue.get_result(index) def __queue_exception_callback(self, e): """ Used internally when an exception is raised within the queue @type e: Exception @param e: The exception object passed by the FunctionQueue """ self.notification.exception_callback(e) if self.has_notifier: self.finish() if self.has_loader: self.stop() def stop(self): if self.notification: self.notification.close() def run(self): """ The central method that drives this class. It runs the before and after methods, as well as the main vcs method. """ if self.has_loader: self.queue.append(self.notification.close, threaded=True) self.queue.set_exception_callback(self.__queue_exception_callback) self.queue.start() def run_single(self, func, *args, **kwargs): try: try: returner = func(*args, **kwargs) except Exception as e: self.__queue_exception_callback(e) returner = None finally: self.stop() return returner def stop_loader(self): self.stop() class SVNAction(VCSAction): def __init__( self, client, register_gtk_quit=False, notification=True, run_in_thread=True ): self.client_in_same_thread = False self.client = client self.client.set_callback_cancel(self.cancel) self.client.set_callback_notify(self.notify) self.client.set_callback_get_log_message(self.get_log_message) self.client.set_callback_get_login(self.get_login) self.client.set_callback_ssl_server_trust_prompt(self.get_ssl_trust) self.client.set_callback_ssl_client_cert_password_prompt(self.get_ssl_password) self.client.set_callback_ssl_client_cert_prompt(self.get_client_cert) VCSAction.__init__(self, client, register_gtk_quit, notification, run_in_thread) def notify(self, data): """ This method is called every time the VCS function wants to tell us something. It passes us a dictionary of useful information. When this method is called, it appends some useful data to the notifcation window. TODO: We need to implement this in a more VCS-agnostic way, since the supplied data dictionary is pysvn-dependent. I'm going to implement something in lib/vcs/svn.py soon. """ if self.has_notifier: self.conflict_filter(data) if self.pbar_ticks is not None: self.pbar_ticks_current += 1 frac = self.pbar_ticks_current / self.pbar_ticks if frac > 1: frac = 1 self.notification.pbar.update(frac) is_known_action = False if data["action"] in self.client.NOTIFY_ACTIONS: action = self.client.NOTIFY_ACTIONS[data["action"]] is_known_action = True else: action = data["action"] # Determine if this action denotes completedness is_complete_action = False for item in self.client.NOTIFY_ACTIONS_COMPLETE: if str(data["action"]) == str(item): is_complete_action = True break if ( is_known_action and is_complete_action and "revision" in data and data["revision"] ): self.notification.append( ["", "Revision %s" % data["revision"].number, ""] ) elif "path" in data: self.notification.append([action, data["path"], data["mime_type"]]) def conflict_filter(self, data): if "content_state" in data and str(data["content_state"]) == "conflicted": position = self.queue.get_position() self.queue.insert(position + 1, self.edit_conflict, data) def edit_conflict(self, data): helper.launch_ui_window("editconflicts", [data["path"]], block=True) class GitAction(VCSAction): def __init__( self, client, register_gtk_quit=False, notification=True, run_in_thread=True ): self.client_in_same_thread = True self.client = client VCSAction.__init__(self, client, register_gtk_quit, notification, run_in_thread) self.client.set_callback_notify(self.notify) self.client.set_callback_progress_update(self.set_progress_fraction) self.client.set_callback_get_user(self.get_user) self.client.set_callback_get_cancel(self.cancel) def notify(self, data): if self.has_notifier: if data: self.conflict_filter(data) if isinstance(data, dict): self.notification.append( [data["action"], data["path"], data["mime_type"]] ) else: self.notification.append(["", data, ""]) def get_user(self): return helper.run_in_main_thread( lambda: rabbitvcs.ui.dialog.NameEmailPrompt().run() ) def conflict_filter(self, data): if str(data).startswith("ERROR:"): path = data[27:] helper.launch_ui_window("editconflicts", [path], block=True) class MercurialAction(VCSAction): def __init__( self, client, register_gtk_quit=False, notification=True, run_in_thread=True ): self.client_in_same_thread = True self.client = client self.client.set_callback_notify(self.notify) self.client.set_callback_get_user(self.get_user) self.client.set_callback_get_cancel(self.cancel) VCSAction.__init__(self, client, register_gtk_quit, notification, run_in_thread) def notify(self, data): if self.has_notifier: if data: self.conflict_filter(data) if isinstance(data, dict): self.notification.append( [data["action"], data["path"], data["mime_type"]] ) else: self.notification.append(["", data, ""]) def get_user(self): return helper.run_in_main_thread( lambda: rabbitvcs.ui.dialog.NameEmailPrompt().run() ) def conflict_filter(self, data): if str(data).startswith("ERROR:"): path = data[27:] helper.launch_ui_window("editconflicts", [path], block=True) def vcs_action_factory( client, register_gtk_quit=False, notification=True, run_in_thread=True ): if client.vcs == rabbitvcs.vcs.VCS_GIT: return GitAction(client, register_gtk_quit, notification, run_in_thread) else: return SVNAction(client, register_gtk_quit, notification, run_in_thread) rabbitvcs-0.19/rabbitvcs/ui/add.py000066400000000000000000000220511445560650400171310ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.vcs.status import Status from rabbitvcs.util.log import Log import rabbitvcs.vcs from rabbitvcs.util.strings import S import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.util.contextmenu import GtkFilesContextMenu, GtkContextMenuCaller from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import six.moves._thread from time import sleep from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.add") _ = gettext.gettext helper.gobject_threads_init() class Add(InterfaceView, GtkContextMenuCaller): """ Provides an interface for the user to add unversioned files to a repository. Also, provides a context menu with some extra functionality. Send a list of paths to be added """ TOGGLE_ALL = True def __init__(self, paths, base_dir=None): InterfaceView.__init__(self, "add", "Add") self.paths = paths self.base_dir = base_dir self.last_row_clicked = None self.vcs = rabbitvcs.vcs.VCS() self.items = [] self.show_ignored = False # TODO Remove this when there is svn support for path in paths: if rabbitvcs.vcs.guess(path)["vcs"] == rabbitvcs.vcs.VCS_SVN: self.get_widget("show_ignored").set_sensitive(False) columns = [ [ GObject.TYPE_BOOLEAN, rabbitvcs.ui.widget.TYPE_HIDDEN_OBJECT, rabbitvcs.ui.widget.TYPE_PATH, GObject.TYPE_STRING, ], [rabbitvcs.ui.widget.TOGGLE_BUTTON, "", _("Path"), _("Extension")], ] self.setup(self.get_widget("Add"), columns) self.files_table = rabbitvcs.ui.widget.Table( self.get_widget("files_table"), columns[0], columns[1], filters=[ { "callback": rabbitvcs.ui.widget.path_filter, "user_data": {"base_dir": base_dir, "column": 2}, } ], callbacks={ "row-activated": self.on_files_table_row_activated, "mouse-event": self.on_files_table_mouse_event, "key-event": self.on_files_table_key_event, }, ) self.initialize_items() def setup(self, window, columns): self.statuses = self.vcs.statuses_for_add(self.paths) # # Helpers # def load(self): status = self.get_widget("status") helper.run_in_main_thread(status.set_text, _("Loading...")) self.items = self.vcs.get_items(self.paths, self.statuses) if self.show_ignored: for path in self.paths: # TODO Refactor # TODO SVN support # TODO Further fix ignore patterns if rabbitvcs.vcs.guess(path)["vcs"] == rabbitvcs.vcs.VCS_GIT: git = self.vcs.git(path) for ignored_path in git.client.get_all_ignore_file_paths(path): should_add = True for item in self.items: if item.path == os.path.realpath(ignored_path): should_add = False if should_add: self.items.append( Status(os.path.realpath(ignored_path), "unversioned") ) self.populate_files_table() helper.run_in_main_thread( status.set_text, _("Found %d item(s)") % len(self.items) ) def populate_files_table(self): self.files_table.clear() for item in self.items: self.files_table.append( [True, S(item.path), item.path, helper.get_file_extension(item.path)] ) def toggle_ignored(self): self.show_ignored = not self.show_ignored self.initialize_items() # Overrides the GtkContextMenuCaller method def on_context_menu_command_finished(self): self.initialize_items() def initialize_items(self): """ Initializes the activated cache and loads the file items in a new thread """ try: six.moves._thread.start_new_thread(self.load, ()) except Exception as e: log.exception(e) def delete_items(self, widget, event): paths = self.files_table.get_selected_row_items(1) if len(paths) > 0: proc = helper.launch_ui_window("delete", paths) self.rescan_after_process_exit(proc, paths) # # UI Signal Callbacks # def on_select_all_toggled(self, widget): self.TOGGLE_ALL = not self.TOGGLE_ALL for row in self.files_table.get_items(): row[0] = self.TOGGLE_ALL def on_show_ignored_toggled(self, widget): self.toggle_ignored() def on_files_table_row_activated(self, treeview, event, col): paths = self.files_table.get_selected_row_items(1) helper.launch_diff_tool(*paths) def on_files_table_key_event(self, treeview, event, *args): if Gdk.keyval_name(event.keyval) == "Delete": self.delete_items(treeview, event) def on_files_table_mouse_event(self, treeview, event, *args): if event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE: self.show_files_table_popup_menu(treeview, event) def show_files_table_popup_menu(self, treeview, event): paths = self.files_table.get_selected_row_items(1) GtkFilesContextMenu(self, event, self.base_dir, paths).show() class SVNAdd(Add): def __init__(self, paths, base_dir=None): Add.__init__(self, paths, base_dir) self.svn = self.vcs.svn() def on_ok_clicked(self, widget): items = self.files_table.get_activated_rows(1) if not items: self.close() return self.hide() self.action = rabbitvcs.ui.action.SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Add")) self.action.append(self.action.set_status, _("Running Add Command...")) self.action.append(self.svn.add, items) self.action.append(self.action.set_status, _("Completed Add")) self.action.append(self.action.finish) self.action.schedule() class GitAdd(Add): def __init__(self, paths, base_dir=None): Add.__init__(self, paths, base_dir) self.git = self.vcs.git(paths[0]) def on_ok_clicked(self, widget): items = self.files_table.get_activated_rows(1) if not items: self.close() return self.hide() self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Add")) self.action.append(self.action.set_status, _("Running Add Command...")) self.action.append(self.git.add, items) self.action.append(self.action.set_status, _("Completed Add")) self.action.append(self.action.finish) self.action.schedule() classes_map = {rabbitvcs.vcs.VCS_SVN: SVNAdd, rabbitvcs.vcs.VCS_GIT: GitAdd} def add_factory(paths, base_dir): guess = rabbitvcs.vcs.guess(paths[0]) return classes_map[guess["vcs"]](paths, base_dir) class AddQuiet(object): def __init__(self, paths): self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() self.action = rabbitvcs.ui.action.SVNAction(self.svn) self.action.append(self.svn.add, paths) self.action.schedule() if __name__ == "__main__": from rabbitvcs.ui import main, BASEDIR_OPT, QUIET_OPT (options, paths) = main( [BASEDIR_OPT, QUIET_OPT], usage="Usage: rabbitvcs add [path1] [path2] ..." ) if options.quiet: AddQuiet(paths) else: # Add(paths, options.base_dir) window = add_factory(paths, options.base_dir) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/annotate.py000066400000000000000000000705171445560650400202240ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs.util.log import Log from rabbitvcs import gettext import rabbitvcs.vcs from rabbitvcs.util.settings import SettingsManager from rabbitvcs.util.highlighter import highlight from rabbitvcs.util.decorators import gtk_unsafe from rabbitvcs.util.strings import S from rabbitvcs.util.contextmenuitems import * from rabbitvcs.util.contextmenu import GtkContextMenu from rabbitvcs.ui.dialog import MessageBox, Loading from rabbitvcs.ui.widget import Clickable, Table, TYPE_MARKUP, TYPE_HIDDEN from rabbitvcs.ui.action import SVNAction, GitAction from rabbitvcs.ui.log import log_dialog_factory from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk, GLib # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os from datetime import datetime import time from random import random, uniform from rabbitvcs.util import helper from gi import require_version require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext logger = Log("rabbitvcs.ui.annotate") LUMINANCE = 0.90 class Annotate(InterfaceView): """ Provides a UI interface to annotate items in the repository or working copy. Pass a single path to the class when initializing """ def __init__(self, path, revision=None): if os.path.isdir(path): MessageBox(_("Cannot annotate a directory")) raise SystemExit() return InterfaceView.__init__(self, "annotate", "Annotate") self.get_widget("Annotate").set_title(_("Annotate - %s") % path) self.vcs = rabbitvcs.vcs.VCS() sm = SettingsManager() self.datetime_format = sm.get("general", "datetime_format") self.colorize = sm.get("general", "enable_colorize") self.log_by_order = [] self.log_by_revision = {} self.author_background = {} self.history = [revision or "HEAD"] self.history_index = 0 self.loading_dialog = None self.table = self.build_table() self.revision = self.get_widget("revision") self.history_first = Clickable(self.get_widget("history_first")) self.history_prev = Clickable(self.get_widget("history_prev")) self.history_next = Clickable(self.get_widget("history_next")) self.history_last = Clickable(self.get_widget("history_last")) self.history_first.connect("single-click", self.on_history_first) self.history_prev.connect("single-click", self.on_history_prev) self.history_prev.connect("long-click", self.history_popup_menu) self.history_next.connect("single-click", self.on_history_next) self.history_next.connect("long-click", self.history_popup_menu) self.history_last.connect("single-click", self.on_history_last) self.set_history_sensitive() def build_table(self): treeview = self.get_widget("table") table = Table( treeview, [ GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, TYPE_MARKUP, TYPE_HIDDEN, TYPE_HIDDEN, ], [ _("Revision"), _("Author"), _("Date"), _("Line"), _("Text"), "revision color", "author color", ], callbacks={"mouse-event": self.on_annotate_table_mouse_event}, ) table.allow_multiple() table.get_column(3).get_cells()[0].set_property("xalign", 1.0) treeview.connect("query-tooltip", self.on_query_tooltip, (0, (0, 1, 2))) treeview.set_has_tooltip(True) if self.colorize: for i, n in [(1, 6), (4, 5)]: column = table.get_column(i) cell = column.get_cells()[0] column.add_attribute(cell, "background", n) return table def on_close_clicked(self, widget): self.close() def on_save_clicked(self, widget): self.save() def on_revision_focus_out_event(self, widget, event, data=None): self.show_revision(widget.get_text()) def on_revision_key_press_event(self, widget, event, data=None): if event.state == 0 and Gdk.keyval_name(event.keyval) == "Return": self.show_revision(widget.get_text()) return False def on_show_log_clicked(self, widget, data=None): log_dialog_factory(self.path, ok_callback=self.on_log_closed) def on_log_closed(self, data): if data: self.show_revision(data) def on_annotate_table_mouse_event(self, treeview, event, data=None): if event.button == 1: if event.type == Gdk.EventType._2BUTTON_PRESS: revisions = self.table.get_selected_row_items(0) if len(revisions) == 1: if revisions[0]: self.show_revision(revisions[0]) elif event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE: self.show_annotate_table_popup_menu(treeview, event, data) def on_query_tooltip(self, treeview, x, y, kbdmode, tooltip, data=None): if kbdmode: return False try: position, enabled_columns = data enabled_columns[0] except (TypeError, ValueError, IndexError): return False bx, by = treeview.convert_widget_to_bin_window_coords(x, y) t = treeview.get_path_at_pos(bx, by) if t is None: return False path, column, cellx, celly = t columns = treeview.get_columns() try: pos = columns.index(column) except ValueError: return False if not pos in enabled_columns: return False revision = treeview.get_model()[path][position] if not revision: return False revision = str(revision) if not revision in self.log_by_revision: return False log = self.log_by_revision[revision] message = helper.format_long_text(log.message, line1only=True) if not message: return False tooltip.set_text(S(message).display()) treeview.set_tooltip_cell(tooltip, path) return True def on_history_first(self, clickable, widget, event, *args): forceload = self.history[self.history_index] != self.history[0] self.history_index = 0 self.show_revision(forceload=forceload) def on_history_prev(self, clickable, widget, event, *args): forceload = ( self.history[self.history_index] != self.history[self.history_index - 1] ) self.history_index -= 1 self.show_revision(forceload=forceload) def on_history_next(self, clickable, widget, event, *args): forceload = ( self.history[self.history_index] != self.history[self.history_index + 1] ) self.history_index += 1 self.show_revision(forceload=forceload) def on_history_last(self, clickable, widget, event, *args): forceload = self.history[self.history_index] != self.history[-1] self.history_index = len(self.history) - 1 self.show_revision(forceload=forceload) def history_popup_menu(self, clickable, widget, event, *args): menu = Gtk.Menu() width = 0 for i, revision in list(enumerate(self.history))[: self.history_index + 6][ -11: ]: message = "" revision = self.short_revision(revision) if revision in self.log_by_revision: log = self.log_by_revision[revision] message = helper.format_long_text(log.message, cols=32, line1only=True) revision = helper.html_escape(revision) message = helper.html_escape(message) if i == self.history_index: revision = "" + revision + "" message = "" + message + "" row = Gtk.Grid() cell1 = Gtk.Label() cell1.set_properties(xalign=0, yalign=0.5) cell1.set_markup(revision) row.attach(cell1, 0, 0, 1, 1) cell2 = Gtk.Label() cell2.set_properties(xalign=0, yalign=0.5) cell2.set_markup(message) row.attach(cell2, 1, 0, 1, 1) menuitem = Gtk.MenuItem() menuitem.add(row) menuitem.connect("activate", self.on_history_menu_activate, i) menu.add(menuitem) menu.show_all() menu.popup_at_pointer(event) for menuitem in menu.get_children(): w = menuitem.get_child().get_child_at(0, 0).get_allocation().width if width < w: width = w width += 4 for menuitem in menu.get_children(): menuitem.get_child().get_child_at(0, 0).set_size_request(width, -1) def on_history_menu_activate(self, menu, index): forceload = self.history[self.history_index] != self.history[index] self.history_index = index self.show_revision(forceload=forceload) def set_history_sensitive(self): self.history_first.set_sensitive(self.history_index > 0) self.history_prev.set_sensitive(self.history_index > 0) last = len(self.history) - 1 self.history_next.set_sensitive(self.history_index < last) self.history_last.set_sensitive(self.history_index < last) def show_revision(self, revision=None, forceload=False): if revision is None: revision = self.history[self.history_index] revision = S(S(revision).strip()) self.revision.set_text(revision.display()) if revision.lower() != self.history[self.history_index].lower(): forceload = True self.history_index += 1 self.history = self.history[: self.history_index] + [revision] self.set_history_sensitive() if forceload: self.load(revision) def enable_saveas(self): self.get_widget("save").set_sensitive(True) def disable_saveas(self): self.get_widget("save").set_sensitive(False) def save(self, path=None): if path is None: from rabbitvcs.ui.dialog import FileSaveAs dialog = FileSaveAs() path = dialog.run() if path is not None: fh = open(path, "w") fh.write(self.generate_string_from_result()) fh.close() def launch_loading(self): self.loading_dialog = Loading() GLib.idle_add(self.loading_dialog.run) def kill_loading(self): GLib.idle_add(self.loading_dialog.destroy) def show_annotate_table_popup_menu(self, treeview, event, data): revisions = list(set(self.table.get_selected_row_items(0))) AnnotateContextMenu(self, event, self.path, revisions).show() def set_log(self): self.log_by_order = self.action.get_result(1) self.log_by_order.reverse() self.log_by_revision = {} self.author_background = {} for n, log in enumerate(self.log_by_order): setattr(log, "n", n) c = self.randomHSL() c = helper.HSLtoRGB(*c) setattr(log, "background", helper.html_color(*c)) self.log_by_revision[self.short_revision(log.revision)] = log author = S(log.author.strip()) if author: c = self.randomHSL() c = helper.HSLtoRGB(*c) self.author_background[author] = helper.html_color(*c) def previous_revision(self, revision): revision = self.short_revision(revision) n = self.log_by_revision[revision].n if n: return self.short_revision(self.log_by_order[n - 1].revision) return None def next_revision(self, revision): revision = self.short_revision(revision) n = self.log_by_revision[revision].n if n < len(self.log_by_order) - 1: return self.short_revision(self.log_by_order[n + 1].revision) return None def compare_revision_order(self, rev1, rev2): return self.log_by_revision[rev1].n - self.log_by_revision[rev2].n def randomHSL(self): return (uniform(0.0, 360.0), uniform(0.5, 1.0), LUMINANCE) def get_vcs_name(self): vcs = rabbitvcs.vcs.VCS_DUMMY if hasattr(self, "svn"): vcs = rabbitvcs.vcs.VCS_SVN elif hasattr(self, "git"): vcs = rabbitvcs.vcs.VCS_GIT return vcs class SVNAnnotate(Annotate): def __init__(self, path, revision=None): Annotate.__init__(self, path, revision) self.svn = self.vcs.svn() self.path = path self.show_revision(forceload=True) # # Helper methods # def load(self, revision): revision = revision.lower() rev = self.svn.revision("HEAD") if revision.isdigit(): rev = self.svn.revision("number", number=int(revision)) self.launch_loading() self.action = SVNAction(self.svn, notification=False) self.action.append(self.svn.annotate, self.path, to_revision=rev) if not self.log_by_order: self.action.append(self.svn.log, self.path) self.action.append(self.set_log) self.action.append(self.populate_table) self.action.append(self.enable_saveas) self.action.schedule() self.kill_loading() def blame_info(self, item): revision = item["revision"].number if revision <= 0: return ("", "", "") revision = str(revision) # remove fractional seconds and timezone information from # the end of the string provided by pysvn: # * timezone should be always "Z" (for UTC), "%Z" is not yet # yet supported by strptime # * fractional could be parsed with "%f" since python 2.6 # but this precision is not needed anyway # * the datetime module does not include strptime until python 2.4 # so this workaround is required for now datestr = item["date"][0:-8] try: date = datetime(*time.strptime(datestr, "%Y-%m-%dT%H:%M:%S")[:-2]) date = helper.format_datetime(date, self.datetime_format) except: date = "" return revision, date, S(item["author"].strip()) def populate_table(self): blamedict = self.action.get_result(0) lines = highlight(self.path, [item["line"] for item in blamedict]) self.table.clear() for i, item in enumerate(blamedict): revision, date, author = self.blame_info(item) author_color = self.author_background.get(author, "#FFFFFF") try: revision_color = self.log_by_revision[revision].background except KeyError: revision_color = "#FFFFFF" self.table.append( [ revision, author, date, str(int(item["number"]) + 1), lines[i], revision_color, author_color, ] ) def generate_string_from_result(self): blamedict = self.action.get_result(0) text = "" for item in blamedict: revision, date, author = self.blame_info(item) text += "%s\t%s\t%s\t%s\t%s\n" % ( str(int(item["number"]) + 1), revision, author, date, item["line"], ) return text def short_revision(self, revision): revision = str(revision).lower() return revision if revision != "head" else "HEAD" class GitAnnotate(Annotate): def __init__(self, path, revision=None): Annotate.__init__(self, path, revision) self.git = self.vcs.git(path) self.path = path self.show_revision(forceload=True) # # Helper methods # def launch_loading(self): self.loading_dialog = Loading() GLib.idle_add(self.loading_dialog.run) def kill_loading(self): GLib.idle_add(self.loading_dialog.destroy) def load(self, revision): self.launch_loading() self.action = GitAction(self.git, notification=False) self.action.append(self.git.annotate, self.path, self.git.revision(revision)) if not self.log_by_order: self.action.append(self.git.log, self.path) self.action.append(self.set_log) self.action.append(self.populate_table) self.action.append(self.enable_saveas) self.action.schedule() self.kill_loading() def populate_table(self): blamedict = self.action.get_result(0) lines = highlight(self.path, [item["line"] for item in blamedict]) self.table.clear() for i, item in enumerate(blamedict): revision = item["revision"][:7] author = S(item["author"].strip()) author_color = self.author_background.get(author, "#FFFFFF") try: revision_color = self.log_by_revision[revision].background except KeyError: revision_color = "#FFFFFF" self.table.append( [ revision, author, helper.format_datetime(item["date"], self.datetime_format), str(item["number"]), lines[i], revision_color, author_color, ] ) def generate_string_from_result(self): blamedict = self.action.get_result(0) text = "" for item in blamedict: text += "%s\t%s\t%s\t%s\t%s\n" % ( str(item["number"]), item["revision"][:7], item["author"], helper.format_datetime(item["date"], self.datetime_format), item["line"], ) return text def short_revision(self, revision): revision = str(revision)[:7].lower() return revision if revision != "head" else "HEAD" class MenuShowRevision(MenuItem): identifier = "RabbitVCS::Show_Revision" label = _("Show this revision") tooltip = _("Annotate this file's revision") icon = "rabbitvcs-annotate" class MenuViewRevision(MenuItem): identifier = "RabbitVCS::View_Revision" label = _("Annotate this revision in another window") tooltip = _("Annotate this file's revision in another window") icon = "rabbitvcs-annotate" class MenuShowNextRevision(MenuItem): identifier = "RabbitVCS::Show_Next_Revision" label = _("Show next revision") tooltip = _("Annotate the revision following this one") icon = "rabbitvcs-annotate" class MenuDiffWorkingCopy(MenuItem): identifier = "RabbitVCS::Diff_Working_Copy" label = _("View diff against working copy") tooltip = _("View this revision's diff against working copy") icon = "rabbitvcs-diff" class MenuCompareWorkingCopy(MenuItem): identifier = "RabbitVCS::Compare_Working_Copy" label = _("Compare against working copy") tooltip = _("Compare this revision against working copy") icon = "rabbitvcs-compare" class MenuDiffPreviousRevision(MenuItem): identifier = "RabbitVCS::Diff_Previous_Revision" label = _("View diff against previous revision") tooltip = _("View this revision's diff against previous revision") icon = "rabbitvcs-diff" class MenuComparePreviousRevision(MenuItem): identifier = "RabbitVCS::Compare_Previous_Revision" label = _("Compare against previous revision") tooltip = _("Compare this revision against previous revision") icon = "rabbitvcs-compare" class MenuDiffRevisions(MenuItem): identifier = "RabbitVCS::Diff_Revisions" label = _("View diff between revisions") tooltip = _("View diff between selected revisions") icon = "rabbitvcs-diff" class MenuCompareRevisions(MenuItem): identifier = "RabbitVCS::Compare_Revisions" label = _("Compare revisions") tooltip = _("Compare selected revisions") icon = "rabbitvcs-compare" class AnnotateContextMenuConditions(object): def __init__(self, caller, vcs, path, revisions): self.caller = caller self.vcs = vcs self.path = path self.revisions = revisions self.vcs_name = caller.get_vcs_name() def show_revision(self, data=None): return len(self.revisions) == 1 def view_revision(self, data=None): return len(self.revisions) == 1 def show_next_revision(self, data=None): return ( len(self.revisions) == 1 and not self.caller.next_revision(self.revisions[0]) is None ) def diff_working_copy(self, data=None): return ( self.vcs.is_in_a_or_a_working_copy(self.path) and len(self.revisions) == 1 ) def compare_working_copy(self, data=None): return ( self.vcs.is_in_a_or_a_working_copy(self.path) and len(self.revisions) == 1 ) def diff_previous_revision(self, data=None): return ( self.vcs.is_in_a_or_a_working_copy(self.path) and len(self.revisions) == 1 and not self.caller.previous_revision(self.revisions[0]) is None ) def compare_previous_revision(self, data=None): return ( self.vcs.is_in_a_or_a_working_copy(self.path) and len(self.revisions) == 1 and not self.caller.previous_revision(self.revisions[0]) is None ) def diff_revisions(self, data=None): return ( self.vcs.is_in_a_or_a_working_copy(self.path) and len(self.revisions) == 2 ) def compare_revisions(self, data=None): return ( self.vcs.is_in_a_or_a_working_copy(self.path) and len(self.revisions) == 2 ) class AnnotateContextMenuCallbacks(object): def __init__(self, caller, vcs, path, revisions): self.caller = caller self.vcs = vcs self.path = path self.revisions = revisions self.vcs_name = self.caller.get_vcs_name() def show_revision(self, widget, data=None): self.caller.show_revision(self.revisions[0]) def view_revision(self, widget, data=None): helper.launch_ui_window( "annotate", [ self.path, "--vcs=%s" % self.caller.get_vcs_name(), "-r", self.revisions[0], ], ) def show_next_revision(self, widget, data=None): self.caller.show_revision(self.caller.next_revision(self.revisions[0])) def diff_working_copy(self, widget, data=None): helper.launch_ui_window( "diff", [ "%s@%s" % (self.path, S(self.revisions[0])), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def compare_working_copy(self, widget, data=None): path_older = self.path if self.vcs_name == rabbitvcs.vcs.VCS_SVN: path_older = self.vcs.svn().get_repo_url(self.path) helper.launch_ui_window( "diff", [ "-s", "%s@%s" % (path_older, S(self.revisions[0])), self.path, "--vcs=%s" % self.caller.get_vcs_name(), ], ) def diff_previous_revision(self, widget, data=None): prev = self.caller.previous_revision(self.revisions[0]) helper.launch_ui_window( "diff", [ "%s@%s" % (self.path, S(prev)), "%s@%s" % (self.path, S(self.revisions[0])), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def compare_previous_revision(self, widget, data=None): prev = self.caller.previous_revision(self.revisions[0]) path_older = self.path if self.vcs_name == rabbitvcs.vcs.VCS_SVN: path_older = self.vcs.svn().get_repo_url(self.path) helper.launch_ui_window( "diff", [ "-s", "%s@%s" % (path_older, S(prev)), "%s@%s" % (self.path, S(self.revisions[0])), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def diff_revisions(self, widget, data=None): rev1 = self.revisions[0] rev2 = self.revisions[-1] if self.caller.compare_revision_order(rev1, rev2) > 0: rev1, rev2 = rev2, rev1 helper.launch_ui_window( "diff", [ "%s@%s" % (self.path, S(rev1)), "%s@%s" % (self.path, S(rev2)), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def compare_revisions(self, widget, data=None): rev1 = self.revisions[0] rev2 = self.revisions[-1] if self.caller.compare_revision_order(rev1, rev2) > 0: rev1, rev2 = rev2, rev1 path_older = self.path if self.vcs_name == rabbitvcs.vcs.VCS_SVN: path_older = self.vcs.svn().get_repo_url(self.path) helper.launch_ui_window( "diff", [ "-s", "%s@%s" % (path_older, S(rev1)), "%s@%s" % (self.path, S(rev2)), "--vcs=%s" % self.caller.get_vcs_name(), ], ) class AnnotateContextMenu(object): """ Defines context menu items for a table's rows """ def __init__(self, caller, event, path, revisions=[]): """ @param caller: The calling object @type caller: object @param path: The loaded path @type path: string @param event: The triggering Gtk.Event @type event: Gtk.Event @param revisions: The selected revisions @type revisions: list of rabbitvcs.vcs.Revision object """ self.caller = caller self.event = event self.path = path self.revisions = revisions self.vcs = rabbitvcs.vcs.VCS() self.conditions = AnnotateContextMenuConditions( self.caller, self.vcs, self.path, self.revisions ) self.callbacks = AnnotateContextMenuCallbacks( self.caller, self.vcs, self.path, self.revisions ) # The first element of each tuple is a key that matches a # ContextMenuItems item. The second element is either None when there # is no submenu, or a recursive list of tuples for desired submenus. self.structure = [ (MenuShowRevision, None), (MenuViewRevision, None), (MenuShowNextRevision, None), (MenuDiffWorkingCopy, None), (MenuCompareWorkingCopy, None), (MenuDiffPreviousRevision, None), (MenuComparePreviousRevision, None), (MenuDiffRevisions, None), (MenuCompareRevisions, None), ] def show(self): if len(self.revisions) == 0: return context_menu = GtkContextMenu(self.structure, self.conditions, self.callbacks) context_menu.show(self.event) classes_map = {rabbitvcs.vcs.VCS_SVN: SVNAnnotate, rabbitvcs.vcs.VCS_GIT: GitAnnotate} def annotate_factory(vcs, path, revision=None): if not vcs: guess = rabbitvcs.vcs.guess(path) vcs = guess["vcs"] return classes_map[vcs](path, revision) if __name__ == "__main__": from rabbitvcs.ui import main, REVISION_OPT, VCS_OPT (options, paths) = main( [REVISION_OPT, VCS_OPT], usage="Usage: rabbitvcs annotate url [-r REVISION]" ) window = annotate_factory(options.vcs, paths[0], options.revision) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/applypatch.py000066400000000000000000000122611445560650400205500ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.log import Log import rabbitvcs.vcs from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui import InterfaceNonView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.applypatch") _ = gettext.gettext class ApplyPatch(InterfaceNonView): """ This class provides a handler to the apply patch functionality. """ def __init__(self, paths): InterfaceNonView.__init__(self) self.paths = paths self.vcs = rabbitvcs.vcs.VCS() self.common = helper.get_common_directory(paths) def choose_patch_path(self): path = None dialog = Gtk.FileChooserDialog( title=_("Apply Patch"), parent=None, action=Gtk.FileChooserAction.OPEN ) dialog.add_button(_("_Cancel"), Gtk.ResponseType.CANCEL) dialog.add_button(_("_Open"), Gtk.ResponseType.OK) dialog.set_default_response(Gtk.ResponseType.OK) response = dialog.run() if response == Gtk.ResponseType.OK: path = dialog.get_filename() dialog.destroy() return path def choose_patch_dir(self): if len(self.paths) == 1 and os.path.isdir(self.paths[0]): return self.paths[0] dir = None dialog = Gtk.FileChooserDialog( title=_("Apply Patch To Directory..."), parent=None, action=Gtk.FileChooserAction.SELECT_FOLDER, ) dialog.add_button(_("_Cancel"), Gtk.ResponseType.CANCEL) dialog.add_button(_("_Select"), Gtk.ResponseType.OK) dialog.set_default_response(Gtk.ResponseType.OK) response = dialog.run() if response == Gtk.ResponseType.OK: dir = dialog.get_filename() dialog.destroy() return dir class SVNApplyPatch(ApplyPatch): def __init__(self, paths): ApplyPatch.__init__(self, paths) self.svn = self.vcs.svn() def start(self): path = self.choose_patch_path() # If empty path, means we've cancelled if not path: return base_dir = self.choose_patch_dir() if not base_dir: return ticks = 2 self.action = rabbitvcs.ui.action.SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set() ) self.action.set_pbar_ticks(ticks) self.action.append(self.action.set_header, _("Apply Patch")) self.action.append(self.action.set_status, _("Applying Patch File...")) self.action.append(self.svn.apply_patch, path, base_dir) self.action.append(self.action.set_status, _("Patch File Applied")) self.action.append(self.action.finish) self.action.schedule() class GitApplyPatch(ApplyPatch): def __init__(self, paths): ApplyPatch.__init__(self, paths) self.git = self.vcs.git(paths[0]) def start(self): path = self.choose_patch_path() # If empty path, means we've cancelled if not path: return base_dir = self.choose_patch_dir() if not base_dir: return ticks = 2 self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.set_pbar_ticks(ticks) self.action.append(self.action.set_header, _("Apply Patch")) self.action.append(self.action.set_status, _("Applying Patch File...")) self.action.append(self.git.apply_patch, path, base_dir) self.action.append(self.action.set_status, _("Patch File Applied")) self.action.append(self.action.finish) self.action.schedule() classes_map = { rabbitvcs.vcs.VCS_SVN: SVNApplyPatch, rabbitvcs.vcs.VCS_GIT: GitApplyPatch, } def applypatch_factory(paths): guess = rabbitvcs.vcs.guess(paths[0]) return classes_map[guess["vcs"]](paths) if __name__ == "__main__": from rabbitvcs.ui import main (options, paths) = main(usage="Usage: rabbitvcs applypatch [path1] [path2] ...") window = applypatch_factory(paths) window.register_gtk_quit() window.start() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/branch.py000066400000000000000000000133731445560650400176450ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.vcs.status import rabbitvcs.vcs from rabbitvcs.util.strings import S import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class SVNBranch(InterfaceView): """ Provides a UI interface to copy/branch/tag items in the repository or working copy. Pass a single path to the class when initializing """ SETTINGS = rabbitvcs.util.settings.SettingsManager() SWITCH_AFTER = SETTINGS.get("general", "switch_after_branch") def __init__(self, path, revision=None): InterfaceView.__init__(self, "branch", "Branch") self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() self.path = path self.revision = revision status = self.vcs.status(self.path) repo_paths = helper.get_repository_paths() self.from_urls = rabbitvcs.ui.widget.ComboBox( self.get_widget("from_urls"), repo_paths ) self.to_urls = rabbitvcs.ui.widget.ComboBox( self.get_widget("to_urls"), helper.get_repository_paths() ) repository_url = self.svn.get_repo_url(path) self.from_urls.set_child_text(repository_url) self.to_urls.set_child_text(repository_url) self.message = rabbitvcs.ui.widget.TextView(self.get_widget("message")) self.get_widget("toggle_switch_after_branch").set_active(self.SWITCH_AFTER) self.revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("revision_container"), self.svn, revision=revision, url_combobox=self.from_urls, expand=True, ) if self.revision is None and status.has_modified(): self.revision_selector.set_kind_working() def on_ok_clicked(self, widget): src = self.from_urls.get_active_text() dest = self.to_urls.get_active_text() if dest == "": rabbitvcs.ui.dialog.MessageBox(_("You must supply a destination path.")) return revision = self.revision_selector.get_revision_object() self.hide() self.action = rabbitvcs.ui.action.SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set() ) self.action.set_log_message(self.message.get_text()) self.action.append(helper.save_log_message, self.message.get_text()) self.action.append(self.action.set_header, _("Branch/tag")) self.action.append(self.action.set_status, _("Running Branch/tag Command...")) self.action.append(self.svn.copy, src, dest, revision) self.action.append(self.action.set_status, _("Completed Branch/tag")) if self.SWITCH_AFTER: self.action.append(self.action.set_status, _("Running Switch Command...")) self.action.append(helper.save_repository_path, dest) self.action.append( self.svn.switch, self.path, helper.quote_url(dest), revision=revision ) self.action.append(self.action.set_status, _("Completed Switch")) self.action.append(self.action.finish) self.action.schedule() def on_previous_messages_clicked(self, widget, data=None): dialog = rabbitvcs.ui.dialog.PreviousMessages() message = dialog.run() if message is not None: self.message.set_text(S(message).display()) def on_repo_browser_clicked(self, widget, data=None): from rabbitvcs.ui.browser import SVNBrowserDialog SVNBrowserDialog( self.from_urls.get_active_text(), callback=self.on_repo_browser_closed ) def on_repo_browser_closed(self, new_url): self.from_urls.set_child_text(new_url) def on_toggle_switch_after_branch_toggled(self, widget, *args): self.SWITCH_AFTER = widget.get_active() # Save this preference for future commits. if self.SETTINGS.get("general", "switch_after_branch") != self.SWITCH_AFTER: self.SETTINGS.set("general", "switch_after_branch", self.SWITCH_AFTER) self.SETTINGS.write() classes_map = {rabbitvcs.vcs.VCS_SVN: SVNBranch} def branch_factory(vcs, path, revision=None): if not vcs: guess = rabbitvcs.vcs.guess(path) vcs = guess["vcs"] return classes_map[vcs](path, revision) if __name__ == "__main__": from rabbitvcs.ui import main, REVISION_OPT, VCS_OPT (options, args) = main( [REVISION_OPT, VCS_OPT], usage="Usage: rabbitvcs branch [url_or_path]" ) window = branch_factory(options.vcs, args[0], options.revision) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/branches.py000066400000000000000000000272371445560650400202010ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from xml.sax import saxutils import rabbitvcs.vcs from rabbitvcs.util.strings import S from rabbitvcs.ui.dialog import DeleteConfirmation import rabbitvcs.ui.widget from rabbitvcs.ui.log import log_dialog_factory from rabbitvcs.ui.action import GitAction from rabbitvcs.ui import InterfaceView import time from datetime import datetime from gi.repository import Gtk, GObject, Gdk, Pango # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext STATE_ADD = 0 STATE_EDIT = 1 class GitBranchManager(InterfaceView): """ Provides a UI interface to manage items """ state = STATE_ADD def __init__(self, path, revision=""): InterfaceView.__init__(self, "manager", "Manager") self.path = path self.get_widget("right_side").show() self.get_widget("Manager").set_size_request(695, -1) self.get_widget("Manager").set_title(_("Branch Manager")) self.get_widget("items_label").set_markup(_("Branches")) self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(path) self.revision = self.git.revision(revision) self.selected_branch = None self.items_treeview = rabbitvcs.ui.widget.Table( self.get_widget("items_treeview"), [rabbitvcs.ui.widget.TYPE_MARKUP], [_("Branch")], callbacks={ "mouse-event": self.on_treeview_mouse_event, "key-event": self.on_treeview_key_event, }, ) self.initialize_detail() self.load() if self.revision: revision_branches = self.git.branch_list(self.revision) if revision_branches: self.show_edit(revision_branches[0].name) else: self.show_add() else: self.show_add() def initialize_detail(self): self.detail_container = self.get_widget("detail_container") self.detail_grid = Gtk.Grid() self.detail_grid.set_row_spacing(4) self.detail_grid.set_column_spacing(6) self.detail_grid.set_hexpand(True) row = 0 # Set up the Branch line label = Gtk.Label(label=_("Name:")) label.set_properties(xalign=0, yalign=0.5) self.branch_entry = Gtk.Entry() self.branch_entry.set_hexpand(True) self.detail_grid.attach(label, 0, row, 1, 1) self.detail_grid.attach(self.branch_entry, 1, row, 2, 1) branch_name_row = row row = row + 1 # Set up the Commit-sha line label = Gtk.Label(label=_("Start Point:")) label.set_properties(xalign=0, yalign=0.5) self.start_point_entry = Gtk.Entry() self.start_point_entry.set_size_request(300, -1) self.start_point_entry.set_hexpand(True) self.log_dialog_button = Gtk.Button() self.log_dialog_button.connect("clicked", self.on_log_dialog_button_clicked) image = Gtk.Image() image.set_from_icon_name("rabbitvcs-show_log", Gtk.IconSize.SMALL_TOOLBAR) self.log_dialog_button.set_image(image) self.detail_grid.attach(label, 0, row, 1, 1) self.detail_grid.attach(self.start_point_entry, 1, row, 1, 1) self.detail_grid.attach(self.log_dialog_button, 2, row, 1, 1) start_point_row = row row = row + 1 # Set up the Track line self.track_checkbox = Gtk.CheckButton(label=_("Keep old branch's history")) self.detail_grid.attach(self.track_checkbox, 1, row, 2, 1) track_row = row row = row + 1 # Set up the checkout line self.checkout_checkbox = Gtk.CheckButton(label=_("Set as active branch")) self.detail_grid.attach(self.checkout_checkbox, 1, row, 2, 1) checkout_row = row row = row + 1 # Set up Save button self.save_button = Gtk.Button(label=_("Save")) self.save_button.set_halign(Gtk.Align.START) self.save_button.connect("clicked", self.on_save_clicked) self.detail_grid.attach(self.save_button, 1, row, 1, 1) save_row = row row = row + 1 # Set up the Revision line label = Gtk.Label(label=_("Revision:")) label.set_properties(xalign=0, yalign=0) self.revision_label = Gtk.Label(label="") self.revision_label.set_properties(xalign=0, selectable=True) self.revision_label.set_line_wrap(True) self.revision_label.set_hexpand(True) self.detail_grid.attach(label, 0, row, 1, 1) self.detail_grid.attach(self.revision_label, 1, row, 2, 1) revision_row = row row = row + 1 # Set up the Log Message line label = Gtk.Label(label=_("Message:")) label.set_properties(xalign=0, yalign=0) self.message_label = Gtk.Label(label="") self.message_label.set_properties(xalign=0, yalign=0, selectable=True) self.message_label.set_line_wrap(True) self.message_label.set_hexpand(True) self.detail_grid.attach(label, 0, row, 1, 1) self.detail_grid.attach(self.message_label, 1, row, 2, 1) message_row = row row = row + 1 self.add_rows = [ branch_name_row, track_row, save_row, start_point_row, checkout_row, ] self.view_rows = [ branch_name_row, revision_row, message_row, save_row, checkout_row, ] self.detail_grid.show() self.detail_container.add(self.detail_grid) def load(self): self.items_treeview.clear() self.branch_list = self.git.branch_list() for item in self.branch_list: name = saxutils.escape(item.name) if item.tracking: name = "%s" % name self.items_treeview.append([name]) def on_add_clicked(self, widget): self.show_add() def on_delete_clicked(self, widget): items = self.items_treeview.get_selected_row_items(0) selected = [] for branch in items: selected.append( saxutils.unescape(branch).replace("", "").replace("", "") ) confirm = rabbitvcs.ui.dialog.Confirmation( _("Are you sure you want to delete %s?" % ", ".join(selected)) ) result = confirm.run() if result == Gtk.ResponseType.OK or result == True: for branch in selected: self.git.branch_delete(branch) self.load() self.show_add() def on_save_clicked(self, widget): if self.state == STATE_ADD: branch_name = self.branch_entry.get_text() branch_track = self.track_checkbox.get_active() start_point = self.git.revision(self.start_point_entry.get_text()) self.git.branch(branch_name, revision=start_point) elif self.state == STATE_EDIT: branch_name = self.branch_entry.get_text() branch_track = self.track_checkbox.get_active() if self.selected_branch.name != branch_name: self.git.branch_rename(self.selected_branch.name, branch_name) if self.checkout_checkbox.get_active(): self.git.checkout([], self.git.revision(branch_name)) self.load() self.show_edit(branch_name) def on_treeview_key_event(self, treeview, event, *args): if Gdk.keyval_name(event.keyval) in ("Up", "Down", "Return"): self.on_treeview_event(treeview, event) def on_treeview_mouse_event(self, treeview, event, *args): self.on_treeview_event(treeview, event) def on_treeview_event(self, treeview, event, *args): selected = self.items_treeview.get_selected_row_items(0) if len(selected) > 0: if len(selected) == 1: branch_name = selected[0] if branch_name.startswith(""): branch_name = branch_name[3:-4] self.show_edit(branch_name) self.get_widget("delete").set_sensitive(True) else: self.show_add() def show_rows(self, rows): self.detail_grid.hide() for w in self.detail_grid.get_children(): if self.detail_grid.child_get_property(w, "top-attach") in rows: w.show_all() else: w.hide() self.detail_grid.show() def show_add(self): self.state = STATE_ADD revision = "HEAD" if self.revision: active_branch = self.git.get_active_branch() if active_branch: revision = S(active_branch.name) self.items_treeview.unselect_all() self.branch_entry.set_text("") self.save_button.set_label(_("Add")) self.start_point_entry.set_text(S(revision).display()) self.track_checkbox.set_active(True) self.checkout_checkbox.set_sensitive(True) self.checkout_checkbox.set_active(False) self.show_rows(self.add_rows) self.get_widget("detail_label").set_markup(_("Add Branch")) def show_edit(self, branch_name): self.state = STATE_EDIT branch_name = saxutils.unescape(branch_name) self.selected_branch = None for item in self.branch_list: if item.name == branch_name: self.selected_branch = item break self.save_button.set_label(_("Save")) if self.selected_branch: self.branch_entry.set_text(S(self.selected_branch.name).display()) self.revision_label.set_text(S(self.selected_branch.revision).display()) self.message_label.set_text( S(self.selected_branch.message.rstrip("\n")).display() ) if self.selected_branch.tracking: self.checkout_checkbox.set_active(True) self.checkout_checkbox.set_sensitive(False) else: self.checkout_checkbox.set_active(False) self.checkout_checkbox.set_sensitive(True) self.show_rows(self.view_rows) self.get_widget("detail_label").set_markup(_("Branch Detail")) def on_log_dialog_button_clicked(self, widget): log_dialog_factory(self.path, ok_callback=self.on_log_dialog_closed) def on_log_dialog_closed(self, data): if data: self.start_point_entry.set_text(S(data).display()) if __name__ == "__main__": from rabbitvcs.ui import main, REVISION_OPT, VCS_OPT (options, paths) = main( [REVISION_OPT, VCS_OPT], usage="Usage: rabbitvcs branch-manager path [-r revision]", ) window = GitBranchManager(paths[0], revision=options.revision) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/browser.py000066400000000000000000000520631445560650400200720ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.decorators import gtk_unsafe from rabbitvcs.util.log import Log from rabbitvcs.util.strings import S import rabbitvcs.util.settings import rabbitvcs.vcs import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.util.contextmenuitems import * from rabbitvcs.util.contextmenu import ( GtkContextMenu, GtkContextMenuCaller, GtkFilesContextMenuConditions, ) from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path import six import locale from datetime import datetime from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.browser") _ = gettext.gettext helper.gobject_threads_init() class SVNBrowser(InterfaceView, GtkContextMenuCaller): def __init__(self, url): InterfaceView.__init__(self, "browser", "Browser") self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() sm = rabbitvcs.util.settings.SettingsManager() self.datetime_format = sm.get("general", "datetime_format") self.url = "" if self.svn.is_in_a_or_a_working_copy(url): action = rabbitvcs.ui.action.SVNAction( self.svn, notification=False, run_in_thread=False ) self.url = S(action.run_single(self.svn.get_repo_url, url)) elif self.svn.is_path_repository_url(url): self.url = S(url) self.urls = rabbitvcs.ui.widget.ComboBox( self.get_widget("urls"), helper.get_repository_paths() ) if self.url: self.urls.set_child_text(helper.unquote_url(self.url)) # We must set a signal handler for the Gtk.Entry inside the combobox # Because glade will not retain that information self.urls.set_child_signal("key-release-event", self.on_urls_key_released) self.revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("revision_container"), self.svn, url_combobox=self.urls, expand=True, ) self.items = [] self.list_table = rabbitvcs.ui.widget.Table( self.get_widget("list"), [ rabbitvcs.ui.widget.TYPE_HIDDEN_OBJECT, rabbitvcs.ui.widget.TYPE_PATH, GObject.TYPE_INT, GObject.TYPE_INT, GObject.TYPE_STRING, GObject.TYPE_FLOAT, ], ["", _("Path"), _("Revision"), _("Size"), _("Author"), _("Date")], filters=[ {"callback": self.file_filter, "user_data": {"column": 1}}, {"callback": self.revision_filter, "user_data": {"column": 2}}, {"callback": self.size_filter, "user_data": {"column": 3}}, {"callback": self.date_filter, "user_data": {"column": 5}}, ], filter_types=[ GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, ], callbacks={ "file-column-callback": self.file_column_callback, "row-activated": self.on_row_activated, "mouse-event": self.on_list_table_mouse_event, }, flags={"sortable": True}, ) self.url_clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) self.repo_root_url = None if self.url: helper.save_repository_path(url) self.load() def load(self): self.url = self.urls.get_active_text() self.action = rabbitvcs.ui.action.SVNAction(self.svn, notification=False) revision = self.revision_selector.get_revision_object() self.action.append( self.svn.list, helper.quote_url(self.url), revision=revision, recurse=False ) self.action.append(self.init_repo_root_url) self.action.append(self.populate_table, 0) self.action.schedule() @gtk_unsafe def populate_table(self, item_index=0): self.list_table.clear() self.items = self.action.get_result(item_index) self.items.sort(key=self.sort_files_key) self.list_table.append([S(".."), "..", 0, 0, "", 0]) for item, locked in self.items[1:]: self.list_table.append( [ S(item.path), item.path, item.created_rev.number, item.size, item.last_author, item.time, ] ) def init_repo_root_url(self): if self.repo_root_url is None and self.svn.is_in_a_or_a_working_copy(self.url): action = rabbitvcs.ui.action.SVNAction( self.svn, notification=False, run_in_thread=False ) self.repo_root_url = action.run_single(self.svn.get_repo_root_url, self.url) def on_refresh_clicked(self, widget): helper.save_repository_path(self.urls.get_active_text()) self.load() def create_folder(self, where): from rabbitvcs.ui.dialog import NewFolder dialog = NewFolder() result = dialog.run() if result is None: return (folder_name, log_message) = result new_url = where.rstrip("/") + "/" + folder_name self.action = rabbitvcs.ui.action.SVNAction(self.svn, notification=False) self.action.append(self.svn.mkdir, new_url, log_message) self.action.append(self.svn.list, where, recurse=False) self.action.append(self.populate_table, 1) self.action.schedule() def on_create_folder_here_clicked(self, widget): self.create_folder(self.urls.get_active_text()) def on_row_activated(self, treeview, data, col): path = self.list_table.get_selected_row_items(0)[0] if path == "..": path = self.url.split("/")[0:-1] self.url = "/".join(path) else: self.url = path if self.file_column_callback(self.url) == "dir" or self.url != path: self.urls.set_child_text(helper.unquote_url(self.url)) self.load() else: self._open([self.url]) def on_urls_key_released(self, widget, event, *args): if Gdk.keyval_name(event.keyval) == "Return": helper.save_repository_path(self.urls.get_active_text()) self.load() def file_column_callback(self, filename): """ Determine the node kind (dir or file) from our retrieved items list """ filename = S(filename).unicode() if filename == six.u(".."): return "dir" for item, locked in self.items: if S(item.path).unicode() == filename: return self.svn.NODE_KINDS_REVERSE[item.kind] return None def sort_files_key(self, x): """ Return a key to sort the browser listing so that folders are on top and then sort alphabetically. """ kind = self.svn.NODE_KINDS_REVERSE[x[0].kind] != "dir" return (kind, locale.strxfrm(S(x[0].repos_path))) def file_filter(self, row, column, user_data=None): """ Table filter to just show the basename of the item path """ if row[column]: return os.path.basename(row[column]) return row[column] def size_filter(self, row, column, user_data=None): """ Table filter to convert the item size to a "pretty" filesize """ if self.file_column_callback(row[0]) == "file": return helper.pretty_filesize(int(row[column])) return "" def revision_filter(self, row, column, user_data=None): """ Table filter to convert revision to a desired format """ if row[0] == "..": return "" return row[column] def date_filter(self, row, column, user_data=None): """ Table filter to convert the item date to something readable """ if row[0] == "..": return "" if row[column]: change_time = datetime.fromtimestamp(float(row[column])) return str(S(helper.format_datetime(change_time, self.datetime_format))) return str(row[column]) def on_list_table_mouse_event(self, treeview, event, *args): if event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE: self.show_list_table_popup_menu(treeview, event) def show_list_table_popup_menu(self, treeview, event): paths = self.list_table.get_selected_row_items(0) if len(paths) == 0: paths.append(self.url) BrowserContextMenu(self, event, None, self.vcs, paths).show() def set_url_clipboard(self, url): self.url_clipboard.set_text(S(url).display(), -1) def get_repo_root_url(self): return self.repo_root_url def get_url(self): return self.urls.get_active_text() def _open(self, paths): self.action = rabbitvcs.ui.action.SVNAction(self.svn, notification=False) exported_paths = [] for path in paths: export_path = helper.get_tmp_path(os.path.basename(paths[0])) exported_paths.append(export_path) self.action.append( self.svn.export, paths[0], export_path, revision=self.revision_selector.get_revision_object(), ) for path in exported_paths: self.action.append(helper.open_item, path) self.action.schedule() class SVNBrowserDialog(SVNBrowser): def __init__(self, path, callback=None): """ Override the normal Browser class so that we can hide the window as we need. Also, provide a callback for when the close button is clicked so that we can get some desired data. """ self.callback = callback SVNBrowser.__init__(self, path) self.change_button("close", _("_Select"), "rabbitvcs-ok") def on_destroy(self, widget): pass def on_close_clicked(self, widget, data=None): self.hide() if self.callback is not None: path = self.urls.get_active_text() selected = self.list_table.get_selected_row_items(0) if len(selected) > 0: path = selected[0] self.callback(path) class MenuCreateRepositoryFolder(MenuItem): identifier = "RabbitVCS::Create_Repository_Folder" label = _("Create folder...") icon = "folder-new" class MenuBrowserCopyTo(MenuItem): identifier = "RabbitVCS::Browser_Copy_To" label = _("Copy to...") icon = "edit-copy" class MenuBrowserCopyUrlToClipboard(MenuItem): identifier = "RabbitVCS::Browser_Copy_Url_To_Clipboard" label = _("Copy URL to clipboard") icon = "rabbitvcs-asynchronous" class MenuBrowserMoveTo(MenuItem): identifier = "RabbitVCS::Browser_Move_To" label = _("Move to...") icon = "document-save-as" class BrowserContextMenuConditions(GtkFilesContextMenuConditions): def __init__(self, vcs, paths, caller): GtkFilesContextMenuConditions.__init__(self, vcs, paths) self.caller = caller def is_parent_selected(self): for path in self.paths: if os.path.split(path.rstrip("/"))[1] == "..": return True return False def _open(self, data1=None, data2=None): return True def show_log(self, data1=None, data2=None): return True def annotate(self, data1=None, data2=None): if self.path_dict["length"] == 1: return self.caller.file_column_callback(self.paths[0]) == "file" return False def checkout(self, data1=None, data2=None): return True def export(self, data1=None, data2=None): return True def rename(self, data1=None): if self.path_dict["length"] > 1 or self.is_parent_selected(): return False revision = self.caller.revision_selector.get_revision_object() return revision.kind == "head" def delete(self, data1=None, data2=None): revision = self.caller.revision_selector.get_revision_object() return revision.kind == "head" and not self.is_parent_selected() def create_repository_folder(self, data1=None): if self.path_dict["length"] == 1 and not self.is_parent_selected(): return self.caller.file_column_callback(self.paths[0]) == "dir" return self.path_dict["length"] == 0 def browser_copy_to(self, data1=None, data2=None): return not self.is_parent_selected() def browser_copy_url_to_clipboard(self, data1=None, data2=None): return self.path_dict["length"] == 1 def browser_move_to(self, data1=None, data2=None): revision = self.caller.revision_selector.get_revision_object() return revision.kind == "head" and not self.is_parent_selected() class BrowserContextMenuCallbacks(object): def __init__(self, caller, base_dir, vcs, paths=[]): self.caller = caller self.base_dir = base_dir self.vcs = vcs self.svn = self.vcs.svn() self.paths = paths self.guess = rabbitvcs.vcs.VCS_SVN def __update_browser_url(self, url): # Make sure the Browser variables are updated with the new path self.caller.urls.set_child_text(url) self.caller.url = url def __get_browser_revision(self): return self.caller.revision_selector.get_revision_object() def __generate_sources_list(self): # Generates a list of tuples where the first element is a path and the # second element is a primitive revision object # Used for the copy_to menu item sources = [] for path in self.paths: sources.append((path, self.__get_browser_revision().primitive())) return sources def _open(self, data=None, user_data=None): self.caller._open(self.paths) def show_log(self, data=None, user_data=None): helper.launch_ui_window("log", ["--vcs=%s" % self.guess, self.paths[0]]) def annotate(self, data=None, user_data=None): urlrev = self.paths[0] revision = self.__get_browser_revision() if revision.kind == "number": urlrev += "@" + revision.value helper.launch_ui_window("annotate", ["--vcs=%s" % self.guess, urlrev]) def checkout(self, data=None, user_data=None): args = [self.paths[0]] revision = self.__get_browser_revision() if revision.kind == "number": args = ["-r", revision.value] + args helper.launch_ui_window("checkout", args) def export(self, data=None, user_data=None): args = [self.paths[0]] revision = self.__get_browser_revision() if revision.kind == "number": args = ["-r", revision.value] + args helper.launch_ui_window("export", args) def rename(self, data=None, user_data=None): (base, filename) = os.path.split(self.paths[0]) from rabbitvcs.ui.dialog import OneLineTextChange dialog = OneLineTextChange(_("Rename"), _("New Name:"), filename) (result, new_name) = dialog.run() if result == Gtk.ResponseType.CANCEL: return new_url = base.rstrip("/") + "/" + new_name path_to_refresh = self.caller.get_url() if self.paths[0] == path_to_refresh: path_to_refresh = new_url self.__update_browser_url(path_to_refresh) self.caller.action = rabbitvcs.ui.action.SVNAction(self.svn, notification=False) self.caller.action.append(self.svn.move, self.paths[0], new_url) self.caller.action.append(self.svn.list, path_to_refresh, recurse=False) self.caller.action.append(self.caller.populate_table, 1) self.caller.action.schedule() def delete(self, data=None, user_data=None): path_to_refresh = self.caller.get_url() if self.paths[0] == path_to_refresh: # If the deleted path is the same as the current path, go to the parent path_to_refresh = path_to_refresh.split("/")[0:-1] path_to_refresh = "/".join(path_to_refresh) self.__update_browser_url(path_to_refresh) self.caller.action = rabbitvcs.ui.action.SVNAction(self.svn, notification=False) self.caller.action.append(self.svn.remove, self.paths) self.caller.action.append(self.svn.list, path_to_refresh, recurse=False) self.caller.action.append(self.caller.populate_table, 1) self.caller.action.schedule() def create_repository_folder(self, data=None, user_data=None): self.caller.create_folder(self.paths[0]) def browser_copy_to(self, data=None, user_data=None): from rabbitvcs.ui.dialog import OneLineTextChange dialog = OneLineTextChange( _("Where do you want to copy the selection?"), _("New Location:"), self.caller.get_url(), ) result = dialog.run() if result is None: return (response, new_url) = result if response == Gtk.ResponseType.CANCEL: return sources = self.__generate_sources_list() self.caller.action = rabbitvcs.ui.action.SVNAction(self.svn, notification=False) self.caller.action.append( self.svn.copy_all, sources, new_url, copy_as_child=True ) self.caller.action.append(self.svn.list, self.caller.get_url(), recurse=False) self.caller.action.append(self.caller.populate_table, 1) self.caller.action.schedule() def browser_copy_url_to_clipboard(self, data=None, user_data=None): self.caller.set_url_clipboard(self.paths[0]) def browser_move_to(self, data=None, user_data=None): from rabbitvcs.ui.dialog import OneLineTextChange dialog = OneLineTextChange( _("Where do you want to move the selection?"), _("New Location:"), self.caller.get_url(), ) result = dialog.run() if result is None: return (response, new_url) = result if response == Gtk.ResponseType.CANCEL: return self.caller.action = rabbitvcs.ui.action.SVNAction(self.svn, notification=False) self.caller.action.append( self.svn.move_all, self.paths, new_url, move_as_child=True ) self.caller.action.append(self.svn.list, self.caller.get_url(), recurse=False) self.caller.action.append(self.caller.populate_table, 1) self.caller.action.schedule() class BrowserContextMenu(object): def __init__(self, caller, event, base_dir, vcs, paths=[]): self.caller = caller self.event = event self.paths = paths self.base_dir = base_dir self.vcs = vcs self.svn = self.vcs.svn() self.conditions = BrowserContextMenuConditions(self.vcs, paths, self.caller) self.callbacks = BrowserContextMenuCallbacks( self.caller, self.base_dir, self.vcs, paths ) self.structure = [ (MenuOpen, None), (MenuSeparator, None), (MenuShowLog, None), (MenuAnnotate, None), (MenuExport, None), (MenuCheckout, None), (MenuSeparator, None), (MenuCreateRepositoryFolder, None), (MenuSeparator, None), (MenuRename, None), (MenuDelete, None), (MenuBrowserCopyTo, None), (MenuBrowserCopyUrlToClipboard, None), (MenuBrowserMoveTo, None), ] def show(self): if len(self.paths) == 0: return context_menu = GtkContextMenu(self.structure, self.conditions, self.callbacks) context_menu.show(self.event) classes_map = {rabbitvcs.vcs.VCS_SVN: SVNBrowser, rabbitvcs.vcs.VCS_DUMMY: SVNBrowser} def browser_factory(path): guess = rabbitvcs.vcs.guess(path) return classes_map[guess["vcs"]](path) if __name__ == "__main__": from rabbitvcs.ui import main (options, url) = main(usage="Usage: rabbitvcs browser [url]") window = browser_factory(url[0]) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/changes.py000066400000000000000000000446311445560650400200210ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.ui.dialog import MessageBox import rabbitvcs.ui.action from rabbitvcs.util.strings import S from rabbitvcs.util.contextmenuitems import * from rabbitvcs.util.contextmenu import GtkContextMenu import rabbitvcs.ui.widget from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class Changes(InterfaceView): """ Show how files and folders are different between revisions. TODO: - Deal with the revision arguments in a smarter way so we can pass in revisions like HEAD. Currently, if a revision is passed it assumes it is a number """ selected_rows = [] MORE_ACTIONS_ITEMS = [_("More Actions..."), _("View unified diff")] def __init__(self, path1=None, revision1=None, path2=None, revision2=None): InterfaceView.__init__(self, "changes", "Changes") self.vcs = rabbitvcs.vcs.VCS() self.MORE_ACTIONS_CALLBACKS = [None, self.on_more_actions_view_unified_diff] self.more_actions = rabbitvcs.ui.widget.ComboBox( self.get_widget("more_actions"), self.MORE_ACTIONS_ITEMS ) self.more_actions.set_active(0) repo_paths = helper.get_repository_paths() self.first_urls = rabbitvcs.ui.widget.ComboBox( self.get_widget("first_urls"), repo_paths ) self.first_urls_browse = self.get_widget("first_urls_browse") self.second_urls = rabbitvcs.ui.widget.ComboBox( self.get_widget("second_urls"), repo_paths ) self.second_urls_browse = self.get_widget("second_urls_browse") # # UI Signal Callback Methods # def on_close_clicked(self, widget): self.close() def on_refresh_clicked(self, widget): self.load() def on_first_urls_changed(self, widget, data=None): self.check_first_urls() self.check_refresh_button() def on_second_urls_changed(self, widget, data=None): self.check_second_urls() self.check_refresh_button() def on_first_urls_browse_clicked(self, widget, data=None): pass def on_first_repo_chooser_closed(self, new_url): self.first_urls.set_child_text(new_url) self.check_first_urls() self.check_refresh_button() def on_second_urls_browse_clicked(self, widget, data=None): pass def on_second_repo_chooser_closed(self, new_url): self.second_urls.set_child_text(new_url) self.check_second_urls() self.check_refresh_button() def on_changes_table_cursor_changed(self, treeview, data=None): self.on_changes_table_event(treeview, data) def on_changes_table_button_released(self, treeview, event, *args): if event.type == Gdk.EventType.BUTTON_RELEASE: self.on_changes_table_event(treeview, event, *args) def on_changes_table_event(self, treeview, event, *args): selection = treeview.get_selection() (liststore, indexes) = selection.get_selected_rows() self.selected_rows = [] for tup in indexes: self.selected_rows.append(tup[0]) if not event is None: if event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE: self.show_changes_table_popup_menu(treeview, event) def on_more_actions_changed(self, widget, data=None): index = self.more_actions.get_active() if index < 0: return callback = self.MORE_ACTIONS_CALLBACKS[index] if callback is not None: callback() def on_changes_table_row_doubleclicked(self, treeview, data=None, col=None): selection = treeview.get_selection() (liststore, indexes) = selection.get_selected_rows() self.selected_rows = [] for tup in indexes: self.selected_rows.append(tup[0]) self.view_selected_diff(sidebyside=True) # # Helper methods # def get_first_revision(self): return self.first_revision_selector.get_revision_object() def get_second_revision(self): return self.second_revision_selector.get_revision_object() def show_changes_table_popup_menu(self, treeview, event): ChangesContextMenu(self, event).show() def check_ui(self): self.check_first_urls() self.check_second_urls() self.check_refresh_button() def can_first_browse_urls(self): return self.first_urls.get_active_text() != "" def can_second_browse_urls(self): return self.second_urls.get_active_text() != "" def check_refresh_button(self): can_click_refresh = ( self.can_first_browse_urls() and self.can_second_browse_urls() ) self.get_widget("refresh").set_sensitive(can_click_refresh) def check_first_urls(self): can_browse_urls = self.can_first_browse_urls() self.first_urls_browse.set_sensitive(can_browse_urls) def check_second_urls(self): can_browse_urls = self.can_second_browse_urls() self.second_urls_browse.set_sensitive(can_browse_urls) def enable_more_actions(self): self.more_actions.set_sensitive(True) def disable_more_actions(self): self.more_actions.set_sensitive(False) def view_selected_diff(self, sidebyside=False): for row in self.selected_rows: url1 = self.changes_table.get_row(row)[0] url2 = url1 if url1 == ".": url1 = "" url2 = "" url1 = helper.url_join(self.first_urls.get_active_text(), url1) url2 = helper.url_join(self.second_urls.get_active_text(), url2) rev1 = self.get_first_revision() rev2 = self.get_second_revision() helper.launch_ui_window( "diff", [ "%s@%s" % (url1, S(rev1)), "%s@%s" % (url2, S(rev2)), "%s" % (sidebyside and "-s" or ""), "--vcs=%s" % self.get_vcs_name(), ], ) # # More Actions callbacks # def on_more_actions_view_unified_diff(self): url1 = self.first_urls.get_active_text() rev1 = self.get_first_revision() rev2 = self.get_second_revision() url2 = self.second_urls.get_active_text() helper.launch_ui_window( "diff", [ "%s@%s" % (url1, S(rev1)), "%s@%s" % (url2, S(rev2)), "--vcs=%s" % self.get_vcs_name(), ], ) def get_vcs_name(self): vcs = rabbitvcs.vcs.VCS_DUMMY if hasattr(self, "svn"): vcs = rabbitvcs.vcs.VCS_SVN elif hasattr(self, "git"): vcs = rabbitvcs.vcs.VCS_GIT return vcs class SVNChanges(Changes): def __init__(self, path1=None, revision1=None, path2=None, revision2=None): Changes.__init__(self, path1, revision1, path2, revision2) self.svn = self.vcs.svn() if path1 is not None: self.first_urls.set_child_text(self.svn.get_repo_url(path1)) if path2 is not None: self.second_urls.set_child_text(self.svn.get_repo_url(path2)) elif path1 is not None: self.second_urls.set_child_text(self.svn.get_repo_url(path1)) self.first_revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("first_revision_container"), self.svn, revision=revision1, url_combobox=self.first_urls, expand=True, ) self.second_revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("second_revision_container"), self.svn, revision=revision2, url_combobox=self.second_urls, expand=True, ) self.changes_table = rabbitvcs.ui.widget.Table( self.get_widget("changes_table"), [GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING], [_("Path"), _("Change"), _("Property Change")], flags={"sortable": True, "sort_on": 1}, callbacks={"mouse-event": self.on_changes_table_button_released}, ) self.check_ui() if path1 and revision1 and path2 and revision2: self.load() def load(self): first_url = self.first_urls.get_active_text() first_rev = self.get_first_revision() second_rev = self.get_second_revision() second_url = self.second_urls.get_active_text() self.action = rabbitvcs.ui.action.SVNAction(self.svn, notification=False) self.action.append(self.disable_more_actions) self.action.append( self.svn.diff_summarize, first_url, first_rev, second_url, second_rev ) self.action.append(helper.save_repository_path, first_url) self.action.append(helper.save_repository_path, second_url) self.action.append(self.populate_table) self.action.append(self.enable_more_actions) self.action.schedule() def populate_table(self): # returns a list of dicts(path, summarize_kind, node_kind, prop_changed) summary = self.action.get_result(1) self.changes_table.clear() for item in summary: prop_changed = item["prop_changed"] == 1 and _("Yes") or _("No") path = item["path"] if path == "": path = "." self.changes_table.append([path, str(item["summarize_kind"]), prop_changed]) def on_first_urls_browse_clicked(self, widget, data=None): from rabbitvcs.ui.browser import SVNBrowserDialog SVNBrowserDialog( self.first_urls.get_active_text(), callback=self.on_first_repo_chooser_closed, ) def on_second_urls_browse_clicked(self, widget, data=None): from rabbitvcs.ui.browser import SVNBrowserDialog SVNBrowserDialog( self.second_urls.get_active_text(), callback=self.on_second_repo_chooser_closed, ) class GitChanges(Changes): def __init__(self, path1=None, revision1=None, path2=None, revision2=None): Changes.__init__(self, path1, revision1, path2, revision2) self.git = self.vcs.git(path1) self.first_urls_browse.hide() self.second_urls_browse.hide() if path1 is not None: self.first_urls.set_child_text(path1) if path2 is not None: self.second_urls.set_child_text(path2) elif path1 is not None: self.second_urls.set_child_text(path1) self.first_revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("first_revision_container"), self.git, revision=revision1, url_combobox=self.first_urls, expand=True, ) self.second_revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("second_revision_container"), self.git, revision=revision2, url_combobox=self.second_urls, expand=True, ) self.changes_table = rabbitvcs.ui.widget.Table( self.get_widget("changes_table"), [GObject.TYPE_STRING, GObject.TYPE_STRING], [_("Path"), _("Change")], ) self.check_ui() if path1 and revision1 and path2 and revision2: self.load() def load(self): first_url = self.first_urls.get_active_text() first_rev = self.get_first_revision() second_rev = self.get_second_revision() second_url = self.second_urls.get_active_text() self.action = rabbitvcs.ui.action.GitAction(self.git, notification=False) self.action.append(self.disable_more_actions) self.action.append( self.git.diff_summarize, first_url, first_rev, second_url, second_rev ) self.action.append(helper.save_repository_path, first_url) self.action.append(helper.save_repository_path, second_url) self.action.append(self.populate_table) self.action.append(self.enable_more_actions) self.action.schedule() def populate_table(self): # returns a list of dicts(path, summarize_kind, node_kind, prop_changed) summary = self.action.get_result(1) self.changes_table.clear() for item in summary: self.changes_table.append([item.path, item.action]) class MenuOpenFirst(MenuItem): identifier = "RabbitVCS::Open_First" label = _("Open from first revision") icon = "document-open" class MenuOpenSecond(MenuItem): identifier = "RabbitVCS::Open_Second" label = _("Open from second revision") icon = "document-open" class MenuViewDiff(MenuItem): identifier = "RabbitVCS::View_Diff" label = _("View unified diff(s)") icon = "rabbitvcs-diff" class MenuCompare(MenuItem): identifier = "RabbitVCS::Compare" label = _("Compare side by side") icon = "rabbitvcs-compare" class ChangesContextMenuConditions(object): def __init__(self, caller, vcs): self.caller = caller self.vcs = vcs def open_first(self): return len(self.caller.selected_rows) == 1 def open_second(self): return len(self.caller.selected_rows) == 1 and ( str(self.caller.get_first_revision()) != str(self.caller.get_second_revision()) or self.caller.first_urls.get_active_text() != self.caller.second_urls.get_active_text() ) def view_diff(self): return len(self.caller.selected_rows) > 0 def compare(self): return len(self.caller.selected_rows) > 0 class ChangesContextMenuCallbacks(object): def __init__(self, caller, vcs): self.caller = caller self.vcs = vcs def open_first(self, widget, data=None): path = self.caller.changes_table.get_row(self.caller.selected_rows[0])[0] if path == ".": path = "" url = helper.url_join(self.caller.first_urls.get_active_text(), path) rev = self.caller.get_first_revision() helper.launch_ui_window( "open", ["--vcs=%s" % self.caller.get_vcs_name(), url, "-r%s" % S(rev)] ) def open_second(self, widget, data=None): path = self.caller.changes_table.get_row(self.caller.selected_rows[0])[0] if path == ".": path = "" url = helper.url_join(self.caller.second_urls.get_active_text(), path) rev = self.caller.get_second_revision() helper.launch_ui_window( "open", ["--vcs=%s" % self.caller.get_vcs_name(), url, "-r%s" % S(rev)] ) def view_diff(self, widget, data=None): self.caller.view_selected_diff() def compare(self, widget, data=None): for row in self.caller.selected_rows: url1 = self.caller.changes_table.get_row(row)[0] url2 = url1 if url1 == ".": url1 = "" url2 = "" url1 = helper.url_join(self.caller.first_urls.get_active_text(), url1) url2 = helper.url_join(self.caller.second_urls.get_active_text(), url2) rev1 = self.caller.get_first_revision() rev2 = self.caller.get_second_revision() helper.launch_ui_window( "diff", [ "%s@%s" % (url1, S(rev1)), "%s@%s" % (url2, S(rev2)), "-s", "--vcs=%s" % self.caller.get_vcs_name(), ], ) class ChangesContextMenu(object): """ Defines context menu items for a table with files """ def __init__(self, caller, event): """ @param caller: The calling object @type caller: object """ self.caller = caller self.event = event self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() self.conditions = ChangesContextMenuConditions(self.caller, self.vcs) self.callbacks = ChangesContextMenuCallbacks(self.caller, self.vcs) # The first element of each tuple is a key that matches a # ContextMenuItems item. The second element is either None when there # is no submenu, or a recursive list of tuples for desired submenus. self.structure = [ (MenuOpenFirst, None), (MenuOpenSecond, None), (MenuViewDiff, None), (MenuCompare, None), ] def show(self): if len(self.caller.selected_rows) == 0: return context_menu = GtkContextMenu(self.structure, self.conditions, self.callbacks) context_menu.show(self.event) classes_map = {rabbitvcs.vcs.VCS_SVN: SVNChanges, rabbitvcs.vcs.VCS_GIT: GitChanges} def changes_factory(vcs, path1=None, revision1=None, path2=None, revision2=None): if not vcs: guess = rabbitvcs.vcs.guess(path1) vcs = guess["vcs"] return classes_map[vcs](path1, revision1, path2, revision2) if __name__ == "__main__": from rabbitvcs.ui import main, VCS_OPT (options, args) = main( [VCS_OPT], usage="Usage: rabbitvcs changes [url1@rev1] [url2@rev2]" ) pathrev1 = helper.parse_path_revision_string(args.pop(0)) pathrev2 = (None, None) if len(args) > 0: pathrev2 = helper.parse_path_revision_string(args.pop(0)) window = changes_factory( options.vcs, pathrev1[0], pathrev1[1], pathrev2[0], pathrev2[1] ) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/checkmods.py000066400000000000000000000257751445560650400203610ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.decorators import gtk_unsafe from rabbitvcs.util.log import Log import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.util.contextmenuitems import MenuItem, MenuUpdate, MenuSeparator from rabbitvcs.util.contextmenu import ( GtkFilesContextMenu, GtkContextMenuCaller, GtkFilesContextMenuConditions, GtkContextMenu, ) from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import six.moves._thread import threading from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.checkmods") _ = gettext.gettext helper.gobject_threads_init() class SVNCheckForModifications(InterfaceView): """ Provides a way for the user to see what files have been changed on the repository. """ def __init__(self, paths, base_dir=None): InterfaceView.__init__(self, "checkmods", "CheckMods") self.paths = paths self.base_dir = base_dir self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() self.notebook = self.get_widget("notebook") self.local_mods = SVNCheckLocalModifications( self, self.vcs, self.paths, self.base_dir ) self.remote_mods = SVNCheckRemoteModifications( self, self.vcs, self.paths, self.base_dir ) self.remote_refreshed = False self.load() def on_refresh_clicked(self, widget): if self.notebook.get_current_page() == 0: self.local_mods.refresh() else: self.remote_mods.refresh() def on_notebook_switch_page(self, page, data, page_num): if page_num == 1 and self.remote_refreshed == False: self.remote_mods.refresh() self.remote_refreshed = True # # Helper methods # def load(self): self.local_mods.refresh() class SVNCheckLocalModifications(GtkContextMenuCaller): def __init__(self, caller, vcs, paths, base_dir): self.caller = caller self.vcs = vcs self.svn = vcs.svn() self.items = None self.paths = paths self.base_dir = base_dir self.files_table = rabbitvcs.ui.widget.Table( self.caller.get_widget("local_files_table"), [GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING], [_("Path"), _("Status"), _("Extension")], filters=[ { "callback": rabbitvcs.ui.widget.path_filter, "user_data": {"base_dir": base_dir, "column": 0}, } ], callbacks={ "row-activated": self.on_files_table_row_activated, "mouse-event": self.on_files_table_mouse_event, }, ) def on_files_table_row_activated(self, treeview, event, col): paths = self.files_table.get_selected_row_items(0) self.diff_local(paths[0]) def on_files_table_mouse_event(self, treeview, event, *args): if event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE: paths = self.files_table.get_selected_row_items(0) GtkFilesContextMenu(self, event, self.base_dir, paths).show() def refresh(self): self.action = rabbitvcs.ui.action.SVNAction(self.svn, notification=False) self.action.append(self.svn.get_items, self.paths, self.svn.STATUSES_FOR_CHECK) self.action.append(self.populate_files_table) self.action.schedule() @gtk_unsafe def populate_files_table(self): self.files_table.clear() self.items = self.action.get_result(0) for item in self.items: self.files_table.append( [ item.path, item.simple_content_status(), helper.get_file_extension(item.path), ] ) def diff_local(self, path): helper.launch_diff_tool(path) def on_context_menu_command_finished(self): self.refresh() class SVNCheckRemoteModifications(GtkContextMenuCaller): def __init__(self, caller, vcs, paths, base_dir): self.caller = caller self.vcs = vcs self.svn = vcs.svn() self.items = None self.paths = paths self.base_dir = base_dir self.files_table = rabbitvcs.ui.widget.Table( self.caller.get_widget("remote_files_table"), [ GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, ], [ _("Path"), _("Extension"), _("Text Status"), _("Property Status"), _("Revision"), _("Author"), ], filters=[ { "callback": rabbitvcs.ui.widget.path_filter, "user_data": {"base_dir": base_dir, "column": 0}, } ], callbacks={ "row-activated": self.on_files_table_row_activated, "mouse-event": self.on_files_table_mouse_event, }, ) def on_files_table_row_activated(self, treeview, event, col): paths = self.files_table.get_selected_row_items(0) self.diff_remote(paths[0]) def on_files_table_mouse_event(self, treeview, event, *args): if event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE: paths = self.files_table.get_selected_row_items(0) CheckRemoteModsContextMenu( self, event, self.base_dir, self.vcs, paths ).show() def refresh(self): self.action = rabbitvcs.ui.action.SVNAction(self.svn, notification=False) self.action.append(self.svn.get_remote_updates, self.paths) self.action.append(self.populate_files_table) self.action.schedule() @gtk_unsafe def populate_files_table(self): self.files_table.clear() self.items = self.action.get_result(0) for item in self.items: revision = -1 author = "" if item.revision is not None: revision = item.revision if item.author is not None: author = item.author self.files_table.append( [ item.path, helper.get_file_extension(item.path), item.remote_content, item.remote_metadata, str(revision), author, ] ) def diff_remote(self, path): from rabbitvcs.ui.diff import SVNDiff path_local = path path_remote = self.svn.get_repo_url(path_local) self.action = rabbitvcs.ui.action.SVNAction(self.svn, notification=False) self.action.append(SVNDiff, path_local, None, path_remote, "HEAD") self.action.schedule() def on_context_menu_command_finished(self): self.refresh() class MenuViewDiff(MenuItem): identifier = "RabbitVCS::View_Diff" label = _("View unified diff") icon = "rabbitvcs-diff" class MenuCompare(MenuItem): identifier = "RabbitVCS::Compare" label = _("Compare side by side") icon = "rabbitvcs-compare" class CheckRemoteModsContextMenuConditions(GtkFilesContextMenuConditions): def __init__(self, vcs, paths=[]): GtkFilesContextMenuConditions.__init__(self, vcs, paths) def update(self, data=None): return True def view_diff(self, data=None): return self.path_dict["exists"] and self.path_dict["length"] == 1 def compare(self, data=None): return self.path_dict["exists"] and self.path_dict["length"] == 1 class CheckRemoteModsContextMenuCallbacks(object): def __init__(self, caller, base_dir, vcs, paths=[]): self.caller = caller self.base_dir = base_dir self.vcs = vcs self.svn = self.vcs.svn() self.paths = paths def update(self, data1=None, data2=None): proc = helper.launch_ui_window("update", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def view_diff(self, data1=None, data2=None): self.caller.diff_remote(self.paths[0]) def compare(self, data1=None, data2=None): from rabbitvcs.ui.diff import SVNDiff path_local = self.paths[0] path_remote = self.svn.get_repo_url(path_local) self.action = rabbitvcs.ui.action.SVNAction(self.svn, notification=False) self.action.append( SVNDiff, path_local, None, path_remote, "HEAD", sidebyside=True ) self.action.schedule() class CheckRemoteModsContextMenu(object): def __init__(self, caller, event, base_dir, vcs, paths=[]): self.caller = caller self.event = event self.paths = paths self.base_dir = base_dir self.vcs = vcs self.conditions = CheckRemoteModsContextMenuConditions(self.vcs, paths) self.callbacks = CheckRemoteModsContextMenuCallbacks( self.caller, self.base_dir, self.vcs, paths ) self.structure = [ (MenuViewDiff, None), (MenuCompare, None), (MenuSeparator, None), (MenuUpdate, None), ] def show(self): if len(self.paths) == 0: return context_menu = GtkContextMenu(self.structure, self.conditions, self.callbacks) context_menu.show(self.event) classes_map = {rabbitvcs.vcs.VCS_SVN: SVNCheckForModifications} def checkmods_factory(paths, base_dir): guess = rabbitvcs.vcs.guess(paths[0]) return classes_map[guess["vcs"]](paths, base_dir) if __name__ == "__main__": from rabbitvcs.ui import main, BASEDIR_OPT (options, paths) = main( [BASEDIR_OPT], usage="Usage: rabbitvcs checkmods [url_or_path]" ) window = checkmods_factory(paths, options.base_dir) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/checkout.py000066400000000000000000000215741445560650400202170ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.ui.updateto import GitUpdateToRevision import rabbitvcs.vcs from rabbitvcs.util.strings import S import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class Checkout(InterfaceView): """ Provides an interface to check out a working copy. Pass it the destination path. """ def __init__(self, path=None, url=None, revision=None): InterfaceView.__init__(self, "checkout", "Checkout") self.path = path self.vcs = rabbitvcs.vcs.VCS() self.repositories = rabbitvcs.ui.widget.ComboBox( self.get_widget("repositories"), helper.get_repository_paths() ) # We must set a signal handler for the Gtk.Entry inside the combobox # Because glade will not retain that information self.repositories.set_child_signal( "key-release-event", self.on_repositories_key_released ) self.destination = helper.get_user_path() if path is not None: self.destination = path self.get_widget("destination").set_text(S(path).display()) if url is not None: self.repositories.set_child_text(url) self.complete = False # # UI Signal Callback Methods # def _parse_path(self, path): if path.startswith("file://"): path = helper.unquote(path) path = path[7:] return path def _get_path(self): path = self._parse_path(self.get_widget("destination").get_text()) return os.path.normpath(path) def on_file_chooser_clicked(self, widget, data=None): chooser = rabbitvcs.ui.dialog.FolderChooser() path = chooser.run() if path is not None: self.get_widget("destination").set_text(S(path).display()) def on_repositories_key_released(self, widget, event, *args): if Gdk.keyval_name(event.keyval) == "Return": if self.complete: self.on_ok_clicked(widget) def on_destination_changed(self, widget, data=None): self.check_form() def on_destination_key_released(self, widget, event, *args): if Gdk.keyval_name(event.keyval) == "Return": if self.complete: self.on_ok_clicked(widget) def on_repo_chooser_clicked(self, widget, data=None): from rabbitvcs.ui.browser import SVNBrowserDialog SVNBrowserDialog( self.repositories.get_active_text(), callback=self.on_repo_chooser_closed ) def on_repo_chooser_closed(self, new_url): self.repositories.set_child_text(new_url) self.check_form() def check_form(self): self.complete = True if self.repositories.get_active_text() == "": self.complete = False if self.get_widget("destination").get_text() == "": self.complete = False self.get_widget("ok").set_sensitive(self.complete) class SVNCheckout(Checkout): def __init__(self, path=None, url=None, revision=None): Checkout.__init__(self, path, url, revision) self.get_widget("Checkout").set_title(_("Checkout - %s") % path) self.svn = self.vcs.svn() self.revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("revision_container"), self.svn, revision=revision, url_combobox=self.repositories, expand=True, ) self.get_widget("options_box").show() self.get_widget("revision_selector_box").show() self.check_form() def on_ok_clicked(self, widget): url = self.repositories.get_active_text() path = self._get_path() omit_externals = self.get_widget("omit_externals").get_active() recursive = self.get_widget("recursive").get_active() if not url or not path: rabbitvcs.ui.dialog.MessageBox( _("The repository URL and destination path are both required fields.") ) return revision = self.revision_selector.get_revision_object() self.hide() self.action = rabbitvcs.ui.action.SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Checkout")) self.action.append(self.action.set_status, _("Running Checkout Command...")) self.action.append(helper.save_repository_path, url) self.action.append( self.svn.checkout, helper.quote_url(url), path, recurse=recursive, revision=revision, ignore_externals=omit_externals, ) self.action.append(self.action.set_status, _("Completed Checkout")) self.action.append(self.action.finish) self.action.schedule() def on_repositories_changed(self, widget, data=None): # Do not use quoting for this bit url = self.repositories.get_active_text() tmp = url.replace("//", "/").split("/")[1:] append = "" prev = "" while len(tmp): prev = append append = tmp.pop() if append not in ("trunk", "branches", "tags"): break if append in ("http:", "https:", "file:", "svn:", "svn+ssh:"): append = "" break self.get_widget("destination").set_text( S(os.path.join(self.destination, append)).display() ) self.check_form() class GitCheckout(GitUpdateToRevision): def __init__(self, path, url, revision): GitUpdateToRevision.__init__(self, path, revision) self.get_widget("Update").set_title(_("Checkout - %s") % path) self.get_widget("options_box").hide() class GitCheckoutQuiet(object): def __init__(self, path): self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(path) self.action = rabbitvcs.ui.action.GitAction(self.git, run_in_thread=False) self.action.append(self.git.checkout, [path]) self.action.schedule() classes_map = {rabbitvcs.vcs.VCS_SVN: SVNCheckout, rabbitvcs.vcs.VCS_GIT: GitCheckout} def checkout_factory(vcs, path=None, url=None, revision=None, quiet=False): if not vcs: guess = rabbitvcs.vcs.guess(path) vcs = guess["vcs"] if vcs == rabbitvcs.vcs.VCS_DUMMY: return SVNCheckout(path, url, revision) elif vcs == rabbitvcs.vcs.VCS_GIT: if quiet: return GitCheckoutQuiet(path) else: return GitCheckout(path, url, revision) return classes_map[vcs](path, url, revision) if __name__ == "__main__": from rabbitvcs.ui import main, REVISION_OPT, VCS_OPT, QUIET_OPT (options, args) = main( [REVISION_OPT, VCS_OPT, QUIET_OPT], usage="Usage: rabbitvcs checkout --vcs=[git|svn] [url] [path]", ) # If two arguments are passed: # The first argument is expected to be a url # The second argument is expected to be a path # If one argument is passed: # If the argument exists, it is a path # Otherwise, it is a url path = url = None if len(args) == 2: path = args[0] url = args[1] elif len(args) == 1: if os.path.exists(args[0]): path = args[0] else: url = args[0] if options.quiet: window = checkout_factory( options.vcs, path=path, url=url, revision=options.revision, quiet=options.quiet, ) else: window = checkout_factory( options.vcs, path=path, url=url, revision=options.revision, quiet=options.quiet, ) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/clean.py000066400000000000000000000067061445560650400174740ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.vcs import rabbitvcs.ui.widget from rabbitvcs.ui.action import GitAction from rabbitvcs.ui import InterfaceView import time from datetime import datetime from gi.repository import Gtk, GObject, Gdk, Pango # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class GitClean(InterfaceView): """ Provides a UI to clean your repository of untracked files """ def __init__(self, path): InterfaceView.__init__(self, "clean", "Clean") self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(path) self.path = path def on_ok_clicked(self, widget): remove_dir = self.get_widget("remove_directories").get_active() remove_ignored_too = self.get_widget("remove_ignored_too").get_active() remove_only_ignored = self.get_widget("remove_only_ignored").get_active() dry_run = self.get_widget("dryrun").get_active() force = self.get_widget("force").get_active() self.hide() self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Clean")) self.action.append(self.action.set_status, _("Running Clean Command...")) self.action.append( self.git.clean, self.path, remove_dir, remove_ignored_too, remove_only_ignored, dry_run, force, ) self.action.append(self.action.set_status, _("Completed Clean")) self.action.append(self.action.finish) self.action.schedule() def on_remove_ignored_too_toggled(self, widget): remove_ignored_too = self.get_widget("remove_ignored_too") remove_only_ignored = self.get_widget("remove_only_ignored") if remove_ignored_too.get_active(): remove_only_ignored.set_active(False) def on_remove_only_ignored_toggled(self, widget): remove_ignored_too = self.get_widget("remove_ignored_too") remove_only_ignored = self.get_widget("remove_only_ignored") if remove_only_ignored.get_active(): remove_ignored_too.set_active(False) if __name__ == "__main__": from rabbitvcs.ui import main (options, paths) = main(usage="Usage: rabbitvcs clean path") window = GitClean(paths[0]) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/cleanup.py000066400000000000000000000046701445560650400200370ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.vcs from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui import InterfaceNonView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class SVNCleanup(InterfaceNonView): """ This class provides a handler to the Cleanup window view. The idea is that it displays a large folder icon with a label like "Please Wait...". Then when it finishes cleaning up, the label will change to "Finished cleaning up /path/to/folder" """ def __init__(self, path): InterfaceNonView.__init__(self) self.path = path self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() def start(self): self.action = SVNAction(self.svn, register_gtk_quit=self.gtk_quit_is_set()) self.action.append(self.action.set_header, _("Cleanup")) self.action.append(self.action.set_status, _("Cleaning Up...")) self.action.append(self.svn.cleanup, self.path) self.action.append(self.action.set_status, _("Completed Cleanup")) self.action.append(self.action.finish) self.action.schedule() if __name__ == "__main__": from rabbitvcs.ui import main (options, paths) = main(usage="Usage: rabbitvcs cleanup [path]") window = SVNCleanup(paths[0]) window.register_gtk_quit() window.start() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/clone.py000066400000000000000000000115171445560650400175060ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.vcs from rabbitvcs.util.strings import S import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui.checkout import Checkout from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class GitClone(Checkout): def __init__(self, path=None, url=None): Checkout.__init__(self, path, url) self.git = self.vcs.git() self.get_widget("Checkout").set_title(_("Clone")) self.get_widget("repo_chooser").hide() self.get_widget("options_box").hide() self.get_widget("revision_selector_box").hide() self.default_text() self.check_form() def on_ok_clicked(self, widget): url = self.repositories.get_active_text().strip() path = self._get_path().strip() if not url or not path: rabbitvcs.ui.dialog.MessageBox( _("The repository URL and destination path are both required fields.") ) return self.hide() self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Clone")) self.action.append(self.action.set_status, _("Running Clone Command...")) self.action.append(helper.save_repository_path, url) self.action.append(self.git.clone, url, path) self.action.append(self.action.set_status, _("Completed Clone")) self.action.append(self.action.finish) self.action.schedule() def on_repositories_changed(self, widget, data=None): url = self.repositories.get_active_text() tmp = [x.strip() for x in url.split("/") if x.strip()] if tmp and tmp[0].lower() in ("http:", "https:", "file:", "git:"): del tmp[0] append = tmp[-1] if tmp else "" if append.endswith(".git"): append = append[:-4] helper.run_in_main_thread( self.get_widget("destination").set_text, S(os.path.join(self.destination, append)).display(), ) self.check_form() def default_text(self): # Use a repo url from the clipboard by default. clipboard = Gtk.Clipboard.get(Gdk.Atom.intern("CLIPBOARD", False)) text = clipboard.wait_for_text() if text and text.endswith((".git", ".git/")): self.repositories.set_child_text(text) def check_form(self): self.complete = True if self.repositories.get_active_text() == "": self.complete = False if self.get_widget("destination").get_text() == "": self.complete = False self.get_widget("ok").set_sensitive(self.complete) classes_map = {rabbitvcs.vcs.VCS_GIT: GitClone} def clone_factory(classes_map, vcs, path=None, url=None): return classes_map[vcs](path, url) if __name__ == "__main__": from rabbitvcs.ui import main, VCS_OPT (options, args) = main( [VCS_OPT], usage="Usage: rabbitvcs clone --vcs=git [url] [path]" ) # Default to using git vcs = rabbitvcs.vcs.VCS_GIT if options.vcs: vcs = options.vcs # If two arguments are passed: # The first argument is expected to be a url # The second argument is expected to be a path # If one argument is passed: # If the argument exists, it is a path # Otherwise, it is a url path = url = None if len(args) == 2: path = args[0] url = args[1] elif len(args) == 1: if os.path.exists(args[0]): path = args[0] else: url = args[0] window = clone_factory(classes_map, vcs, path=path, url=url) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/commit.py000066400000000000000000000337651445560650400177070ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.vcs.status from rabbitvcs.util.decorators import gtk_unsafe from rabbitvcs.util.log import Log from rabbitvcs.util.strings import S import rabbitvcs.util import rabbitvcs.ui.dialog import rabbitvcs.ui.widget import rabbitvcs.ui.action from rabbitvcs.util.contextmenu import GtkFilesContextMenu, GtkContextMenuCaller from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk, GLib # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import six.moves._thread from time import sleep from rabbitvcs.util import helper from gi import require_version require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.commit") _ = gettext.gettext helper.gobject_threads_init() class Commit(InterfaceView, GtkContextMenuCaller): """ Provides a user interface for the user to commit working copy changes to a repository. Pass it a list of local paths to commit. """ SETTINGS = rabbitvcs.util.settings.SettingsManager() TOGGLE_ALL = False SHOW_UNVERSIONED = SETTINGS.get("general", "show_unversioned_files") # This keeps track of any changes that the user has made to the row # selections changes = {} def __init__(self, paths, base_dir=None, message=None): """ @type paths: list of strings @param paths: A list of local paths. """ InterfaceView.__init__(self, "commit", "Commit") self.base_dir = base_dir self.vcs = rabbitvcs.vcs.VCS() self.items = [] self.files_table = rabbitvcs.ui.widget.Table( self.get_widget("files_table"), [ GObject.TYPE_BOOLEAN, rabbitvcs.ui.widget.TYPE_HIDDEN_OBJECT, rabbitvcs.ui.widget.TYPE_PATH, GObject.TYPE_STRING, rabbitvcs.ui.widget.TYPE_STATUS, GObject.TYPE_STRING, ], [ rabbitvcs.ui.widget.TOGGLE_BUTTON, "", _("Path"), _("Extension"), _("Text Status"), _("Property Status"), ], filters=[ { "callback": rabbitvcs.ui.widget.path_filter, "user_data": {"base_dir": base_dir, "column": 2}, } ], callbacks={ "row-activated": self.on_files_table_row_activated, "mouse-event": self.on_files_table_mouse_event, "key-event": self.on_files_table_key_event, "row-toggled": self.on_files_table_toggle_event, }, flags={"sortable": True, "sort_on": 2}, ) self.files_table.allow_multiple() self.get_widget("toggle_show_unversioned").set_active(self.SHOW_UNVERSIONED) if not message: message = self.SETTINGS.get_multiline("general", "default_commit_message") self.message = rabbitvcs.ui.widget.TextView(self.get_widget("message"), message) self.paths = [] for path in paths: if self.vcs.is_in_a_or_a_working_copy(path): self.paths.append(S(path)) # # Helper functions # def load(self): """ - Gets a listing of file items that are valid for the commit window. - Determines which items should be "activated" by default - Populates the files table with the retrieved items - Updates the status area """ self.get_widget("status").set_text(_("Loading...")) self.items = self.vcs.get_items( self.paths, self.vcs.statuses_for_commit(self.paths) ) self.populate_files_table() # Overrides the GtkContextMenuCaller method def on_context_menu_command_finished(self): self.initialize_items() def should_item_be_activated(self, item): """ Determines if a file should be activated or not """ if ( S(item.path) in self.paths or item.is_versioned() and item.simple_content_status() != rabbitvcs.vcs.status.status_missing ): return True return False def should_item_be_visible(self, item): show_unversioned = self.SHOW_UNVERSIONED if not show_unversioned: if not item.is_versioned(): return False return True def initialize_items(self): """ Initializes the activated cache and loads the file items in a new thread """ GLib.idle_add(self.load) def show_files_table_popup_menu(self, treeview, data): paths = self.files_table.get_selected_row_items(1) GtkFilesContextMenu(self, data, self.base_dir, paths).show() def delete_items(self, widget, event): paths = self.files_table.get_selected_row_items(1) if len(paths) > 0: proc = helper.launch_ui_window("delete", paths) self.rescan_after_process_exit(proc, paths) # # Event handlers # def on_refresh_clicked(self, widget): self.initialize_items() def on_key_pressed(self, widget, event, *args): if InterfaceView.on_key_pressed(self, widget, event, *args): return True if ( event.state & Gdk.ModifierType.CONTROL_MASK and Gdk.keyval_name(event.keyval) == "Return" ): self.on_ok_clicked(widget) return True def on_toggle_show_all_toggled(self, widget, data=None): self.TOGGLE_ALL = not self.TOGGLE_ALL self.changes.clear() for row in self.files_table.get_items(): row[0] = self.TOGGLE_ALL self.changes[row[1]] = self.TOGGLE_ALL def on_toggle_show_unversioned_toggled(self, widget, *args): self.SHOW_UNVERSIONED = widget.get_active() self.populate_files_table() # Save this preference for future commits. if ( self.SETTINGS.get("general", "show_unversioned_files") != self.SHOW_UNVERSIONED ): self.SETTINGS.set( "general", "show_unversioned_files", self.SHOW_UNVERSIONED ) self.SETTINGS.write() def on_files_table_row_activated(self, treeview, event, col): paths = self.files_table.get_selected_row_items(1) pathrev1 = helper.create_path_revision_string(paths[0], "base") pathrev2 = helper.create_path_revision_string(paths[0], "working") proc = helper.launch_ui_window("diff", ["-s", pathrev1, pathrev2]) self.rescan_after_process_exit(proc, paths) def on_files_table_key_event(self, treeview, event, *args): if Gdk.keyval_name(event.keyval) == "Delete": self.delete_items(treeview, event) def on_files_table_mouse_event(self, treeview, event, *args): if event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE: self.show_files_table_popup_menu(treeview, event) def on_previous_messages_clicked(self, widget, data=None): dialog = rabbitvcs.ui.dialog.PreviousMessages() message = dialog.run() if message is not None: self.message.set_text(S(message).display()) def populate_files_table(self): """ First clears and then populates the files table based on the items retrieved in self.load() """ self.files_table.clear() n = 0 m = 0 for item in self.items: if item.path in self.changes: checked = self.changes[item.path] else: checked = self.should_item_be_activated(item) if item.is_versioned(): n += 1 else: m += 1 if not self.should_item_be_visible(item): continue self.files_table.append( [ checked, S(item.path), item.path, helper.get_file_extension(item.path), item.simple_content_status(), item.simple_metadata_status(), ] ) self.get_widget("status").set_text( _("Found %(changed)d changed and %(unversioned)d unversioned item(s)") % {"changed": n, "unversioned": m} ) class SVNCommit(Commit): def __init__(self, paths, base_dir=None, message=None): Commit.__init__(self, paths, base_dir, message) self.get_widget("commit_to_box").show() self.get_widget("to").set_text( S(self.vcs.svn().get_repo_url(self.base_dir)).display() ) self.items = None if len(self.paths): self.initialize_items() def on_ok_clicked(self, widget, data=None): items = self.files_table.get_activated_rows(1) self.hide() if len(items) == 0: self.close() return added = 0 recurse = False for item in items: status = self.vcs.status(item, summarize=False).simple_content_status() try: if status == rabbitvcs.vcs.status.status_unversioned: self.vcs.svn().add(item) added += 1 elif status == rabbitvcs.vcs.status.status_deleted: recurse = True elif status == rabbitvcs.vcs.status.status_missing: self.vcs.svn().update(item) self.vcs.svn().remove(item) except Exception as e: log.exception(e) ticks = added + len(items) * 2 self.action = rabbitvcs.ui.action.SVNAction( self.vcs.svn(), register_gtk_quit=self.gtk_quit_is_set() ) self.action.set_pbar_ticks(ticks) self.action.append(self.action.set_header, _("Commit")) self.action.append(self.action.set_status, _("Running Commit Command...")) self.action.append(helper.save_log_message, self.message.get_text()), self.action.append(self.do_commit, items, recurse) self.action.append(self.action.finish) self.action.schedule() def do_commit(self, items, recurse): # pysvn.Revision revision = self.vcs.svn().commit( items, self.message.get_text(), recurse=recurse ) self.action.set_status( _("Completed Commit") + " at Revision: " + str(revision.number) ) def on_files_table_toggle_event(self, row, col): # Adds path: True/False to the dict self.changes[row[1]] = row[col] class GitCommit(Commit): def __init__(self, paths, base_dir=None, message=None): Commit.__init__(self, paths, base_dir, message) self.git = self.vcs.git(paths[0]) self.get_widget("commit_to_box").show() active_branch = self.git.get_active_branch() if active_branch: self.get_widget("to").set_text(S(active_branch.name).display()) else: self.get_widget("to").set_text("No active branch") self.items = None if len(self.paths): self.initialize_items() def on_ok_clicked(self, widget, data=None): items = self.files_table.get_activated_rows(1) self.hide() if len(items) == 0: self.close() return staged = 0 for item in items: try: status = self.vcs.status(item, summarize=False).simple_content_status() if status == rabbitvcs.vcs.status.status_missing: self.git.checkout([item]) self.git.remove(item) else: self.git.stage(item) staged += 1 except Exception as e: log.exception(e) ticks = staged + len(items) * 2 self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.set_pbar_ticks(ticks) self.action.append(self.action.set_header, _("Commit")) self.action.append(self.action.set_status, _("Running Commit Command...")) self.action.append(helper.save_log_message, self.message.get_text()) self.action.append(self.git.commit, self.message.get_text()) self.action.append(self.action.set_status, _("Completed Commit")) self.action.append(self.action.finish) self.action.schedule() def on_files_table_toggle_event(self, row, col): # Adds path: True/False to the dict self.changes[row[1]] = row[col] classes_map = {rabbitvcs.vcs.VCS_SVN: SVNCommit, rabbitvcs.vcs.VCS_GIT: GitCommit} def commit_factory(paths, base_dir=None, message=None): guess = rabbitvcs.vcs.guess(paths[0]) return classes_map[guess["vcs"]](paths, base_dir, message) if __name__ == "__main__": from rabbitvcs.ui import main, BASEDIR_OPT (options, paths) = main( [BASEDIR_OPT, (["-m", "--message"], {"help": "add a commit log message"})], usage="Usage: rabbitvcs commit [path1] [path2] ...", ) window = commit_factory(paths, options.base_dir, message=options.message) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/create.py000066400000000000000000000062141445560650400176470ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.ui.action import GitAction import rabbitvcs.ui.dialog from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import subprocess from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class SVNCreate(object): """ Provides an interface to create a svn repository """ # Also, might want to just launch a terminal window instead of this def __init__(self, path): if not os.path.isdir(path): os.makedirs(path) # Let svnadmin return a bad value if a repo already exists there ret = subprocess.call(["/usr/bin/svnadmin", "create", path]) if ret == 0: rabbitvcs.ui.dialog.MessageBox(_("Repository successfully created")) else: rabbitvcs.ui.dialog.MessageBox( _( "There was an error creating the repository. Make sure the given folder is empty." ) ) class GitCreate(object): # Also, might want to just launch a terminal window instead of this def __init__(self, path): self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git() self.path = path self.action = GitAction(self.git, register_gtk_quit=True) self.action.append(self.action.set_header, _("Initialize Repository")) self.action.append(self.action.set_status, _("Setting up repository...")) self.action.append(self.git.initialize_repository, self.path) self.action.append(self.action.set_status, _("Completed repository setup")) self.action.append(self.action.finish) self.action.schedule() classes_map = {rabbitvcs.vcs.VCS_SVN: SVNCreate, rabbitvcs.vcs.VCS_GIT: GitCreate} if __name__ == "__main__": from rabbitvcs.ui import main, VCS_OPT, VCS_OPT_ERROR (options, paths) = main( [VCS_OPT], usage="Usage: rabbitvcs create --vcs [svn|git] path" ) if options.vcs: window = classes_map[options.vcs](paths[0]) if options.vcs == rabbitvcs.vcs.VCS_GIT: Gtk.main() else: rabbitvcs.ui.dialog.MessageBox(VCS_OPT_ERROR) rabbitvcs-0.19/rabbitvcs/ui/createpatch.py000066400000000000000000000221521445560650400206660ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.ui.commit import SVNCommit, GitCommit from rabbitvcs.util.log import Log from rabbitvcs.util.strings import S import rabbitvcs.util import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui.action import SVNAction, GitAction from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import tempfile import shutil import six.moves._thread from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.createpatch") _ = gettext.gettext helper.gobject_threads_init() class CreatePatch(InterfaceView): """ Provides a user interface for the user to create a Patch file """ def __init__(self, paths, base_dir): """ @type paths: list of strings @param paths: A list of local paths. """ InterfaceView.__init__(self, "commit", "Commit") # Modify the Commit window to what we need for Create Patch window = self.get_widget("Commit") window.set_title(_("Create Patch")) window.resize(640, 400) self.get_widget("commit_to_box").hide() self.get_widget("add_message_box").hide() self.paths = paths self.base_dir = base_dir self.vcs = rabbitvcs.vcs.VCS() self.activated_cache = {} self.common = helper.get_common_directory(paths) if not self.vcs.is_versioned(self.common): rabbitvcs.ui.dialog.MessageBox(_("The given path is not a working copy")) raise SystemExit() self.files_table = rabbitvcs.ui.widget.Table( self.get_widget("files_table"), [ GObject.TYPE_BOOLEAN, rabbitvcs.ui.widget.TYPE_HIDDEN_OBJECT, rabbitvcs.ui.widget.TYPE_PATH, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, ], [ rabbitvcs.ui.widget.TOGGLE_BUTTON, "", _("Path"), _("Extension"), _("Text Status"), _("Property Status"), ], filters=[ { "callback": rabbitvcs.ui.widget.path_filter, "user_data": {"base_dir": base_dir, "column": 2}, } ], callbacks={ "row-activated": self.on_files_table_row_activated, "mouse-event": self.on_files_table_mouse_event, "key-event": self.on_files_table_key_event, }, flags={"sortable": True, "sort_on": 2}, ) self.files_table.allow_multiple() self.items = None self.initialize_items() # # Helper functions # def choose_patch_path(self): path = "" dialog = Gtk.FileChooserDialog( title=_("Create Patch"), parent=None, action=Gtk.FileChooserAction.SAVE ) dialog.add_button(_("_Cancel"), Gtk.ResponseType.CANCEL) dialog.add_button(_("_Create"), Gtk.ResponseType.OK) dialog.set_do_overwrite_confirmation(True) dialog.set_default_response(Gtk.ResponseType.OK) dialog.set_current_folder_uri( helper.get_common_directory(self.paths).replace("file://", "") ) response = dialog.run() if response == Gtk.ResponseType.OK: path = dialog.get_filename() dialog.destroy() return path class SVNCreatePatch(CreatePatch, SVNCommit): def __init__(self, paths, base_dir=None): CreatePatch.__init__(self, paths, base_dir) self.svn = self.vcs.svn() # # Event handlers # def on_ok_clicked(self, widget, data=None): items = self.files_table.get_activated_rows(1) self.hide() if len(items) == 0: self.close() return path = self.choose_patch_path() if not path: self.close() return ticks = len(items) * 2 self.action = rabbitvcs.ui.action.SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set() ) self.action.set_pbar_ticks(ticks) self.action.append(self.action.set_header, _("Create Patch")) self.action.append(self.action.set_status, _("Creating Patch File...")) def create_patch_action(patch_path, patch_items, base_dir): fileObj = open(patch_path, "w") # PySVN takes a path to create its own temp files... temp_dir = tempfile.mkdtemp(prefix=rabbitvcs.TEMP_DIR_PREFIX) os.chdir(base_dir) # Add to the Patch file only the selected items for item in patch_items: rel_path = helper.get_relative_path(base_dir, item) diff_text = self.svn.diff( temp_dir, rel_path, self.svn.revision("base"), rel_path, self.svn.revision("working"), ) fileObj.write(diff_text) fileObj.close() # Note: if we don't want to ignore errors here, we could define a # function that logs failures. shutil.rmtree(temp_dir, ignore_errors=True) self.action.append(create_patch_action, path, items, self.common) self.action.append(self.action.set_status, _("Patch File Created")) self.action.append(self.action.finish) self.action.schedule() # TODO: Open the diff file (meld is going to add support in a future version :() # helper.launch_diff_tool(path) class GitCreatePatch(CreatePatch, GitCommit): def __init__(self, paths, base_dir=None): CreatePatch.__init__(self, paths, base_dir) self.git = self.vcs.git(paths[0]) # # Event handlers # def on_ok_clicked(self, widget, data=None): items = self.files_table.get_activated_rows(1) self.hide() if len(items) == 0: self.close() return path = self.choose_patch_path() if not path: self.close() return ticks = len(items) * 2 self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.set_pbar_ticks(ticks) self.action.append(self.action.set_header, _("Create Patch")) self.action.append(self.action.set_status, _("Creating Patch File...")) def create_patch_action(patch_path, patch_items, base_dir): fileObj = open(patch_path, "w") # PySVN takes a path to create its own temp files... temp_dir = tempfile.mkdtemp(prefix=rabbitvcs.TEMP_DIR_PREFIX) os.chdir(base_dir) # Add to the Patch file only the selected items for item in patch_items: rel_path = helper.get_relative_path(base_dir, item) diff_text = self.git.diff( rel_path, self.git.revision("HEAD"), rel_path, self.git.revision("WORKING"), ) fileObj.write(diff_text) fileObj.close() # Note: if we don't want to ignore errors here, we could define a # function that logs failures. shutil.rmtree(temp_dir, ignore_errors=True) self.action.append(create_patch_action, path, items, self.common) self.action.append(self.action.set_status, _("Patch File Created")) self.action.append(self.action.finish) self.action.schedule() classes_map = { rabbitvcs.vcs.VCS_SVN: SVNCreatePatch, rabbitvcs.vcs.VCS_GIT: GitCreatePatch, } def createpatch_factory(paths, base_dir): guess = rabbitvcs.vcs.guess(paths[0]) return classes_map[guess["vcs"]](paths, base_dir) if __name__ == "__main__": from rabbitvcs.ui import main, BASEDIR_OPT (options, paths) = main( [BASEDIR_OPT], usage="Usage: rabbitvcs createpatch [path1] [path2] ..." ) window = createpatch_factory(paths, options.base_dir) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/delete.py000066400000000000000000000073731445560650400176550ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.log import Log import rabbitvcs.vcs from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui import InterfaceNonView from gi.repository import Gtk, GObject # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path from rabbitvcs.util import helper from gi import require_version require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.delete") _ = gettext.gettext class Delete(InterfaceNonView): """ This class provides a handler to Delete functionality. """ def __init__(self, paths): InterfaceNonView.__init__(self) self.paths = paths self.vcs = rabbitvcs.vcs.VCS() def start(self): # From the given paths, determine which are versioned and which are not versioned = [] unversioned = [] for path in self.paths: if self.vcs.is_versioned(path): versioned.append(path) elif os.path.exists(path): unversioned.append(path) # If there are unversioned files, confirm that the user wants to # delete those. Default to true. result = True if unversioned: item = None if len(unversioned) == 1: item = unversioned[0] confirm = rabbitvcs.ui.dialog.DeleteConfirmation(item) result = confirm.run() # If the user wants to continue (or there are no unversioned files) # remove or delete the given files if result == Gtk.ResponseType.OK or result == True: if versioned: try: self.vcs_remove(versioned, force=True) except Exception as e: log.exception() return if unversioned: for path in unversioned: helper.delete_item(path) class SVNDelete(Delete): def __init__(self, paths): Delete.__init__(self, paths) def vcs_remove(self, paths, **kwargs): if rabbitvcs.vcs.guess(paths[0])["vcs"] == rabbitvcs.vcs.VCS_SVN: self.vcs.svn().remove(paths, **kwargs) class GitDelete(Delete): def __init__(self, paths): Delete.__init__(self, paths) def vcs_remove(self, paths, **kwargs): if rabbitvcs.vcs.guess(paths[0])["vcs"] == rabbitvcs.vcs.VCS_GIT: self.vcs.git(paths[0]).remove(paths) classes_map = {rabbitvcs.vcs.VCS_SVN: SVNDelete, rabbitvcs.vcs.VCS_GIT: GitDelete} def delete_factory(paths): guess = rabbitvcs.vcs.guess(paths[0]) return classes_map[guess["vcs"]](paths) if __name__ == "__main__": from rabbitvcs.ui import main (options, paths) = main(usage="Usage: rabbitvcs delete [path1] [path2] ...") window = delete_factory(paths) window.register_gtk_quit() window.start() rabbitvcs-0.19/rabbitvcs/ui/dialog.py000066400000000000000000000431121445560650400176410ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs.util.strings import S import rabbitvcs.util.helper import rabbitvcs.ui.wraplabel import rabbitvcs.ui.widget from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk, Pango # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from gettext import gettext as _ import os.path import gi gi.require_version("Gtk", "3.0") ERROR_NOTICE = _( """\ An error has occurred in the RabbitVCS Nautilus extension. Please contact the \ RabbitVCS team with the error details listed below:""" % (rabbitvcs.WEBSITE) ) class PreviousMessages(InterfaceView): def __init__(self): InterfaceView.__init__(self, "dialogs/previous_messages", "PreviousMessages") self.message = rabbitvcs.ui.widget.TextView(self.get_widget("prevmes_message")) self.message_table = rabbitvcs.ui.widget.Table( self.get_widget("prevmes_table"), [GObject.TYPE_STRING, GObject.TYPE_STRING], [_("Date"), _("Message")], filters=[ { "callback": rabbitvcs.ui.widget.long_text_filter, "user_data": {"column": 1, "cols": 80}, } ], callbacks={ "cursor-changed": self.on_prevmes_table_cursor_changed, "row-activated": self.on_prevmes_table_row_activated, }, ) self.entries = rabbitvcs.util.helper.get_previous_messages() if self.entries is None: return None for entry in self.entries: self.message_table.append([entry[0], entry[1]]) if len(self.entries) > 0: self.message.set_text(S(self.entries[0][1]).display()) def run(self): if self.entries is None: return None returner = None self.dialog = self.get_widget("PreviousMessages") result = self.dialog.run() if result == Gtk.ResponseType.OK: returner = self.message.get_text() self.dialog.destroy() return returner def on_prevmes_table_row_activated(self, treeview, data, col): self.update_message_table() self.dialog.response(Gtk.ResponseType.OK) def on_prevmes_table_cursor_changed(self, treeview): self.update_message_table() def update_message_table(self): selection = self.message_table.get_selected_row_items(1) if selection: selected_message = selection[-1] self.message.set_text(S(selected_message).display()) class FolderChooser(object): def __init__(self): self.dialog = Gtk.FileChooserDialog( title=_("Select a Folder"), parent=None, action=Gtk.FileChooserAction.SELECT_FOLDER, ) self.dialog.add_button(_("_Cancel"), Gtk.ResponseType.CANCEL) self.dialog.add_button(_("_Select"), Gtk.ResponseType.OK) self.dialog.set_default_response(Gtk.ResponseType.OK) def run(self): returner = None result = self.dialog.run() if result == Gtk.ResponseType.OK: # returner = self.dialog.get_uri() returner = self.dialog.get_file().get_path() self.dialog.destroy() return returner class Certificate(InterfaceView): """ Provides a dialog to accept/accept_once/deny an ssl certificate """ def __init__( self, realm="", host="", issuer="", valid_from="", valid_until="", fingerprint="", ): InterfaceView.__init__(self, "dialogs/certificate", "Certificate") self.get_widget("cert_realm").set_label(realm) self.get_widget("cert_host").set_label(host) self.get_widget("cert_issuer").set_label(issuer) to_str = _("to") self.get_widget("cert_valid").set_label( "%s %s %s" % (valid_from, to_str, valid_until) ) self.get_widget("cert_fingerprint").set_label(fingerprint) def run(self): """ Returns three possible values: - 0 Deny - 1 Accept Once - 2 Accept Forever """ self.dialog = self.get_widget("Certificate") result = self.dialog.run() self.dialog.destroy() return result class Authentication(InterfaceView): def __init__(self, realm="", may_save=True): InterfaceView.__init__(self, "dialogs/authentication", "Authentication") self.get_widget("auth_realm").set_label(realm) self.get_widget("auth_save").set_sensitive(may_save) def run(self): returner = None self.dialog = self.get_widget("Authentication") result = self.dialog.run() login = self.get_widget("auth_login").get_text() password = self.get_widget("auth_password").get_text() save = self.get_widget("auth_save").get_active() self.dialog.destroy() if result == Gtk.ResponseType.OK: return (True, login, password, save) else: return (False, "", "", False) class CertAuthentication(InterfaceView): def __init__(self, realm="", may_save=True): InterfaceView.__init__( self, "dialogs/cert_authentication", "CertAuthentication" ) self.get_widget("certauth_realm").set_label(realm) self.get_widget("certauth_save").set_sensitive(may_save) def run(self): self.dialog = self.get_widget("CertAuthentication") result = self.dialog.run() password = self.get_widget("certauth_password").get_text() save = self.get_widget("certauth_save").get_active() self.dialog.destroy() if result == Gtk.ResponseType.OK: return (True, password, save) else: return (False, "", False) class SSLClientCertPrompt(InterfaceView): def __init__(self, realm="", may_save=True): InterfaceView.__init__( self, "dialogs/ssl_client_cert_prompt", "SSLClientCertPrompt" ) self.get_widget("sslclientcert_realm").set_label(realm) self.get_widget("sslclientcert_save").set_sensitive(may_save) def on_sslclientcert_browse_clicked(self, widget, data=None): filechooser = FileChooser() cert = filechooser.run() if cert is not None: self.get_widget("sslclientcert_path").set_text(S(cert).display()) def run(self): self.dialog = self.get_widget("SSLClientCertPrompt") result = self.dialog.run() cert = self.get_widget("sslclientcert_path").get_text() save = self.get_widget("sslclientcert_save").get_active() self.dialog.destroy() if result == Gtk.ResponseType.OK: return (True, cert, save) else: return (False, "", False) class Property(InterfaceView): def __init__(self, name="", value="", recurse=True): InterfaceView.__init__(self, "dialogs/property", "Property") self.save_name = name self.save_value = value self.name = rabbitvcs.ui.widget.ComboBox( self.get_widget("property_name"), [ # default svn properties "svn:author", "svn:autoversioned", "svn:date", "svn:eol-style", "svn:executable", "svn:externals", "svn:ignore", "svn:keywords", "svn:log", "svn:mergeinfo", "svn:mime-type", "svn:needs-lock", "svn:special", ], ) self.name.set_child_text(name) self.value = rabbitvcs.ui.widget.TextView( self.get_widget("property_value"), value ) self.recurse = self.get_widget("property_recurse") self.recurse.set_active(recurse) def run(self): self.dialog = self.get_widget("Property") result = self.dialog.run() if result == Gtk.ResponseType.OK: self.save() self.dialog.destroy() return (self.save_name, self.save_value, self.recurse.get_active()) def save(self): self.save_name = self.name.get_active_text() self.save_value = self.value.get_text() self.save_recurse = self.recurse.get_active() class FileChooser(object): def __init__(self, title=_("Select a File"), folder=None): self.dialog = Gtk.FileChooserDialog( title=title, parent=None, action=Gtk.FileChooserAction.OPEN ) self.dialog.add_button(_("_Cancel"), Gtk.ResponseType.CANCEL) self.dialog.add_button(_("_Open"), Gtk.ResponseType.OK) if folder is not None: self.dialog.set_current_folder(folder) self.dialog.set_default_response(Gtk.ResponseType.OK) def run(self): returner = None result = self.dialog.run() if result == Gtk.ResponseType.OK: returner = self.dialog.get_file().get_path() self.dialog.destroy() return returner class FileSaveAs(object): def __init__(self, title=_("Save As..."), folder=None): self.dialog = Gtk.FileChooserDialog( title=title, parent=None, action=Gtk.FileChooserAction.SAVE ) self.dialog.add_button(_("_Cancel"), Gtk.ResponseType.CANCEL) self.dialog.add_button(_("_Save"), Gtk.ResponseType.OK) if folder is not None: self.dialog.set_current_folder(folder) self.dialog.set_default_response(Gtk.ResponseType.OK) def run(self): returner = None result = self.dialog.run() if result == Gtk.ResponseType.OK: returner = self.dialog.get_filename() self.dialog.destroy() return returner class Confirmation(InterfaceView): def __init__(self, message=_("Are you sure you want to continue?")): InterfaceView.__init__(self, "dialogs/confirmation", "Confirmation") self.get_widget("confirm_message").set_text(S(message).display()) def run(self): dialog = self.get_widget("Confirmation") result = dialog.run() dialog.destroy() return result class MessageBox(InterfaceView): def __init__(self, message): InterfaceView.__init__(self, "dialogs/message_box", "MessageBox") self.get_widget("messagebox_message").set_text(S(message).display()) dialog = self.get_widget("MessageBox") dialog.run() dialog.destroy() class DeleteConfirmation(InterfaceView): def __init__(self, path=None): InterfaceView.__init__( self, "dialogs/delete_confirmation", "DeleteConfirmation" ) if path: path = '"%s"' % os.path.basename(path) else: path = _("the selected item(s)") msg = self.get_widget("message").get_label().replace("%item%", path) self.get_widget("message").set_label(msg) def run(self): dialog = self.get_widget("DeleteConfirmation") result = dialog.run() dialog.destroy() return result class TextChange(InterfaceView): def __init__(self, title=None, message=""): InterfaceView.__init__(self, "dialogs/text_change", "TextChange") if title: self.get_widget("TextChange").set_title(title) self.textview = rabbitvcs.ui.widget.TextView( self.get_widget("textchange_message"), message ) def run(self): dialog = self.get_widget("TextChange") result = dialog.run() dialog.destroy() return (result, self.textview.get_text()) class OneLineTextChange(InterfaceView): def __init__(self, title=None, label=None, current_text=None): InterfaceView.__init__( self, "dialogs/one_line_text_change", "OneLineTextChange" ) if title: self.get_widget("OneLineTextChange").set_title(title) self.new_text = self.get_widget("new_text") self.label = self.get_widget("label") if label: self.label.set_text(S(label).display()) if current_text: self.new_text.set_text(S(current_text).display()) self.dialog = self.get_widget("OneLineTextChange") def on_key_release_event(self, widget, event, *args): # The Gtk.Dialog.response() method emits the "response" signal, # which tells Gtk.Dialog.run() asyncronously to stop. This allows the # user to press the "Return" button when done writing in the new text if Gdk.keyval_name(event.keyval) == "Return": self.dialog.response(Gtk.ResponseType.OK) def run(self): result = self.dialog.run() new_text = self.new_text.get_text() self.dialog.destroy() return (result, new_text) class NewFolder(InterfaceView): def __init__(self): InterfaceView.__init__(self, "dialogs/create_folder", "CreateFolder") self.folder_name = self.get_widget("folder_name") self.textview = rabbitvcs.ui.widget.TextView( self.get_widget("log_message"), _("Added a folder to the repository") ) self.on_folder_name_changed(self.folder_name) def on_folder_name_changed(self, widget): complete = widget.get_text() != "" self.get_widget("ok").set_sensitive(complete) def run(self): dialog = self.get_widget("CreateFolder") dialog.set_default_response(Gtk.ResponseType.OK) result = dialog.run() fields_text = (self.folder_name.get_text(), self.textview.get_text()) dialog.destroy() if result == Gtk.ResponseType.OK: return fields_text else: return None class ErrorNotification(InterfaceView): def __init__(self, text): InterfaceView.__init__(self, "dialogs/error_notification", "ErrorNotification") notice = rabbitvcs.ui.wraplabel.WrapLabel(ERROR_NOTICE) notice.set_use_markup(True) notice_box = rabbitvcs.ui.widget.Box(self.get_widget("notice_box")) notice_box.pack_start(notice, True, True, 0) notice_box.show_all() self.textview = rabbitvcs.ui.widget.TextView( self.get_widget("error_text"), text, spellcheck=False ) self.textview.view.modify_font(Pango.FontDescription("monospace")) dialog = self.get_widget("ErrorNotification") dialog.run() dialog.destroy() class NameEmailPrompt(InterfaceView): def __init__(self): InterfaceView.__init__(self, "dialogs/name_email_prompt", "NameEmailPrompt") self.dialog = self.get_widget("NameEmailPrompt") def on_key_release_event(self, widget, event, *args): # The Gtk.Dialog.response() method emits the "response" signal, # which tells Gtk.Dialog.run() asyncronously to stop. This allows the # user to press the "Return" button when done writing in the new text if Gdk.keyval_name(event.keyval) == "Return": self.dialog.response(Gtk.ResponseType.OK) def run(self): result = self.dialog.run() name = self.get_widget("name").get_text() email = self.get_widget("email").get_text() self.dialog.destroy() if result == Gtk.ResponseType.OK: return (name, email) else: return (None, None) class MarkResolvedPrompt(InterfaceView): def __init__(self): InterfaceView.__init__( self, "dialogs/mark_resolved_prompt", "MarkResolvedPrompt" ) def run(self): self.dialog = self.get_widget("MarkResolvedPrompt") result = self.dialog.run() self.dialog.destroy() return result class ConflictDecision(InterfaceView): """ Provides a dialog to make conflict decisions with. User can accept mine, accept theirs, or edit conflicts. """ def __init__(self, filename=""): InterfaceView.__init__(self, "dialogs/conflict_decision", "ConflictDecision") self.get_widget("filename").set_text(S(filename).display()) def run(self): """ The first has three possible values about how to resolve the conflict. - -1 Cancel - 0 Accept Mine - 1 Accept Theirs - 2 Merge Manually """ self.dialog = self.get_widget("ConflictDecision") result = self.dialog.run() self.dialog.destroy() return result class Loading(InterfaceView): def __init__(self): InterfaceView.__init__(self, "dialogs/loading", "Loading") self.get_widget("loading_cancel").set_sensitive(False) self.pbar = rabbitvcs.ui.widget.ProgressBar(self.get_widget("pbar")) self.pbar.start_pulsate() def on_destroy(self, widget): self.close() def on_loading_cancel_clicked(self, widget): self.close() def run(self): self.dialog = self.get_widget("Loading") self.dialog.run() def destroy(self): self.dialog.destroy() rabbitvcs-0.19/rabbitvcs/ui/diff.py000066400000000000000000000227021445560650400173140ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.log import Log from rabbitvcs.util.strings import S from rabbitvcs.ui.action import SVNAction, GitAction import rabbitvcs.vcs from rabbitvcs.ui import InterfaceNonView from rabbitvcs import TEMP_DIR_PREFIX from gi.repository import Gtk, Gdk, GLib # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os from shutil import rmtree import tempfile from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.diff") _ = gettext.gettext class Diff(InterfaceNonView): def __init__( self, path1, revision1=None, path2=None, revision2=None, sidebyside=False ): InterfaceNonView.__init__(self) self.vcs = rabbitvcs.vcs.VCS() self.path1 = path1 self.path2 = path2 self.sidebyside = sidebyside self.temp_dir = tempfile.mkdtemp(prefix=TEMP_DIR_PREFIX) if path2 is None: self.path2 = path1 self.dialog = None def launch(self): try: if self.sidebyside: self.launch_sidebyside_diff() else: self.launch_unified_diff() finally: self.stop_loading() def _build_export_path(self, index, revision, path): dest = helper.get_tmp_path( "rabbitvcs-%s-%s-%s" % (str(index), str(revision)[:5], os.path.basename(path)) ) if os.path.exists(dest): if os.path.isdir(dest): rmtree(dest, ignore_errors=True) else: os.remove(dest) return dest def start_loading(self): self.dialog = rabbitvcs.ui.dialog.Loading() self.dialog.run() def stop_loading(self): # Sometimes the launching will be too fast, and the dialog we're trusted with # cleaning up, may not even have been created! while self.dialog == None: # Wait for dialog's creation. pass self.dialog.close() self.dialog = None class SVNDiff(Diff): def __init__( self, path1, revision1=None, path2=None, revision2=None, sidebyside=False ): Diff.__init__(self, path1, revision1, path2, revision2, sidebyside) self.svn = self.vcs.svn() self.revision1 = self.get_revision_object(revision1, "base") self.revision2 = self.get_revision_object(revision2, "working") GLib.idle_add(self.launch) self.start_loading() def get_revision_object(self, value, default): # If value is a rabbitvcs Revision object, return it if hasattr(value, "is_revision_object"): return value # If value is None, use the default if value is None: return self.svn.revision(default) # If the value is an integer number, return a numerical revision object # otherwise, a string revision value has been passed, use that as "kind" try: value = int(value) return self.svn.revision("number", value) except ValueError: # triggered when passed a string return self.svn.revision(value) def launch_unified_diff(self): """ Launch diff as a unified diff in a text editor or .diff viewer """ action = SVNAction(self.svn, notification=False, run_in_thread=False) diff_text = action.run_single( self.svn.diff, self.temp_dir, self.path1, self.revision1, self.path2, self.revision2, ) if diff_text is None: diff_text = "" fh = tempfile.mkstemp( "-rabbitvcs-" + str(self.revision1) + "-" + str(self.revision2) + ".diff" ) os.write(fh[0], S(diff_text).bytes()) os.close(fh[0]) helper.open_item(fh[1]) def launch_sidebyside_diff(self): """ Launch diff as a side-by-side comparison using our comparison tool """ action = SVNAction(self.svn, notification=False, run_in_thread=False) if self.revision1.kind == "working": dest1 = self.path1 else: dest1 = self._build_export_path(1, self.revision1, self.path1) action.run_single(self.svn.export, self.path1, dest1, self.revision1) action.stop_loader() if self.revision2.kind == "working": dest2 = self.path2 else: dest2 = self._build_export_path(2, self.revision2, self.path2) action.run_single(self.svn.export, self.path2, dest2, self.revision2) action.stop_loader() helper.launch_diff_tool(dest1, dest2) class GitDiff(Diff): def __init__( self, path1, revision1=None, path2=None, revision2=None, sidebyside=False ): Diff.__init__(self, path1, revision1, path2, revision2, sidebyside) self.git = self.vcs.git(path1) self.revision1 = self.get_revision_object(revision1, "HEAD") self.revision2 = self.get_revision_object(revision2, "WORKING") GLib.idle_add(self.launch) self.start_loading() def get_revision_object(self, value, default): # If value is a rabbitvcs Revision object, return it if hasattr(value, "is_revision_object"): return value value_to_pass = value if not value_to_pass: value_to_pass = default # triggered when passed a string return self.git.revision(value_to_pass) def save_diff_to_file(self, path, data): dirname = os.path.dirname(path) if not os.path.isdir(dirname): os.makedirs(dirname) if not data: data = "" file = open(path, "wb") try: try: file.write(S(data).bytes()) except Exception as e: log.exception(e) finally: file.close() def launch_unified_diff(self): """ Launch diff as a unified diff in a text editor or .diff viewer """ action = GitAction(self.git, notification=False, run_in_thread=False) diff_text = action.run_single( self.git.diff, self.path1, self.revision1, self.path2, self.revision2 ) if diff_text is None: diff_text = "" fh = tempfile.mkstemp( "-rabbitvcs-" + str(self.revision1)[:5] + "-" + str(self.revision2)[:5] + ".diff" ) os.write(fh[0], S(diff_text).bytes()) os.close(fh[0]) helper.open_item(fh[1]) def launch_sidebyside_diff(self): """ Launch diff as a side-by-side comparison using our comparison tool """ action = GitAction(self.git, notification=False, run_in_thread=False) if self.revision1.kind != "WORKING": dest1 = self._build_export_path(1, self.revision1, self.path1) self.save_diff_to_file( dest1, action.run_single(self.git.show, self.path1, self.revision1) ) else: dest1 = self.path1 if self.revision2.kind != "WORKING": dest2 = self._build_export_path(2, self.revision2, self.path2) self.save_diff_to_file( dest2, action.run_single(self.git.show, self.path2, self.revision2) ) else: dest2 = self.path2 helper.launch_diff_tool(dest1, dest2) classes_map = {rabbitvcs.vcs.VCS_SVN: SVNDiff, rabbitvcs.vcs.VCS_GIT: GitDiff} def diff_factory( vcs, path1, revision_obj1, path2=None, revision_obj2=None, sidebyside=False ): if not vcs: guess = rabbitvcs.vcs.guess(path1) vcs = guess["vcs"] return classes_map[vcs](path1, revision_obj1, path2, revision_obj2, sidebyside) if __name__ == "__main__": from rabbitvcs.ui import main, VCS_OPT (options, args) = main( [ ( ["-s", "--sidebyside"], { "help": _("View diff as side-by-side comparison"), "action": "store_true", "default": False, }, ), VCS_OPT, ], usage="Usage: rabbitvcs diff [url1@rev1] [url2@rev2]", ) pathrev1 = helper.parse_path_revision_string(args.pop(0)) pathrev2 = (None, None) if len(args) > 0: pathrev2 = helper.parse_path_revision_string(args.pop(0)) diff_factory( options.vcs, pathrev1[0], pathrev1[1], pathrev2[0], pathrev2[1], sidebyside=options.sidebyside, ) rabbitvcs-0.19/rabbitvcs/ui/editconflicts.py000066400000000000000000000132571445560650400212430ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.log import Log import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui.action import SVNAction, GitAction from rabbitvcs.ui import InterfaceNonView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import os.path import six.moves._thread import shutil from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.editconflicts") _ = gettext.gettext class SVNEditConflicts(InterfaceNonView): def __init__(self, path): InterfaceNonView.__init__(self) log.debug("incoming path: %s" % path) self.path = path self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() status = self.svn.status(self.path) if status.simple_content_status() != rabbitvcs.vcs.status.status_complicated: log.debug("The specified file is not conflicted. There is nothing to do.") self.close() return filename = os.path.basename(path) dialog = rabbitvcs.ui.dialog.ConflictDecision(filename) action = dialog.run() dialog.destroy() if action == -1: # Cancel pass elif action == 0: # Accept Mine working = self.get_working_path(path) shutil.copyfile(working, path) self.svn.resolve(path) elif action == 1: # Accept Theirs ancestor, theirs = self.get_revisioned_paths(path) shutil.copyfile(theirs, path) self.svn.resolve(path) elif action == 2: # Merge Manually working = self.get_working_path(path) ancestor, theirs = self.get_revisioned_paths(path) log.debug( "launching merge tool with base: %s, mine: %s, theirs: %s, merged: %s" % (ancestor, working, theirs, path) ) helper.launch_merge_tool( base=ancestor, mine=working, theirs=theirs, merged=path ) dialog = rabbitvcs.ui.dialog.MarkResolvedPrompt() mark_resolved = dialog.run() dialog.destroy() if mark_resolved == 1: self.svn.resolve(path) self.close() def get_working_path(self, path): paths = ["%s.mine" % path, "%s.working" % path] for working in paths: if os.path.exists(working): return working return path def get_revisioned_paths(self, path): """Will return a tuple where the first element is the common ancestor's path and the second is the path of the the file being merged in.""" ancestorPath = "" theirsPath = "" revisionPaths = [] baseDir, baseName = os.path.split(path) log.debug("baseDir: %s, baseName: %s" % (baseDir, baseName)) for name in os.listdir(baseDir): if baseName in name: extension = name.split(".")[-1] log.debug("extension: %s" % extension) if extension.startswith("r"): revision = extension[1:] log.debug("revision: %s" % revision) revisionPaths.append((revision, name)) if len(revisionPaths) == 2: if int(revisionPaths[0][0]) < int(revisionPaths[1][0]): ancestorPath = os.path.join(baseDir, revisionPaths[0][1]) theirsPath = os.path.join(baseDir, revisionPaths[1][1]) else: ancestorPath = os.path.join(baseDir, revisionPaths[1][1]) theirsPath = os.path.join(baseDir, revisionPaths[0][1]) return (ancestorPath, theirsPath) else: log.error( "Unexpected number (%d) of revision paths found" % len(revisionPaths) ) return ("", "") class GitEditConflicts(InterfaceNonView): def __init__(self, path): InterfaceNonView.__init__(self) self.path = path self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(path) helper.launch_merge_tool(self.path) self.close() classes_map = { rabbitvcs.vcs.VCS_SVN: SVNEditConflicts, rabbitvcs.vcs.VCS_GIT: GitEditConflicts, } def editconflicts_factory(path): guess = rabbitvcs.vcs.guess(path) return classes_map[guess["vcs"]](path) if __name__ == "__main__": from rabbitvcs.ui import main, BASEDIR_OPT (options, paths) = main( [BASEDIR_OPT], usage="Usage: rabbitvcs edit-conflicts [path1] [path2] ..." ) window = editconflicts_factory(paths[0]) # No Gtk event pending. # window.register_gtk_quit() # Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/export.py000066400000000000000000000165411445560650400177310ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.vcs from rabbitvcs.util.strings import S from rabbitvcs.ui.action import SVNAction, GitAction from rabbitvcs.ui.dialog import MessageBox from rabbitvcs.ui.clone import GitClone from rabbitvcs.ui.checkout import SVNCheckout from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class SVNExport(SVNCheckout): def __init__(self, path=None, revision=None): SVNCheckout.__init__(self, path, url=None, revision=revision) self.svn = self.vcs.svn() self.get_widget("Checkout").set_title(_("Export - %s") % path) # Determine behavior based on the given path if self.svn.is_in_a_or_a_working_copy(path): # If path is from a working copy, export FROM path and set revision # to working copy self.repositories.set_child_text(path) self.get_widget("destination").set_text("") if revision is None: self.revision_selector.set_kind_working() elif self.svn.is_path_repository_url(path): # If path is a repository, export FROM path self.repositories.set_child_text(path) self.get_widget("destination").set_text("") else: # Path is not a working copy so the user probably wants to export # TO this path self.repositories.set_child_text("") self.get_widget("destination").set_text(S(path).display()) def on_ok_clicked(self, widget): url = self.repositories.get_active_text() path = self._get_path() omit_externals = self.get_widget("omit_externals").get_active() recursive = self.get_widget("recursive").get_active() if not url or not path: MessageBox( _("The repository URL and destination path are both required fields.") ) return if url.startswith("file://"): url = self._parse_path(url) # Cannot do: # url = os.path.normpath(url) # ...in general, since it might be eg. an http URL. Doesn't seem to # affect pySvn though. path = os.path.normpath(path) revision = self.revision_selector.get_revision_object() self.hide() self.action = SVNAction(self.svn, register_gtk_quit=self.gtk_quit_is_set()) self.action.append(self.action.set_header, _("Export")) self.action.append(self.action.set_status, _("Running Export Command...")) self.action.append(helper.save_repository_path, url) self.action.append( self.svn.export, url, path, force=True, recurse=recursive, revision=revision, ignore_externals=omit_externals, ) self.action.append(self.action.set_status, _("Completed Export")) self.action.append(self.action.finish) self.action.schedule() class GitExport(GitClone): def __init__(self, path=None, revision=None): self.vcs = rabbitvcs.vcs.VCS() self.git = None guess = rabbitvcs.vcs.guess(path) if guess["vcs"] == rabbitvcs.vcs.VCS_GIT: self.git = self.vcs.git(path) export_to = "" export_from = path else: export_to = path export_from = "" GitClone.__init__(self, export_to, export_from) self.get_widget("Checkout").set_title(_("Export - %s") % path) self.revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("revision_container"), self.git, revision=revision, url_combobox=self.repositories, expand=True, ) self.get_widget("revision_selector_box").show() def on_ok_clicked(self, widget): url = self.repositories.get_active_text() path = self._get_path() if not url or not path: MessageBox( _("The repository URL and destination path are both required fields.") ) return if url.startswith("file://"): url = self._parse_path(url) # Cannot do: # url = os.path.normpath(url) # ...in general, since it might be eg. an http URL. Doesn't seem to # affect pySvn though. path = os.path.normpath(path) revision = self.revision_selector.get_revision_object() self.hide() self.action = GitAction(self.git, register_gtk_quit=self.gtk_quit_is_set()) self.action.append(self.action.set_header, _("Export")) self.action.append(self.action.set_status, _("Running Export Command...")) self.action.append(helper.save_repository_path, url) self.action.append(self.git.export, url, path, revision=revision) self.action.append(self.action.set_status, _("Completed Export")) self.action.append(self.action.finish) self.action.schedule() def on_repositories_changed(self, widget, data=None): # Do not use quoting for this bit url = self.repositories.get_active_text() tmp = url.replace("//", "/").split("/")[1:] append = "" prev = "" while len(tmp): prev = append append = tmp.pop() if append not in ("trunk", "branches", "tags"): break if append in ("http:", "https:", "file:", "svn:", "svn+ssh:"): append = "" break self.get_widget("destination").set_text( S(os.path.join(self.destination, append)).display() ) self.check_form() classes_map = {rabbitvcs.vcs.VCS_SVN: SVNExport, rabbitvcs.vcs.VCS_GIT: GitExport} def export_factory(vcs, path, revision=None): if not vcs: guess = rabbitvcs.vcs.guess(path) vcs = guess["vcs"] if vcs == rabbitvcs.vcs.VCS_DUMMY: vcs = rabbitvcs.vcs.VCS_SVN return classes_map[vcs](path, revision) if __name__ == "__main__": from rabbitvcs.ui import main, REVISION_OPT, VCS_OPT (options, paths) = main( [REVISION_OPT, VCS_OPT], usage="Usage: rabbitvcs export --vcs=[git|svn] [url_or_path]", ) window = export_factory(options.vcs, paths[0], revision=options.revision) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/ignore.py000066400000000000000000000076771445560650400177050ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.vcs from rabbitvcs.ui.action import SVNAction, GitAction from rabbitvcs.ui import InterfaceNonView, InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from os import getcwd import os.path from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class SVNIgnore(InterfaceNonView): """ This class provides a handler to Ignore functionality. """ def __init__(self, path, pattern, glob=False): """ @type path: string @param path: The path to apply the ignore keyword to @type pattern: string @param pattern: Ignore items with the given pattern @type glob: boolean @param glob: True if the path to ignore is a wildcard "glob" """ InterfaceNonView.__init__(self) self.path = path self.pattern = pattern self.glob = glob self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() prop = self.svn.PROPERTIES["ignore"] self.svn.propset(self.path, prop, self.pattern, recurse=self.glob) raise SystemExit() class GitIgnore(InterfaceView): def __init__(self, path, pattern=""): InterfaceView.__init__(self, "ignore", "Ignore") self.path = path self.pattern = pattern self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(path) ignore_files = self.git.get_ignore_files(path) ignore_file_labels = [] path_dir = os.path.abspath(self.path) if os.path.isfile(path_dir): path_dir = os.path.dirname(path_dir) for ignore_file in ignore_files: label = path if ignore_file.startswith(path_dir): label = ignore_file[len(path_dir) + 1 :] ignore_file_labels.append(label) text = "" if pattern != path: text = pattern self.file_editor = rabbitvcs.ui.widget.MultiFileTextEditor( self.get_widget("fileeditor_container"), _("Ignore file:"), ignore_file_labels, ignore_files, show_add_line=True, line_content=text, ) def on_ok_clicked(self, widget, data=None): self.file_editor.save() self.close() classes_map = {rabbitvcs.vcs.VCS_SVN: SVNIgnore, rabbitvcs.vcs.VCS_GIT: GitIgnore} def ignore_factory(path, pattern): guess = rabbitvcs.vcs.guess(path) return classes_map[guess["vcs"]](path, pattern) if __name__ == "__main__": from rabbitvcs.ui import main (options, args) = main(usage="Usage: rabbitvcs ignore ") path = getcwd() pattern = "" if args: if len(args) == 1: pattern = args[0] else: if args[0] != ".": path = args[0] pattern = args[1] window = ignore_factory(path, pattern) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/import.py000077500000000000000000000067241445560650400177270ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.strings import S import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class SVNImport(InterfaceView): def __init__(self, path): InterfaceView.__init__(self, "import", "Import") self.get_widget("Import").set_title(_("Import - %s") % path) self.path = path self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() if self.svn.is_in_a_or_a_working_copy(path): self.get_widget("repository").set_text( S(self.svn.get_repo_url(path)).display() ) self.repositories = rabbitvcs.ui.widget.ComboBox( self.get_widget("repositories"), helper.get_repository_paths() ) self.message = rabbitvcs.ui.widget.TextView(self.get_widget("message")) def on_ok_clicked(self, widget): url = self.get_widget("repository").get_text() if not url: rabbitvcs.ui.dialog.MessageBox(_("The repository URL field is required.")) return ignore = not self.get_widget("include_ignored").get_active() self.hide() self.action = rabbitvcs.ui.action.SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Import")) self.action.append(self.action.set_status, _("Running Import Command...")) self.action.append( self.svn.import_, self.path, url, self.message.get_text(), ignore=ignore ) self.action.append(self.action.set_status, _("Completed Import")) self.action.append(self.action.finish) self.action.schedule() def on_previous_messages_clicked(self, widget, data=None): dialog = rabbitvcs.ui.dialog.PreviousMessages() message = dialog.run() if message is not None: self.message.set_text(S(message).display()) classes_map = {rabbitvcs.vcs.VCS_SVN: SVNImport} def import_factory(path): vcs = rabbitvcs.vcs.VCS_SVN return classes_map[vcs](path) if __name__ == "__main__": from rabbitvcs.ui import main (options, paths) = main(usage="Usage: rabbitvcs import [path]") window = import_factory(paths[0]) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/lock.py000077500000000000000000000143651445560650400173450ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.log import Log from rabbitvcs.util.strings import S import rabbitvcs.vcs import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.util.contextmenu import GtkFilesContextMenu, GtkContextMenuCaller from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import six.moves._thread import os from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.lock") _ = gettext.gettext helper.gobject_threads_init() class SVNLock(InterfaceView, GtkContextMenuCaller): """ Provides an interface to lock any number of files in a working copy. """ def __init__(self, paths, base_dir): """ @type: paths: list @param: paths: A list of paths to search for versioned files """ InterfaceView.__init__(self, "lock", "Lock") self.paths = paths self.base_dir = base_dir self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() self.files_table = rabbitvcs.ui.widget.Table( self.get_widget("files_table"), [ GObject.TYPE_BOOLEAN, rabbitvcs.ui.widget.TYPE_HIDDEN_OBJECT, rabbitvcs.ui.widget.TYPE_PATH, GObject.TYPE_STRING, GObject.TYPE_STRING, ], [rabbitvcs.ui.widget.TOGGLE_BUTTON, _("Path"), _("Extension"), _("Locked")], filters=[ { "callback": rabbitvcs.ui.widget.path_filter, "user_data": {"base_dir": base_dir, "column": 2}, } ], callbacks={"mouse-event": self.on_files_table_mouse_event}, ) self.message = rabbitvcs.ui.widget.TextView(self.get_widget("message")) self.items = None self.initialize_items() # # Helper functions # # Overrides the GtkContextMenuCaller method def on_context_menu_command_finished(self): self.initialize_items() def initialize_items(self): """ Initializes the activated cache and loads the file items in a new thread """ try: six.moves._thread.start_new_thread(self.load, ()) except Exception as e: log.exception(e) def load(self): self.get_widget("status").set_text(_("Loading...")) self.items = self.vcs.get_items(self.paths) self.populate_files_table() self.get_widget("status").set_text(_("Found %d item(s)") % len(self.items)) def populate_files_table(self): for item in self.items: locked = "" if self.svn.is_locked(item.path): locked = _("Yes") if not self.svn.is_versioned(item.path): continue self.files_table.append( [ True, S(item.path), item.path, helper.get_file_extension(item.path), locked, ] ) def show_files_table_popup_menu(self, treeview, data): paths = self.files_table.get_selected_row_items(1) GtkFilesContextMenu(self, data, self.base_dir, paths).show() # # UI Signal Callbacks # def on_ok_clicked(self, widget, data=None): steal_locks = self.get_widget("steal_locks").get_active() items = self.files_table.get_activated_rows(1) if not items: self.close() return message = self.message.get_text() self.hide() self.action = rabbitvcs.ui.action.SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Get Lock")) self.action.append(self.action.set_status, _("Running Lock Command...")) self.action.append(helper.save_log_message, message) for path in items: self.action.append(self.svn.lock, path, message, force=steal_locks) self.action.append(self.action.set_status, _("Completed Lock")) self.action.append(self.action.finish) self.action.schedule() def on_files_table_mouse_event(self, treeview, event, *args): if event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE: self.show_files_table_popup_menu(treeview, event) def on_select_all_toggled(self, widget, data=None): for row in self.files_table.get_items(): row[0] = self.get_widget("select_all").get_active() def on_previous_messages_clicked(self, widget, data=None): dialog = rabbitvcs.ui.dialog.PreviousMessages() message = dialog.run() if message is not None: self.message.set_text(S(message).display()) classes_map = {rabbitvcs.vcs.VCS_SVN: SVNLock} def lock_factory(paths, base_dir): guess = rabbitvcs.vcs.guess(paths[0]) return classes_map[guess["vcs"]](paths, base_dir) if __name__ == "__main__": from rabbitvcs.ui import main, BASEDIR_OPT (options, paths) = main( [BASEDIR_OPT], usage="Usage: rabbitvcs lock [path1] [path2] ..." ) window = lock_factory(paths, options.base_dir) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/log.py000077500000000000000000001602561445560650400171770ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from __future__ import division, absolute_import from six.moves import range from rabbitvcs import gettext import rabbitvcs.vcs import rabbitvcs.util.settings from rabbitvcs.util.strings import S from rabbitvcs.util.decorators import gtk_unsafe from rabbitvcs.util.contextmenuitems import * from rabbitvcs.util.contextmenu import GtkContextMenu import rabbitvcs.ui.widget from rabbitvcs.ui.dialog import MessageBox from rabbitvcs.ui.action import SVNAction, GitAction, vcs_action_factory from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk import six import threading from locale import strxfrm import os.path from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext REVISION_LABEL = _("Revision") DATE_LABEL = _("Date") AUTHOR_LABEL = _("Author") def revision_grapher(history): """ Expects a list of revision items like so: [ item.commit = "..." item.parents = ["...", "..."] ] Output can be put directly into the CellRendererGraph """ items = [] revisions = [] last_lines = [] color = "#d3b9d3" for item in history: commit = S(item.revision) parents = [] for parent in item.parents: parents.append(S(parent)) if commit not in revisions: revisions.append(commit) index = revisions.index(commit) next_revisions = revisions[:] parents_to_add = [] for parent in parents: if parent not in next_revisions: parents_to_add.append(parent) next_revisions[index : index + 1] = parents_to_add lines = [] for i, revision in enumerate(revisions): if revision in next_revisions: lines.append((i, next_revisions.index(revision), color)) elif revision == commit: for parent in parents: lines.append((i, next_revisions.index(parent), color)) node = (index, "#a9f9d2") items.append((item, node, last_lines, lines)) revisions = next_revisions last_lines = lines return items class Log(InterfaceView): """ Provides an interface to the Log UI """ selected_rows = [] selected_row = [] paths_selected_rows = [] display_items = [] limit = 100 def __init__(self, path): """ @type path: string @param path: A path for which to get log items """ InterfaceView.__init__(self, "log", "Log") self.get_widget("Log").set_title(_("Log - %s") % path) self.vcs = rabbitvcs.vcs.VCS() sm = rabbitvcs.util.settings.SettingsManager() self.datetime_format = sm.get("general", "datetime_format") self.filter_text = None self.path = path self.cache = LogCache() self.rev_first = None self.rev_start = None self.rev_end = None self.rev_max = 1 self.previous_starts = [] self.initialize_revision_labels() self.revision_number_column = 0 self.head_row = 0 self.get_widget("limit").set_text(S(self.limit).display()) self.message = rabbitvcs.ui.widget.TextView(self.get_widget("message")) self.stop_on_copy = False self.revision_clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) style = self.get_widget("revisions_table").get_style_context() textcolor = style.get_color(Gtk.StateFlags.NORMAL) self.orgTextColor = textcolor.to_string() # # UI Signal Callback Methods # def on_destroy(self, widget, data=None): self.destroy() def on_close_clicked(self, widget, data=None): if self.is_loading: self.action.set_cancel(True) self.action.stop() self.set_loading(False) self.close() def on_key_pressed(self, widget, event, *args): InterfaceView.on_key_pressed(self, widget, event) if ( event.state & Gdk.ModifierType.CONTROL_MASK and Gdk.keyval_name(event.keyval).lower() == "c" ): if len(self.revisions_table.get_selected_rows()) > 0: self.copy_revision_text() def on_stop_on_copy_toggled(self, widget): self.stop_on_copy = self.get_widget("stop_on_copy").get_active() if not self.is_loading: self.refresh() def on_refresh_clicked(self, widget): self.limit = int(self.get_widget("limit").get_text()) self.cache.empty() self.load() def on_search(self, widget): tb = self.get_widget("search_buffer") self.filter_text = tb.get_text( tb.get_start_iter(), tb.get_end_iter(), 0 ).lower() self.refresh() # # Revisions table callbacks # # In this UI, we have an ability to filter and display only certain items. def get_displayed_row_items(self, col): items = [] for row in self.selected_rows: items.append(self.display_items[row][col]) return items def on_revisions_table_row_activated(self, treeview, event, col): paths = self.revisions_table.get_displayed_row_items(1) helper.launch_diff_tool(*paths) def on_revisions_table_cursor_changed(self, treeview): if len(self.revisions_table.get_selected_rows()) == 0: return self.paths_table.clear() self.message.set_text("") self.update_revision_message() def on_revisions_table_mouse_event(self, treeview, event, *args): if len(self.revisions_table.get_selected_rows()) == 0: self.message.set_text("") self.paths_table.clear() return if event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE: self.show_revisions_table_popup_menu(treeview, event) # Let the rest be handled by the on_revisions_table_cursor changed event # # Paths table callbacks # def on_paths_table_row_activated(self, treeview, data=None, col=None): try: revision1 = S( self.display_items[self.revisions_table.get_selected_rows()[0]].revision ) revision2 = S( self.display_items[ self.revisions_table.get_selected_rows()[0] + 1 ].revision ) path_item = self.paths_table.get_row( self.paths_table.get_selected_rows()[0] )[1] url = self.root_url + path_item self.view_diff_for_path(url, S(revision1), S(revision2), sidebyside=True) except IndexError: pass def on_paths_table_mouse_event(self, treeview, event, *args): if event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE: self.show_paths_table_popup_menu(treeview, event) def show_paths_table_popup_menu(self, treeview, event): revisions = [] for row in self.revisions_table.get_selected_rows(): line = { "revision": self.display_items[row].revision, "author": self.display_items[row].author, "message": self.display_items[row].message, } if self.display_items[row].parents: line["parents"] = self.display_items[row].parents try: line["next_revision"] = self.display_items[row + 1].revision except IndexError as e: pass try: line["previous_revision"] = self.display_items[row - 1].revision except IndexError as e: pass revisions.append(line) revisions.reverse() paths = [] for row in self.paths_table.get_selected_rows(): paths.append(self.paths_table.get_row(row)[1]) LogBottomContextMenu(self, event, paths, revisions).show() # # Helper methods # def load_or_refresh(self): if self.cache.has(self.rev_start): self.refresh() else: self.load() def get_selected_revision_numbers(self): if len(self.revisions_table.get_selected_rows()) == 0: return "" revisions = [] for row in self.revisions_table.get_selected_rows(): revisions.append( int(self.revisions_table.get_row(row)[self.revision_number_column]) ) revisions.sort() return helper.encode_revisions(revisions) def get_selected_revision_number(self): if len(self.revisions_table.get_selected_rows()): return self.revisions_table.get_row( self.revisions_table.get_selected_rows()[0] )[self.revision_number_column] else: return "" @gtk_unsafe def set_start_revision(self, rev): self.get_widget("start").set_text(S(rev).display()) @gtk_unsafe def set_end_revision(self, rev): self.get_widget("end").set_text(S(rev).display()) def initialize_revision_labels(self): self.set_start_revision(_("N/A")) self.set_end_revision(_("N/A")) def set_loading(self, loading): self.is_loading = loading def show_revisions_table_popup_menu(self, treeview, data): revisions = [] for row in self.revisions_table.get_selected_rows(): line = { "revision": self.display_items[row].revision, "author": self.display_items[row].author, "message": self.display_items[row].message, } try: line["next_revision"] = self.display_items[row + 1].revision except IndexError as e: pass try: line["previous_revision"] = self.display_items[row - 1].revision except IndexError as e: pass revisions.append(line) LogTopContextMenu(self, data, self.path, revisions).show() # # Other helper methods # def view_diff_for_path(self, url, revision1, revision2=None, sidebyside=False): if revision2 == None: revision2 = revision1 options = [ "%s@%s" % (url, revision2), "%s@%s" % (url, revision1), "--vcs=%s" % self.get_vcs_name(), ] if sidebyside: options += ["-s"] helper.launch_ui_window("diff", options) def get_vcs_name(self): vcs = rabbitvcs.vcs.VCS_DUMMY if hasattr(self, "svn"): vcs = rabbitvcs.vcs.VCS_SVN elif hasattr(self, "git"): vcs = rabbitvcs.vcs.VCS_GIT return vcs class SVNLog(Log): def __init__(self, path, merge_candidate_revisions=None): Log.__init__(self, path) self.svn = self.vcs.svn() self.merge_candidate_revisions = merge_candidate_revisions self.revisions_table = rabbitvcs.ui.widget.Table( self.get_widget("revisions_table"), [ GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, rabbitvcs.ui.widget.TYPE_HIDDEN, ], [_("Revision"), _("Author"), _("Date"), _("Message"), _("Color")], callbacks={ "mouse-event": self.on_revisions_table_mouse_event, "cursor-changed": self.on_revisions_table_cursor_changed, }, ) for i in range(4): column = self.revisions_table.get_column(i) cell = column.get_cells()[0] column.add_attribute(cell, "foreground", 4) self.paths_table = rabbitvcs.ui.widget.Table( self.get_widget("paths_table"), [ GObject.TYPE_STRING, rabbitvcs.ui.widget.TYPE_HIDDEN_OBJECT, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, ], [_("Action"), "", _("Path"), _("Copy From Path"), _("Copy From Revision")], callbacks={ "mouse-event": self.on_paths_table_mouse_event, "row-activated": self.on_paths_table_row_activated, }, flags={"sortable": True, "sort_on": 2}, ) self.initialize_root_url() self.load_or_refresh() def initialize_root_url(self): action = SVNAction(self.svn, notification=False, run_in_thread=False) self.root_url = action.run_single(self.svn.get_repo_root_url, self.path) # # Log-loading callback methods # def refresh(self): """ Refresh the items in the main log table that shows Revision/Author/etc. """ self.revision_items = [] self.revisions_table.clear() self.message.set_text("") self.paths_table.clear() if self.rev_start and self.cache.has(self.rev_start): self.revision_items = self.cache.get(self.rev_start) else: # Make sure the int passed is the order the log call was made self.revision_items = self.action.get_result(0) if not self.revision_items or len(self.revision_items) == 0: return # Get the starting/ending point from the actual returned revisions self.rev_start = int(S(self.revision_items[0].revision)) self.rev_end = int(S(self.revision_items[-1].revision)) if not self.rev_first: self.rev_first = self.rev_start self.cache.set(self.rev_start, self.revision_items) # The first time the log items return, the rev_start will be as large # as it will ever be. So set this to our maximum revision. if self.rev_start > self.rev_max: self.rev_max = self.rev_start self.display_items = [] for item in self.revision_items: msg = helper.html_escape(item.message).lower() should_add = not self.filter_text should_add = should_add or msg.find(self.filter_text) > -1 should_add = should_add or item.author.lower().find(self.filter_text) > -1 should_add = ( should_add or str(item.revision).lower().find(self.filter_text) > -1 ) should_add = ( should_add or str(item.date).lower().find(self.filter_text) > -1 ) if should_add: self.display_items.append(item) self.set_start_revision(self.rev_start) self.set_end_revision(self.rev_end) self.check_previous_sensitive() self.check_next_sensitive() for item in self.display_items: msg = helper.format_long_text(item.message, cols=80, line1only=True) rev = item.revision color = self.orgTextColor # "#000000" if ( self.merge_candidate_revisions != None and int(rev.short()) not in self.merge_candidate_revisions ): color = "#c9c9c9" self.populate_table(rev, item.author, item.date, msg, color) # Stop on copy after adding the item to the table # so the user can look at the item that was copied if self.stop_on_copy: for path in item.changed_paths: if path.copy_from_path or path.copy_from_revision: self.set_loading(False) return self.set_loading(False) def populate_table(self, revision, author, date, msg, color): self.revisions_table.append( [ S(revision), author, helper.format_datetime(date, self.datetime_format), msg, color, ] ) def load(self): self.set_loading(True) self.action = SVNAction(self.svn, notification=False) start = self.svn.revision("head") if self.rev_start: start = self.svn.revision("number", number=self.rev_start) self.action.append( self.svn.log, self.path, revision_start=start, limit=self.limit, discover_changed_paths=True, ) self.action.append(self.refresh) self.action.schedule() def edit_revprop(self, prop_name, prop_value, callback=None): failure = False url = S(self.svn.get_repo_url(self.path)) self.action = SVNAction(self.svn, notification=False) for row in self.revisions_table.get_selected_rows(): item = self.display_items[row] self.action.append( self.svn.revpropset, prop_name, prop_value, url, item.revision ) self.action.append(callback, row, prop_value) self.action.schedule() @gtk_unsafe def on_log_message_edited(self, index, val): self.display_items[index].message = val self.revisions_table.set_row_item(index, 3, val) self.message.set_text(S(val).display()) @gtk_unsafe def on_author_edited(self, index, val): self.display_items[index].author = val self.revisions_table.set_row_item(index, 1, val) def copy_revision_text(self): text = "" for selected_row in self.revisions_table.get_selected_rows(): item = self.display_items[selected_row] text += "%s: %s\n" % (REVISION_LABEL, S(item.revision).display()) text += "%s: %s\n" % (AUTHOR_LABEL, S(item.author).display()) text += "%s: %s\n" % (DATE_LABEL, S(item.date).display()) text += "%s\n\n" % S(item.message).display() if item.changed_paths is not None: for subitem in item.changed_paths: text += "%s\t%s" % ( S(subitem.action).display(), S(subitem.path).display(), ) if subitem.copy_from_path or subitem.copy_from_revision: text += " (Copied from %s %s)" % ( S(subitem.copy_from_path).display(), S(subitem.copy_from_revision).display(), ) text += "\n" text += "\n\n\n" self.revision_clipboard.set_text(text, -1) def update_revision_message(self): combined_paths = [] subitems = [] for selected_row in self.revisions_table.get_selected_rows(): item = self.display_items[selected_row] msg = S(item.message).display() if len(self.revisions_table.get_selected_rows()) == 1: self.message.set_text(msg) else: indented_message = msg.replace("\n", "\n\t") self.message.append_text( "%s %s:\n\t%s\n" % (REVISION_LABEL, S(item.revision).display(), indented_message) ) if item.changed_paths is not None: for subitem in item.changed_paths: if subitem.path not in combined_paths: combined_paths.append(subitem.path) subitems.append( [ subitem.action, subitem.path, subitem.copy_from_path, S(subitem.copy_from_revision), ] ) subitems.sort(key=lambda x: strxfrm(x[1])) for subitem in subitems: self.paths_table.append( [subitem[0], S(subitem[1]), subitem[1], subitem[2], S(subitem[3])] ) def on_previous_clicked(self, widget): self.rev_start = self.previous_starts.pop() self.load_or_refresh() def on_next_clicked(self, widget): self.previous_starts.append(self.rev_start) self.rev_start = int(self.rev_end) - 1 if self.rev_start < 1: self.rev_start = 1 self.load_or_refresh() def check_previous_sensitive(self): sensitive = self.rev_start < self.rev_max self.get_widget("previous").set_sensitive(sensitive) def check_next_sensitive(self): sensitive = True if self.rev_end == 1: sensitive = False if len(self.revision_items) < self.limit: sensitive = False self.get_widget("next").set_sensitive(sensitive) class GitLog(Log): def __init__(self, path): Log.__init__(self, path) self.git = self.vcs.git(path) self.limit = 500 self.get_widget("stop_on_copy").hide() self.revision_number_column = 1 self.revisions_table = rabbitvcs.ui.widget.Table( self.get_widget("revisions_table"), [ rabbitvcs.ui.widget.TYPE_GRAPH, GObject.TYPE_STRING, rabbitvcs.ui.widget.TYPE_MARKUP, rabbitvcs.ui.widget.TYPE_MARKUP, rabbitvcs.ui.widget.TYPE_MARKUP, ], [_("Graph"), _("Revision"), _("Author"), _("Date"), _("Message")], filters=[ { "callback": rabbitvcs.ui.widget.git_revision_filter, "user_data": {"column": 1}, } ], callbacks={ "mouse-event": self.on_revisions_table_mouse_event, "cursor-changed": self.on_revisions_table_cursor_changed, }, ) self.paths_table = rabbitvcs.ui.widget.Table( self.get_widget("paths_table"), [ GObject.TYPE_STRING, rabbitvcs.ui.widget.TYPE_HIDDEN_OBJECT, GObject.TYPE_STRING, ], [_("Action"), "", _("Path")], callbacks={ "mouse-event": self.on_paths_table_mouse_event, "row-activated": self.on_paths_table_row_activated, }, flags={"sortable": False}, ) self.start_point = 0 self.initialize_root_url() self.load_or_refresh() # # Log-loading callback methods # def refresh(self): """ Refresh the items in the main log table that shows Revision/Author/etc. """ self.revisions_table.clear() helper.run_in_main_thread(self.message.set_text, "") self.paths_table.clear() # Make sure the int passed is the order the log call was made self.revision_items = self.action.get_result(0) if not self.revision_items or len(self.revision_items) == 0: return # Load tags. self.tagItems = [] for tag in self.tagAction.get_result(0): name = tag.name # Determine the type of tag, so we know which id to use. if "Tag" in str([tag.obj]): # Tag object, use the dereferenced id. id = tag.obj.object[1] else: # Commit object, use the sha id. id = tag.sha # Add tags to list so we can match on id and display in the message. self.tagItems.append({"id": id, "name": name}) # Load branches. self.branchItems = [] for branch in self.branchAction.get_result(0): if branch.name.startswith("remotes/"): branch.name = branch.name[len("remotes/") :] self.branchItems.append({"id": branch.revision, "name": branch.name}) self.set_start_revision(self.revision_items[0].revision.short()) self.set_end_revision(self.revision_items[-1].revision.short()) self.display_items = [] for item in self.revision_items: msg = item.message.lower() should_add = not self.filter_text should_add = should_add or msg.find(self.filter_text) > -1 should_add = should_add or item.author.lower().find(self.filter_text) > -1 should_add = ( should_add or S(item.revision).lower().find(self.filter_text) > -1 ) should_add = ( should_add or str(item.date).lower().find(self.filter_text) > -1 ) if should_add: self.display_items.append(item) grapher = revision_grapher(self.display_items) max_columns = 1 for (item, node, in_lines, out_lines) in grapher: if max_columns < len(out_lines): max_columns = len(out_lines) # Set the graph column width if not self.filter_text: graph_width = 21 * max_columns if graph_width < 55: graph_width = 55 graph_column = self.revisions_table.get_column(0) graph_column.set_fixed_width(graph_width) index = 0 for (item, node, in_lines, out_lines) in grapher: revision = S(item.revision) msg = helper.html_escape( helper.format_long_text(item.message, cols=80, line1only=True) ) author = item.author date = helper.format_datetime(item.date, self.datetime_format) if item.head: self.head_row = index msg = "%s" % msg author = "%s" % author date = "%s" % date graph_render = {} if not self.filter_text: graph_render = { "node": node, "in_lines": in_lines, "out_lines": out_lines, } # Check if a branch is available for this revision, and if so, insert it in the message description. for branch in self.branchItems: if branch["id"] == revision: msg = "[" + branch["name"] + "] " + msg # Check if a tag is available for this revision, and if so, insert it in the message description. for tag in self.tagItems: if tag["id"] == revision: msg = "[" + tag["name"] + "] " + msg self.revisions_table.append([graph_render, revision, author, date, msg]) index += 1 self.check_previous_sensitive() self.check_next_sensitive() self.set_loading(False) def load(self): self.set_loading(True) # Load branches. self.branchAction = GitAction(self.git, notification=False, run_in_thread=True) self.branchAction.append(self.git.branch_list) self.branchAction.schedule() # Load tags. self.tagAction = GitAction(self.git, notification=False, run_in_thread=True) self.tagAction.append(self.git.tag_list) self.tagAction.schedule() # Load log. self.action = GitAction(self.git, notification=False, run_in_thread=True) self.action.append( self.git.log, path=self.path, skip=self.start_point, limit=self.limit + 1 ) self.action.append(self.refresh) self.action.schedule() def copy_revision_text(self): text = "" for selected_row in self.revisions_table.get_selected_rows(): item = self.display_items[selected_row] text += "%s: %s\n" % (REVISION_LABEL, S(item.revision.short()).display()) text += "%s: %s\n" % (AUTHOR_LABEL, S(item.author).display()) text += "%s: %s\n" % (DATE_LABEL, S(item.date).display()) text += "%s\n\n" % S(item.message).display() self.revision_clipboard.set_text(text, -1) def update_revision_message(self): combined_paths = [] subitems = [] for selected_row in self.revisions_table.get_selected_rows(): item = self.display_items[selected_row] msg = S(item.message).display() if len(self.revisions_table.get_selected_rows()) == 1: self.message.set_text(msg) else: indented_message = msg.replace("\n", "\n\t") self.message.append_text( "%s %s:\n\t%s\n" % (REVISION_LABEL, item.revision.short(), msg) ) for subitem in item.changed_paths: if subitem.path not in combined_paths: combined_paths.append(subitem.path) subitems.append([subitem.action, subitem.path]) # subitems.sort(key = lambda x: strxfrm(x[1])) for subitem in subitems: self.paths_table.append([subitem[0], S(subitem[1]), subitem[1]]) def on_previous_clicked(self, widget): self.start_point -= self.limit if self.start_point < 0: self.start_point = 0 self.load_or_refresh() def on_next_clicked(self, widget): self.start_point += self.limit self.load() def check_previous_sensitive(self): sensitive = self.start_point > 0 self.get_widget("previous").set_sensitive(sensitive) def check_next_sensitive(self): sensitive = True if len(self.revision_items) < self.limit: sensitive = False self.get_widget("next").set_sensitive(sensitive) def initialize_root_url(self): self.root_url = self.git.get_repository() + "/" class SVNLogDialog(SVNLog): def __init__( self, path, ok_callback=None, multiple=False, merge_candidate_revisions=None ): """ Override the normal SVNLog class so that we can hide the window as we need. Also, provide a callback for when the OK button is clicked so that we can get some desired data. """ SVNLog.__init__(self, path, merge_candidate_revisions) self.ok_callback = ok_callback self.multiple = multiple self.change_button("close", _("_Select"), "rabbitvcs-ok") def on_destroy(self, widget): pass def on_close_clicked(self, widget, data=None): self.hide() if self.ok_callback is not None: if self.multiple == True: self.ok_callback(self.get_selected_revision_numbers()) else: self.ok_callback(self.get_selected_revision_number()) class GitLogDialog(GitLog): def __init__(self, path, ok_callback=None, multiple=False): """ Override the normal GitLog class so that we can hide the window as we need. Also, provide a callback for when the OK button is clicked so that we can get some desired data. """ GitLog.__init__(self, path) self.ok_callback = ok_callback self.multiple = multiple def on_destroy(self, widget): pass def on_close_clicked(self, widget, data=None): self.hide() if self.ok_callback is not None: if self.multiple == True: self.ok_callback(self.get_selected_revision_numbers()) else: self.ok_callback(self.get_selected_revision_number()) class LogCache(object): def __init__(self, cache={}): self.cache = cache def set(self, key, val): self.cache[key] = val def get(self, key): return self.cache[key] def has(self, key): return key in self.cache def empty(self): self.cache = {} class MenuViewDiffWorkingCopy(MenuItem): identifier = "RabbitVCS::View_Diff_Working_Copy" label = _("View diff against working copy") icon = "rabbitvcs-diff" class MenuViewDiffPreviousRevision(MenuItem): identifier = "RabbitVCS::View_Diff_Previous_Revision" label = _("View diff against previous revision") icon = "rabbitvcs-diff" class MenuViewDiffRevisions(MenuItem): identifier = "RabbitVCS::View_Diff_Revisions" label = _("View diff between revisions") icon = "rabbitvcs-diff" class MenuCompareWorkingCopy(MenuItem): identifier = "RabbitVCS::Compare_Working_Copy" label = _("Compare with working copy") icon = "rabbitvcs-compare" class MenuComparePreviousRevision(MenuItem): identifier = "RabbitVCS::Compare_Previous_Revision" label = _("Compare with previous revision") icon = "rabbitvcs-compare" class MenuCompareRevisions(MenuItem): identifier = "RabbitVCS::Compare_Revisions" label = _("Compare revisions") icon = "rabbitvcs-compare" class MenuShowChangesPreviousRevision(MenuItem): # This is for the revs list identifier = "RabbitVCS::Show_Changes_Previous_Revision" label = _("Show changes against previous revision") icon = "rabbitvcs-changes" class MenuShowChangesRevisions(MenuItem): # This is for the revs list identifier = "RabbitVCS::Show_Changes_Revisions" label = _("Show changes between revisions") icon = "rabbitvcs-changes" class MenuUpdateToThisRevision(MenuItem): identifier = "RabbitVCS::Update_To_This_Revision" label = _("Update to this revision") tooltip = _("Update the selected path to this revision") icon = "rabbitvcs-update" class MenuRevertChangesFromThisRevision(MenuItem): identifier = "RabbitVCS::Revert_Changes_From_This_Revision" label = _("Revert changes from this revision") tooltip = _("Update the selected path by reverse merging the changes") icon = "rabbitvcs-revert" class MenuCopyClipboard(MenuItem): identifier = "RabbitVCS::Copy_Clipboard" label = _("Copy to clipboard") tooltip = _("Copy to clipboard the full data of these revisions") icon = "rabbitvcs-asynchronous" class MenuEditAuthor(MenuItem): identifier = "RabbitVCS::Edit_Author" label = _("Edit author...") icon = "rabbitvcs-monkey" class MenuEditLogMessage(MenuItem): identifier = "RabbitVCS::Edit_Log_Message" label = _("Edit log message...") icon = "rabbitvcs-editconflicts" class MenuEditRevisionProperties(MenuItem): identifier = "RabbitVCS::Edit_Revision_Properties" label = _("Edit revision properties...") icon = "rabbitvcs-editprops" class MenuSeparatorLast(MenuSeparator): identifier = "RabbitVCS::Separator_Last" class LogTopContextMenuConditions(object): def __init__(self, caller, vcs, path, revisions): self.caller = caller self.vcs = vcs self.path = path self.revisions = revisions self.vcs_name = caller.get_vcs_name() def view_diff_working_copy(self, data=None): return ( self.vcs.is_in_a_or_a_working_copy(self.path) and len(self.revisions) == 1 ) def copy_clipboard(self, data=None): return len(self.revisions) > 0 def view_diff_previous_revision(self, data=None): item = self.revisions[0]["revision"] return "previous_revision" in self.revisions[0] and len(self.revisions) == 1 def view_diff_revisions(self, data=None): return len(self.revisions) > 1 def compare_working_copy(self, data=None): return ( self.vcs.is_in_a_or_a_working_copy(self.path) and len(self.revisions) == 1 ) def compare_previous_revision(self, data=None): item = self.revisions[0]["revision"] return "previous_revision" in self.revisions[0] and len(self.revisions) == 1 def compare_revisions(self, data=None): return len(self.revisions) > 1 def show_changes_previous_revision(self, data=None): item = self.revisions[0]["revision"] return "previous_revision" in self.revisions[0] and len(self.revisions) == 1 def show_changes_revisions(self, data=None): return len(self.revisions) > 1 def update_to_this_revision(self, data=None): return self.vcs_name == rabbitvcs.vcs.VCS_SVN and len(self.revisions) == 1 # TODO Evaluate multiple revisions later # TODO Git? def revert_changes_from_this_revision(self, data=None): return self.vcs_name == rabbitvcs.vcs.VCS_SVN and len(self.revisions) == 1 def checkout(self, data=None): return len(self.revisions) == 1 def branches(self, data=None): return len(self.revisions) == 1 and self.vcs_name == rabbitvcs.vcs.VCS_GIT def tags(self, data=None): return len(self.revisions) == 1 and self.vcs_name == rabbitvcs.vcs.VCS_GIT def branch_tag(self, data=None): return self.vcs_name == rabbitvcs.vcs.VCS_SVN and len(self.revisions) == 1 def export(self, data=None): return len(self.revisions) == 1 def edit_author(self, data=None): return self.vcs_name == rabbitvcs.vcs.VCS_SVN def edit_log_message(self, data=None): return self.vcs_name == rabbitvcs.vcs.VCS_SVN def edit_revision_properties(self, data=None): return self.vcs_name == rabbitvcs.vcs.VCS_SVN and len(self.revisions) == 1 def separator(self, data=None): return True def separator_last(self, data=None): return self.vcs_name == rabbitvcs.vcs.VCS_SVN def merge(self, data=None): return self.vcs_name == rabbitvcs.vcs.VCS_GIT def reset(self, data=None): return self.vcs_name == rabbitvcs.vcs.VCS_GIT class LogTopContextMenuCallbacks(object): def __init__(self, caller, vcs, path, revisions): self.caller = caller self.vcs = vcs self.path = path self.revisions = revisions self.vcs_name = self.caller.get_vcs_name() def find_parent(self, revision): if ("parents" in revision) and len(revision["parents"]) > 0: parent = S(revision["parents"][0]) elif "next_revision" in revision: parent = S(revision["next_revision"]) else: parent = S(int(S(revision["revision"])) - 1) return parent def view_diff_working_copy(self, widget, data=None): helper.launch_ui_window( "diff", [ "%s@%s" % (self.path, S(self.revisions[0]["revision"])), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def copy_clipboard(self, widget, data=None): self.caller.copy_revision_text() def view_diff_previous_revision(self, widget, data=None): parent = self.find_parent(self.revisions[0]) helper.launch_ui_window( "diff", [ "%s@%s" % (self.path, parent), "%s@%s" % (self.path, S(self.revisions[0]["revision"])), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def view_diff_revisions(self, widget, data=None): path_older = self.path if self.vcs_name == rabbitvcs.vcs.VCS_SVN: path_older = self.vcs.svn().get_repo_url(self.path) helper.launch_ui_window( "diff", [ "%s@%s" % (path_older, self.revisions[1]["revision"].value), "%s@%s" % (self.path, S(self.revisions[0]["revision"])), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def compare_working_copy(self, widget, data=None): path_older = self.path if self.vcs_name == rabbitvcs.vcs.VCS_SVN: path_older = self.vcs.svn().get_repo_url(self.path) helper.launch_ui_window( "diff", [ "-s", "%s@%s" % (path_older, S(self.revisions[0]["revision"])), "%s" % (self.path), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def compare_previous_revision(self, widget, data=None): parent = self.find_parent(self.revisions[0]) helper.launch_ui_window( "diff", [ "-s", "%s@%s" % (self.path, parent), "%s@%s" % (self.path, S(self.revisions[0]["revision"])), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def compare_revisions(self, widget, data=None): path_older = self.path if self.vcs_name == rabbitvcs.vcs.VCS_SVN: path_older = self.vcs.svn().get_repo_url(self.path) helper.launch_ui_window( "diff", [ "-s", "%s@%s" % (path_older, self.revisions[1]["revision"].value), "%s@%s" % (self.path, S(self.revisions[0]["revision"])), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def show_changes_previous_revision(self, widget, data=None): rev_first = S(self.revisions[0]["revision"]) parent = self.find_parent(self.revisions[0]) path = self.path if self.vcs_name == rabbitvcs.vcs.VCS_SVN: path = self.vcs.svn().get_repo_url(self.path) helper.launch_ui_window( "changes", [ "%s@%s" % (path, parent), "%s@%s" % (path, S(rev_first)), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def show_changes_revisions(self, widget, data=None): rev_first = S(self.revisions[0]["revision"]) rev_last = S(self.revisions[-1]["revision"]) path = self.path if self.vcs_name == rabbitvcs.vcs.VCS_SVN: path = self.vcs.svn().get_repo_url(self.path) helper.launch_ui_window( "changes", [ "%s@%s" % (path, S(rev_first)), "%s@%s" % (path, S(rev_last)), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def update_to_this_revision(self, widget, data=None): helper.launch_ui_window( "updateto", [ self.path, "-r", S(self.revisions[0]["revision"]), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def revert_changes_from_this_revision(self, widget, data=None): helper.launch_ui_window( "merge", [ self.path, S(self.revisions[0]["revision"]) + "-" + str(int(S(self.revisions[0]["revision"])) - 1), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def checkout(self, widget, data=None): url = "" if self.vcs_name == rabbitvcs.vcs.VCS_SVN: url = self.vcs.svn().get_repo_url(self.path) helper.launch_ui_window( "checkout", [ self.path, url, "-r", S(self.revisions[0]["revision"]), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def branch_tag(self, widget, data=None): helper.launch_ui_window( "branch", [ self.path, "-r", S(self.revisions[0]["revision"]), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def branches(self, widget, data=None): helper.launch_ui_window( "branches", [ self.path, "-r", S(self.revisions[0]["revision"]), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def tags(self, widget, data=None): helper.launch_ui_window( "tags", [ self.path, "-r", S(self.revisions[0]["revision"]), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def export(self, widget, data=None): helper.launch_ui_window( "export", [ self.path, "-r", S(self.revisions[0]["revision"]), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def merge(self, widget, data=None): extra = [] if self.vcs_name == rabbitvcs.vcs.VCS_GIT: extra.append(S(self.revisions[0]["revision"])) try: fromrev = S(self.revisions[1]["revision"]) extra.append(fromrev) except IndexError as e: pass extra += ["--vcs=%s" % self.caller.get_vcs_name()] helper.launch_ui_window("merge", [self.path] + extra) def reset(self, widget, data=None): helper.launch_ui_window( "reset", [ self.path, "-r", S(self.revisions[0]["revision"]), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def edit_author(self, widget, data=None): author = "" if len(self.revisions) == 1: author = self.revisions[0]["author"] if author == _("(no author)"): author = "" from rabbitvcs.ui.dialog import TextChange dialog = TextChange(_("Edit author"), author) (result, new_author) = dialog.run() if result == Gtk.ResponseType.OK: self.caller.edit_revprop( "svn:author", new_author, self.caller.on_author_edited ) def edit_log_message(self, widget, data=None): message = "" if len(self.revisions) == 1: message = self.revisions[0]["message"] from rabbitvcs.ui.dialog import TextChange dialog = TextChange(_("Edit log message"), message) (result, new_message) = dialog.run() if result == Gtk.ResponseType.OK: self.caller.edit_revprop( "svn:log", new_message, self.caller.on_log_message_edited ) def edit_revision_properties(self, widget, data=None): url = self.vcs.svn().get_repo_url(self.path) helper.launch_ui_window( "revprops", [ "%s@%s" % (url, S(self.revisions[0]["revision"])), "--vcs=%s" % self.caller.get_vcs_name(), ], ) class LogTopContextMenu(object): """ Defines context menu items for a table with files """ def __init__(self, caller, event, path, revisions=[]): """ @param caller: The calling object @type caller: object @param base_dir: The curent working directory @type base_dir: string @param path: The loaded path @type path: string @param revisions: The selected revisions @type revisions: list of rabbitvcs.vcs.Revision object """ self.caller = caller self.event = event self.path = path self.revisions = revisions self.vcs = rabbitvcs.vcs.VCS() self.conditions = LogTopContextMenuConditions( self.caller, self.vcs, self.path, self.revisions ) self.callbacks = LogTopContextMenuCallbacks( self.caller, self.vcs, self.path, self.revisions ) # The first element of each tuple is a key that matches a # ContextMenuItems item. The second element is either None when there # is no submenu, or a recursive list of tuples for desired submenus. self.structure = [ (MenuViewDiffWorkingCopy, None), (MenuViewDiffPreviousRevision, None), (MenuViewDiffRevisions, None), (MenuCompareWorkingCopy, None), (MenuComparePreviousRevision, None), (MenuCompareRevisions, None), (MenuShowChangesPreviousRevision, None), (MenuShowChangesRevisions, None), (MenuSeparator, None), (MenuCopyClipboard, None), (MenuSeparator, None), (MenuUpdateToThisRevision, None), (MenuRevertChangesFromThisRevision, None), (MenuCheckout, None), (MenuBranches, None), (MenuTags, None), (MenuBranchTag, None), (MenuExport, None), (MenuMerge, None), (MenuReset, None), (MenuSeparatorLast, None), (MenuEditAuthor, None), (MenuEditLogMessage, None), (MenuEditRevisionProperties, None), ] def show(self): if len(self.revisions) == 0: return context_menu = GtkContextMenu(self.structure, self.conditions, self.callbacks) context_menu.show(self.event) class LogBottomContextMenuConditions(object): def __init__(self, caller, vcs, paths, revisions): self.caller = caller self.vcs = vcs self.paths = paths self.revisions = revisions def view_diff_working_copy(self, data=None): return False def view_diff_previous_revision(self, data=None): item = self.revisions[0]["revision"] return "previous_revision" in self.revisions[0] and len(self.revisions) == 1 def view_diff_revisions(self, data=None): return len(self.paths) == 1 and len(self.revisions) > 1 def compare_working_copy(self, data=None): return False def compare_previous_revision(self, data=None): item = self.revisions[0]["revision"] return "previous_revision" in self.revisions[0] and len(self.revisions) == 1 def compare_revisions(self, data=None): return len(self.paths) == 1 and len(self.revisions) > 1 def show_changes_previous_revision(self, data=None): item = self.revisions[0]["revision"] return "previous_revision" in self.revisions[0] and len(self.revisions) == 1 def show_changes_revisions(self, data=None): return len(self.paths) == 1 and len(self.revisions) > 1 def _open(self, data=None): return True def annotate(self, data=None): return len(self.paths) == 1 def separator(self, data=None): return True class LogBottomContextMenuCallbacks(object): def __init__(self, caller, vcs, paths, revisions): self.caller = caller self.vcs = vcs self.svn = self.vcs.svn() self.vcs_name = self.caller.get_vcs_name() self.paths = paths self.revisions = revisions def find_parent(self, revision): if ("parents" in revision) and len(revision["parents"]) > 0: parent = S(revision["parents"][0]) elif "next_revision" in revision: parent = S(revision["next_revision"]) else: parent = S(int(S(revision["revision"])) - 1) return parent def view_diff_previous_revision(self, widget, data=None): rev = S(self.revisions[0]["revision"]) parent = self.find_parent(self.revisions[0]) path_item = S(self.paths[0]).unicode() url = self.caller.root_url + path_item self.caller.view_diff_for_path(url, rev, parent) def view_diff_revisions(self, widget, data=None): rev_first = S(self.revisions[0]["revision"]) rev_last = S(self.revisions[-1]["revision"]) path_item = S(self.paths[0]).unicode() url = self.caller.root_url + path_item self.caller.view_diff_for_path( url, latest_revision_number=rev_last, earliest_revision_number=rev_first ) def compare_previous_revision(self, widget, data=None): rev = S(self.revisions[0]["revision"]) parent = self.find_parent(self.revisions[0]) path_item = S(self.paths[0]).unicode() url = self.caller.root_url + path_item self.caller.view_diff_for_path(url, rev, parent, sidebyside=True) def compare_revisions(self, widget, data=None): earliest_rev = S(self.revisions[0]["revision"]) latest_rev = S(self.revisions[-1]["revision"]) path_item = S(self.paths[0]).unicode() url = self.caller.root_url + path_item self.caller.view_diff_for_path( url, latest_rev, sidebyside=True, earliest_revision_number=earliest_rev ) def show_changes_previous_revision(self, widget, data=None): rev_first = S(self.revisions[0]["revision"]) rev_last = S(self.revisions[-1]["revision"]) parent = self.find_parent(self.revisions[0]) url = self.caller.root_url + S(self.paths[0]).unicode() helper.launch_ui_window( "changes", [ six.u("%s@%s") % (url, parent), six.u("%s@%s") % (url, rev_last), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def show_changes_revisions(self, widget, data=None): rev_first = S(self.revisions[0]["revision"]) rev_last = S(self.revisions[-1]["revision"]) url = self.caller.root_url + S(self.paths[0]).unicode() helper.launch_ui_window( "changes", [ six.u("%s@%s") % (url, rev_first), six.u("%s@%s") % (url, rev_last), "--vcs=%s" % self.caller.get_vcs_name(), ], ) def _open(self, widget, data=None): for path in self.paths: path = self.caller.root_url + S(path).unicode() helper.launch_ui_window( "open", [ path, "--vcs=%s" % self.vcs_name, "-r", S(self.revisions[0]["revision"]), ], ) def annotate(self, widget, data=None): url = self.caller.root_url + S(self.paths[0]).unicode() helper.launch_ui_window( "annotate", [url, "--vcs=%s" % self.vcs_name, "-r", S(self.revisions[0]["revision"])], ) class LogBottomContextMenu(object): """ Defines context menu items for a table with files """ def __init__(self, caller, event, paths, revisions): """ @param caller: The calling object @type caller: object @param base_dir: The curent working directory @type base_dir: string @param paths: The selected paths @type paths: list @param revision: The selected revision @type revision: rabbitvcs.vcs.Revision object """ self.caller = caller self.event = event self.paths = paths self.revisions = revisions self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() self.conditions = LogBottomContextMenuConditions( self.caller, self.vcs, self.paths, self.revisions ) self.callbacks = LogBottomContextMenuCallbacks( self.caller, self.vcs, self.paths, self.revisions ) # The first element of each tuple is a key that matches a # ContextMenuItems item. The second element is either None when there # is no submenu, or a recursive list of tuples for desired submenus. self.structure = [ (MenuViewDiffRevisions, None), (MenuViewDiffPreviousRevision, None), (MenuComparePreviousRevision, None), (MenuCompareRevisions, None), (MenuShowChangesPreviousRevision, None), (MenuShowChangesRevisions, None), (MenuSeparator, None), (MenuOpen, None), (MenuAnnotate, None), ] def show(self): if len(self.paths) == 0: return context_menu = GtkContextMenu(self.structure, self.conditions, self.callbacks) context_menu.show(self.event) classes_map = {rabbitvcs.vcs.VCS_SVN: SVNLog, rabbitvcs.vcs.VCS_GIT: GitLog} dialogs_map = {rabbitvcs.vcs.VCS_SVN: SVNLogDialog, rabbitvcs.vcs.VCS_GIT: GitLogDialog} def log_factory(path, vcs): # vcs option is allowed for URL only if os.path.exists(path): vcs = None if not vcs: guess = rabbitvcs.vcs.guess(path) vcs = guess["vcs"] if not vcs in classes_map: from rabbitvcs.ui import VCS_OPT_ERROR raise SystemExit(VCS_OPT_ERROR) return classes_map[vcs](path) def log_dialog_factory(path, ok_callback=None, multiple=False, vcs=None): if not vcs: guess = rabbitvcs.vcs.guess(path) vcs = guess["vcs"] return dialogs_map[vcs](path, ok_callback, multiple) if __name__ == "__main__": from rabbitvcs.ui import main, VCS_OPT (options, paths) = main( [VCS_OPT], usage="Usage: rabbitvcs log [--vcs=svn|git] [url_or_path]" ) window = log_factory(paths[0], vcs=options.vcs) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/markresolved.py000077500000000000000000000075441445560650400211140ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.log import Log from rabbitvcs.util.strings import S import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui.add import Add from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import six.moves._thread from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.markresolved") _ = gettext.gettext class SVNMarkResolved(Add): def setup(self, window, columns): window.set_title(_("Mark as Resolved")) self.svn = self.vcs.svn() self.statuses = self.svn.STATUSES_FOR_RESOLVE columns[0] = ( [ GObject.TYPE_BOOLEAN, rabbitvcs.ui.widget.TYPE_HIDDEN_OBJECT, rabbitvcs.ui.widget.TYPE_PATH, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, ], ) columns[1] = [ rabbitvcs.ui.widget.TOGGLE_BUTTON, "", _("Path"), _("Extension"), _("Text Status"), _("Property Status"), ] def populate_files_table(self): self.files_table.clear() for item in self.items: self.files_table.append( [ True, S(item.path), item.path, helper.get_file_extension(item.path), item.simple_content_status(), item.simple_metadata_status(), ] ) def on_ok_clicked(self, widget): items = self.files_table.get_activated_rows(1) if not items: self.close() return self.hide() self.action = rabbitvcs.ui.action.SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Mark as Resolved")) self.action.append(self.action.set_status, _("Running Resolved Command...")) for item in items: self.action.append(self.svn.resolve, item, recurse=True) self.action.append(self.action.set_status, _("Completed Mark as Resolved")) self.action.append(self.action.finish) self.action.schedule() classes_map = {rabbitvcs.vcs.VCS_SVN: SVNMarkResolved} def markresolved_factory(paths, base_dir=None): guess = rabbitvcs.vcs.guess(paths[0]) return classes_map[guess["vcs"]](paths, base_dir) if __name__ == "__main__": from rabbitvcs.ui import main, BASEDIR_OPT (options, paths) = main( [BASEDIR_OPT], usage="Usage: rabbitvcs markresolved [path1] [path2] ..." ) window = markresolved_factory(paths, options.base_dir) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/merge.py000066400000000000000000000532571445560650400175140ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.strings import S import rabbitvcs.util.settings import rabbitvcs.ui.widget import rabbitvcs.vcs from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui.log import SVNLogDialog from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class SVNMerge(InterfaceView): def __init__(self, path, revision_range=None): InterfaceView.__init__(self, "merge", "Merge") self.revision_range = revision_range self.assistant = self.get_widget("Merge") self.path = path self.page = self.assistant.get_nth_page(0) self.last_page = None self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() if not self.svn.has_merge2(): self.get_widget("mergetype_range_opt").set_sensitive(False) self.get_widget("mergetype_tree_opt").set_active(True) self.get_widget("mergetype_reintegrate_opt").set_active(False) self.get_widget("mergeoptions_only_record").set_active(False) if not self.svn.has_merge_reintegrate(): self.get_widget("mergetype_reintegrate_opt").set_sensitive(False) self.assistant.set_page_complete(self.page, True) self.assistant.set_forward_page_func(self.on_forward_clicked) self.repo_paths = helper.get_repository_paths() # Keeps track of which stages should be marked as complete self.type = None self.initialize_root_url() def initialize_root_url(self): action = SVNAction(self.svn, notification=False, run_in_thread=False) self.root_url = action.run_single(self.svn.get_repo_url, self.path) # # Assistant UI Signal Callbacks # def on_apply_clicked(self, widget): self.merge() def on_test_clicked(self, widget): self.merge(test=True) def merge(self, test=False): if self.type is None: return if test: startcmd = _("Running Merge Test") endcmd = _("Completed Merge Test") else: startcmd = _("Running Merge Command") endcmd = _("Completed Merge") self.hide() recursive = self.get_widget("mergeoptions_recursive").get_active() ignore_ancestry = self.get_widget("mergeoptions_ignore_ancestry").get_active() record_only = False if self.svn.has_merge2(): record_only = self.get_widget("mergeoptions_only_record").get_active() action = SVNAction(self.svn, register_gtk_quit=(not test)) action.append(action.set_header, _("Merge")) action.append(action.set_status, startcmd) args = () kwargs = {} if self.type == "range": url = self.mergerange_repos.get_active_text() head_revision = self.svn.get_head(self.path) revisions = self.get_widget("mergerange_revisions").get_text() if revisions == "": revisions = "head" revisions = revisions.lower().replace("head", str(head_revision)) ranges = [] for r in revisions.split(","): if r.find("-") != -1: (low, high) = [int(i) for i in r.split("-")] if low < high: low -= 1 elif r.find(":") != -1: (low, high) = [int(i) for i in r.split(":")] if low < high: low -= 1 else: high = int(r) low = high - 1 # Before pysvn v1.6.3, there was a bug that required the ranges # tuple to have three elements, even though only two were used # Fixed in Pysvn Revision 1114 if self.svn.interface == "pysvn" and self.svn.is_version_less_than( (1, 6, 3, 0) ): ranges.append( ( self.svn.revision("number", number=low).primitive(), self.svn.revision("number", number=high).primitive(), None, ) ) else: ranges.append( ( self.svn.revision("number", number=low).primitive(), self.svn.revision("number", number=high).primitive(), ) ) action.append(helper.save_repository_path, url) # Build up args and kwargs because some args are not supported # with older versions of pysvn/svn args = ( self.svn.merge_ranges, url, ranges, self.svn.revision("head"), self.path, ) kwargs = {"notice_ancestry": (not ignore_ancestry), "dry_run": test} if record_only: kwargs["record_only"] = record_only elif self.type == "reintegrate": url = self.merge_reintegrate_repos.get_active_text() revision = self.merge_reintegrate_revision.get_revision_object() action.append(helper.save_repository_path, url) # Build up args and kwargs because some args are not supported # with older versions of pysvn/svn args = (self.svn.merge_reintegrate, url, revision, self.path) kwargs = {"dry_run": test} elif self.type == "tree": from_url = self.mergetree_from_repos.get_active_text() from_revision = self.svn.revision("head") if self.get_widget("mergetree_from_revision_number_opt").get_active(): from_revision = self.svn.revision( "number", number=int( self.get_widget("mergetree_from_revision_number").get_text() ), ) to_url = self.mergetree_to_repos.get_active_text() to_revision = self.svn.revision("head") if self.get_widget("mergetree_to_revision_number_opt").get_active(): to_revision = self.svn.revision( "number", number=int( self.get_widget("mergetree_to_revision_number").get_text() ), ) action.append(helper.save_repository_path, from_url) action.append(helper.save_repository_path, to_url) # Build up args and kwargs because some args are not supported # with older versions of pysvn/svn args = ( self.svn.merge_trees, from_url, from_revision, to_url, to_revision, self.path, ) kwargs = {"recurse": recursive, "dry_run": test} if len(args) > 0: action.append(*args, **kwargs) action.append(action.set_status, endcmd) action.append(action.finish) action.schedule() def on_prepare(self, widget, page): self.page = page current = self.assistant.get_current_page() if current == 1: self.on_mergerange_prepare() elif current == 2: self.on_mergetree_prepare() elif current == 3: self.on_merge_reintegrate_prepare() elif current == 4: self.on_mergeoptions_prepare() self.last_page = current def on_forward_clicked(self, widget): current = self.assistant.get_current_page() if current == 0: if self.get_widget("mergetype_range_opt").get_active(): next = 1 self.type = "range" if self.revision_range: self.get_widget("mergerange_revisions").set_text( S(self.revision_range).display() ) elif self.get_widget("mergetype_tree_opt").get_active(): next = 2 self.type = "tree" elif self.get_widget("mergetype_reintegrate_opt").get_active(): next = 3 self.type = "reintegrate" else: next = 4 return next # # Step 2a: Merge a Range of Revisions # def on_mergerange_prepare(self): if not hasattr(self, "mergerange_repos"): self.mergerange_repos = rabbitvcs.ui.widget.ComboBox( self.get_widget("mergerange_from_urls"), self.repo_paths ) self.mergerange_repos.set_child_text(self.root_url) self.get_widget("mergerange_working_copy").set_text(S(self.path).display()) self.mergerange_check_ready() def on_mergerange_show_log1_clicked(self, widget): merge_candidate_revisions = self.svn.find_merge_candidate_revisions( self.mergerange_repos.get_active_text(), self.path ) SVNLogDialog( self.mergerange_repos.get_active_text(), ok_callback=self.on_mergerange_log1_closed, multiple=True, merge_candidate_revisions=merge_candidate_revisions, ) def on_mergerange_log1_closed(self, data): if not data is None: self.get_widget("mergerange_revisions").set_text(S(data).display()) def on_mergerange_from_urls_changed(self, widget): self.mergerange_check_ready() def on_mergerange_revisions_changed(self, widget): self.mergerange_check_ready() def mergerange_check_ready(self): ready = True if self.mergerange_repos.get_active_text() == "": ready = False self.assistant.set_page_complete(self.page, ready) allow_log = False if self.mergerange_repos.get_active_text(): allow_log = True self.get_widget("mergerange_show_log1").set_sensitive(allow_log) # # Step 2b: Reintegrate a Branch # def on_merge_reintegrate_prepare(self): if not hasattr(self, "merge_reintegrate_repos"): self.merge_reintegrate_repos = rabbitvcs.ui.widget.ComboBox( self.get_widget("merge_reintegrate_repos"), self.repo_paths ) self.merge_reintegrate_repos.cb.connect( "changed", self.on_merge_reintegrate_from_urls_changed ) self.get_widget("merge_reintegrate_working_copy").set_text( S(self.path).display() ) if not hasattr(self, "merge_reintegrate_revision"): self.merge_reintegrate_revision = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("revision_container"), self.svn, url_combobox=self.merge_reintegrate_repos, expand=True, ) def on_merge_reintegrate_browse_clicked(self, widget): from rabbitvcs.ui.browser import SVNBrowserDialog SVNBrowserDialog(self.path, callback=self.on_repo_chooser_closed) def on_repo_chooser_closed(self, new_url): self.merge_reintegrate_repos.set_child_text(new_url) self.merge_reintegrate_check_ready() def on_merge_reintegrate_from_urls_changed(self, widget): self.merge_reintegrate_check_ready() def merge_reintegrate_check_ready(self): ready = True if self.merge_reintegrate_repos.get_active_text() == "": ready = False self.assistant.set_page_complete(self.page, ready) # # Step 2c: Merge two different trees # def on_mergetree_prepare(self): if not hasattr(self, "mergetree_from_repos"): self.mergetree_from_repos = rabbitvcs.ui.widget.ComboBox( self.get_widget("mergetree_from_urls"), self.repo_paths ) self.mergetree_to_repos = rabbitvcs.ui.widget.ComboBox( self.get_widget("mergetree_to_urls"), self.repo_paths ) self.get_widget("mergetree_working_copy").set_text(S(self.path).display()) def on_mergetree_from_show_log_clicked(self, widget): SVNLogDialog( self.path, ok_callback=self.on_mergetree_from_show_log_closed, multiple=False, ) def on_mergetree_from_show_log_closed(self, data): self.get_widget("mergetree_from_revision_number").set_text(S(data).display()) self.get_widget("mergetree_from_revision_number_opt").set_active(True) def on_mergetree_to_show_log_clicked(self, widget): SVNLogDialog( self.path, ok_callback=self.on_mergetree_to_show_log_closed, multiple=False ) def on_mergetree_to_show_log_closed(self, data): self.get_widget("mergetree_to_revision_number").set_text(S(data).display()) self.get_widget("mergetree_to_revision_number_opt").set_active(True) def on_mergetree_working_copy_show_log_clicked(self, widget): SVNLogDialog(self.path) def on_mergetree_from_revision_number_focused(self, widget, data): self.get_widget("mergetree_from_revision_number_opt").set_active(True) def on_mergetree_to_revision_number_focused(self, widget, data): self.get_widget("mergetree_to_revision_number_opt").set_active(True) def on_mergetree_from_urls_changed(self, widget): self.mergetree_check_ready() def on_mergetree_to_urls_changed(self, widget): self.mergetree_check_ready() def mergetree_check_ready(self): ready = True if self.mergetree_from_repos.get_active_text() == "": ready = False if self.mergetree_to_repos.get_active_text() == "": ready = False self.assistant.set_page_complete(self.page, ready) # # Step 3: Merge Options # def on_mergeoptions_prepare(self): if self.last_page == 3: self.get_widget("mergeoptions_recursive").hide() self.get_widget("mergeoptions_ignore_ancestry").hide() self.get_widget("mergeoptions_only_record").hide() else: self.get_widget("mergeoptions_recursive").show() self.get_widget("mergeoptions_ignore_ancestry").show() self.get_widget("mergeoptions_only_record").show() self.assistant.set_page_complete(self.page, True) class BranchMerge(InterfaceView): def __init__(self, path, branch=None): InterfaceView.__init__(self, "branch-merge", "Merge") self.path = path self.branch = branch self.vcs = rabbitvcs.vcs.VCS() sm = rabbitvcs.util.settings.SettingsManager() self.datetime_format = sm.get("general", "datetime_format") def on_cancel_clicked(self, widget, data=None): self.close() class GitMerge(BranchMerge): def __init__(self, path, branch=None): BranchMerge.__init__(self, path, branch) self.git = self.vcs.git(path) self.init_branch_widgets() self.from_branches = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("from_branch_container"), self.git, revision=self.branch, url=path, expand=True, revision_changed_callback=self.__revision_changed, ) self.update_branch_info() self.active_branch = self.git.get_active_branch() if self.active_branch: self.get_widget("to_branch").set_text( S( self.active_branch.name + " (" + self.active_branch.revision[0:7] + ")" ).display() ) else: self.get_widget("to_branch").set_text(_("No active branch")) def init_branch_widgets(self): self.info = {"from": {}, "to": {}} # FROM BRANCH INFO # from_container = rabbitvcs.ui.widget.Box( self.get_widget("from_branch_info"), vertical=True ) # Set up the Author line author = Gtk.Label(label=_("Author:")) author.set_size_request(90, -1) author.set_properties(xalign=0, yalign=0) self.info["from"]["author"] = Gtk.Label(label="") self.info["from"]["author"].set_properties(xalign=0, yalign=0, selectable=True) self.info["from"]["author"].set_line_wrap(True) author_container = rabbitvcs.ui.widget.Box() author_container.pack_start(author, False, False, 0) author_container.pack_start(self.info["from"]["author"], False, False, 0) from_container.pack_start(author_container, False, False, 0) # Set up the Date line date = Gtk.Label(label=_("Date:")) date.set_size_request(90, -1) date.set_properties(xalign=0, yalign=0) self.info["from"]["date"] = Gtk.Label(label="") self.info["from"]["date"].set_properties(xalign=0, yalign=0, selectable=True) date_container = rabbitvcs.ui.widget.Box() date_container.pack_start(date, False, False, 0) date_container.pack_start(self.info["from"]["date"], False, False, 0) from_container.pack_start(date_container, False, False, 0) # Set up the Revision line revision = Gtk.Label(label=_("Revision:")) revision.set_size_request(90, -1) revision.set_properties(xalign=0, yalign=0) self.info["from"]["revision"] = Gtk.Label(label="") self.info["from"]["revision"].set_properties(xalign=0, selectable=True) self.info["from"]["revision"].set_line_wrap(True) revision_container = rabbitvcs.ui.widget.Box() revision_container.pack_start(revision, False, False, 0) revision_container.pack_start(self.info["from"]["revision"], False, False, 0) from_container.pack_start(revision_container, False, False, 0) # Set up the Log Message line message = Gtk.Label(label=_("Message:")) message.set_size_request(90, -1) message.set_properties(xalign=0, yalign=0) self.info["from"]["message"] = Gtk.Label(label="") self.info["from"]["message"].set_properties(xalign=0, yalign=0, selectable=True) self.info["from"]["message"].set_line_wrap(True) self.info["from"]["message"].set_size_request(250, -1) message_container = rabbitvcs.ui.widget.Box() message_container.pack_start(message, False, False, 0) message_container.pack_start(self.info["from"]["message"], False, False, 0) from_container.pack_start(message_container, False, False, 0) from_container.show_all() def update_branch_info(self): from_branch = self.from_branches.get_revision_object() if from_branch.value: log = self.git.log( self.path, limit=1, revision=from_branch, showtype="branch" ) if log: from_info = log[0] self.info["from"]["author"].set_text(S(from_info.author).display()) self.info["from"]["date"].set_text( helper.format_datetime(from_info.date, self.datetime_format) ) self.info["from"]["revision"].set_text( S(from_info.revision).display()[0:7] ) self.info["from"]["message"].set_text( S( helper.html_escape( helper.format_long_text(from_info.message, 500) ) ).display() ) def on_from_branches_changed(self, widget): self.update_branch_info() def on_ok_clicked(self, widget, data=None): self.hide() from_branch = self.from_branches.get_revision_object() self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Merge")) self.action.append(self.action.set_status, _("Running Merge Command...")) self.action.append(self.git.merge, from_branch) self.action.append(self.action.set_status, _("Completed Merge")) self.action.append(self.action.finish) self.action.schedule() def __revision_changed(self, widget): self.update_branch_info() if __name__ == "__main__": from rabbitvcs.ui import main, VCS_OPT (options, args) = main( [VCS_OPT], usage="Usage: rabbitvcs merge path [revision/revision_range]" ) path = args[0] vcs_name = options.vcs if not vcs_name: vcs_name = rabbitvcs.vcs.guess(path)["vcs"] window = None revision_text = None if len(args) >= 2: revision_text = args[1] if vcs_name == rabbitvcs.vcs.VCS_SVN: window = SVNMerge(path, revision_text) window.register_gtk_quit() Gtk.main() elif vcs_name == rabbitvcs.vcs.VCS_GIT: window = GitMerge(path, revision_text) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/open.py000066400000000000000000000077341445560650400173550ustar00rootroot00000000000000from __future__ import absolute_import import six from rabbitvcs import gettext from rabbitvcs.util.strings import S import rabbitvcs.vcs from rabbitvcs.ui.action import SVNAction, GitAction from rabbitvcs.ui import InterfaceNonView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from os import getcwd import os.path from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class SVNOpen(InterfaceNonView): """ This class provides a handler to open tracked files. """ def __init__(self, path, revision): """ @type path: string @param path: The path to open @type revision: string @param revision: The revision of the file to open """ InterfaceNonView.__init__(self) self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() if revision and isinstance(revision, (str, six.text_type)): revision_obj = self.svn.revision("number", number=revision) else: revision_obj = self.svn.revision("HEAD") url = path if not self.svn.is_path_repository_url(path): url = self.svn.get_repo_root_url(path) + "/" + path dest = helper.get_tmp_path( "rabbitvcs-" + revision + "-" + os.path.basename(path) ) self.svn.export(url, dest, revision=revision_obj, force=True) helper.open_item(dest) raise SystemExit() class GitOpen(InterfaceNonView): """ This class provides a handler to open tracked files. """ def __init__(self, path, revision): """ @type path: string @param path: The path to open @type revision: string @param revision: The revision of the file to open """ InterfaceNonView.__init__(self) self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(path) if revision: revision_obj = self.git.revision(revision) else: revision_obj = self.git.revision("HEAD") dest_dir = helper.get_tmp_path("rabbitvcs-" + S(revision)) self.git.export(path, dest_dir, revision=revision_obj) repo_path = self.git.find_repository_path(path) relative_path = path if path.startswith(repo_path): relative_path = path[len(repo_path) + 1 :] dest_path = "%s/%s" % (dest_dir, relative_path) helper.open_item(dest_path) raise SystemExit() classes_map = {rabbitvcs.vcs.VCS_SVN: SVNOpen, rabbitvcs.vcs.VCS_GIT: GitOpen} def open_factory(vcs, path, revision): if not vcs: guess = rabbitvcs.vcs.guess(path) vcs = guess["vcs"] return classes_map[vcs](path, revision) if __name__ == "__main__": from rabbitvcs.ui import main, REVISION_OPT, VCS_OPT (options, paths) = main( [REVISION_OPT, VCS_OPT], usage="Usage: rabbitvcs open path [-r REVISION]" ) window = open_factory(options.vcs, paths[0], options.revision) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/properties.py000077500000000000000000000134731445560650400206100ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.log import Log from rabbitvcs.util.strings import S import rabbitvcs.vcs import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.properties") _ = gettext.gettext class PropertiesBase(InterfaceView): """ Provides an interface to add/edit/delete properties on versioned items in the working copy. """ selected_row = None selected_rows = [] def __init__(self, path): InterfaceView.__init__(self, "properties", "Properties") self.path = path self.delete_stack = [] self.get_widget("Properties").set_title(_("Properties - %s") % path) self.get_widget("path").set_text(S(path).display()) self.table = rabbitvcs.ui.widget.Table( self.get_widget("table"), [GObject.TYPE_BOOLEAN, GObject.TYPE_STRING, GObject.TYPE_STRING], [rabbitvcs.ui.widget.TOGGLE_BUTTON, _("Name"), _("Value")], ) self.table.allow_multiple() self.vcs = rabbitvcs.vcs.VCS() # # UI Signal Callbacks # def on_ok_clicked(self, widget): self.save() def on_new_clicked(self, widget): dialog = rabbitvcs.ui.dialog.Property() name, value, recurse = dialog.run() if name: self.table.append([recurse, name, value]) def on_edit_clicked(self, widget): (recurse, name, value) = self.get_selected_name_value() dialog = rabbitvcs.ui.dialog.Property(name, value) name, value, recurse = dialog.run() if name: self.set_selected_name_value(name, value, recurse) def on_delete_clicked(self, widget, data=None): if not self.selected_rows: return for i in self.selected_rows: row = self.table.get_row(i) self.delete_stack.append([row[0], row[1]]) self.table.remove_multiple(self.selected_rows) def on_table_cursor_changed(self, treeview, data=None): self.on_table_event(treeview) def on_table_button_released(self, treeview, data=None): self.on_table_event(treeview) def on_table_event(self, treeview): selection = treeview.get_selection() (liststore, indexes) = selection.get_selected_rows() self.selected_rows = [] for tup in indexes: self.selected_rows.append(tup[0]) length = len(self.selected_rows) if length == 0: self.get_widget("edit").set_sensitive(False) self.get_widget("delete").set_sensitive(False) elif length == 1: self.get_widget("edit").set_sensitive(True) self.get_widget("delete").set_sensitive(True) else: self.get_widget("edit").set_sensitive(False) self.get_widget("delete").set_sensitive(True) def on_refresh_activate(self, widget): self.load() # # Helper methods # def set_selected_name_value(self, name, value, recurse): self.table.set_row(self.selected_rows[0], [recurse, name, value]) def get_selected_name_value(self): returner = None if self.selected_rows is not None: returner = self.table.get_row(self.selected_rows[0]) return returner class SVNProperties(PropertiesBase): def __init__(self, path): PropertiesBase.__init__(self, path) self.svn = self.vcs.svn() self.load() def load(self): self.table.clear() try: self.proplist = self.svn.proplist(self.get_widget("path").get_text()) except Exception as e: log.exception(e) rabbitvcs.ui.dialog.MessageBox(_("Unable to retrieve properties list")) self.proplist = [] if self.proplist: for key, val in list(self.proplist.items()): self.table.append([False, key, val.rstrip()]) def save(self): delete_recurse = self.get_widget("delete_recurse").get_active() for row in self.delete_stack: self.svn.propdel(self.path, row[1], recurse=delete_recurse) failure = False for row in self.table.get_items(): if not self.svn.propset( self.path, row[1], row[2], overwrite=True, recurse=row[0] ): failure = True break if failure: rabbitvcs.ui.dialog.MessageBox( _("There was a problem saving your properties.") ) self.close() if __name__ == "__main__": from rabbitvcs.ui import main (options, paths) = main(usage="Usage: rabbitvcs properties [url_or_path]") window = SVNProperties(paths[0]) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/property_editor.py000066400000000000000000000230161445560650400216350ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2009 by Jason Heeris # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ A note to anyone intending to work on this in the future... This dialog is designed to be as stateless as possible. That is, all the information about properties being changed, deleted, added, etc. should be kept in the SVN admin system, not in this dialog. SVN should be keeping track of this info, not us! To this effect, changes are applied immediately... no saving lists of changes to apply later, no trying to keep track of what was done recursively and what wasn't; just do the work and make sure the UI is sensible. """ from __future__ import absolute_import, print_function from rabbitvcs import gettext from rabbitvcs.util.log import Log from rabbitvcs.vcs.svn import Revision from rabbitvcs.util.strings import S import rabbitvcs.vcs import rabbitvcs.ui.dialog import rabbitvcs.ui.widget import rabbitvcs.util.contextmenuitems import rabbitvcs.ui.wraplabel from rabbitvcs.util.contextmenu import GtkContextMenu, GtkContextMenuCaller from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk import os.path from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.property_editor") _ = gettext.gettext PROP_EDITOR_NOTE = _( """\ Note: changes to properties are applied instantly. You may review and \ undo changes using the context menu for each item. """ ) RECURSIVE_DELETE_MSG = _( """\ Do you want to delete the selected properties from all files and subdirectories beneath this directory?""" ) PROP_MENU_STRUCTURE = [ (rabbitvcs.util.contextmenuitems.PropMenuEdit, None), (rabbitvcs.util.contextmenuitems.PropMenuRevert, None), (rabbitvcs.util.contextmenuitems.PropMenuRevertRecursive, None), (rabbitvcs.util.contextmenuitems.PropMenuDelete, None), (rabbitvcs.util.contextmenuitems.PropMenuDeleteRecursive, None), ] class PropEditor(InterfaceView, GtkContextMenuCaller): """ User interface for the property editor. The UI is basically an "instant update" editor, that is as soon as you add a property in the dialog, it is actually added in the WC. Each row has a context menu available to perform other actions. """ def __init__(self, path): """ Initialises the UI. """ InterfaceView.__init__(self, "property_editor", "PropertyEditor") note = rabbitvcs.ui.wraplabel.WrapLabel(PROP_EDITOR_NOTE) note.set_hexpand(True) note.set_use_markup(True) self.get_widget("note_box").add(note) self.get_widget("note_box").show_all() self.path = path self.get_widget("wc_text").set_text( S(self.get_local_path(os.path.realpath(path))).display() ) self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() if not self.svn.is_versioned(self.path): rabbitvcs.ui.dialog.MessageBox(_("File is not under version control.")) self.close() return self.get_widget("remote_uri_text").set_text( S(self.svn.get_repo_url(path)).display() ) self.table = rabbitvcs.ui.widget.Table( self.get_widget("table"), [ GObject.TYPE_STRING, rabbitvcs.ui.widget.TYPE_ELLIPSIZED, GObject.TYPE_STRING, rabbitvcs.ui.widget.TYPE_STATUS, ], [_("Name"), _("Value"), _("Reserved"), _("Status")], filters=[ { "callback": rabbitvcs.ui.widget.long_text_filter, "user_data": {"cols": 0, "column": 1}, }, { "callback": rabbitvcs.ui.widget.translate_filter, "user_data": {"column": 3}, }, ], callbacks={ "row-activated": self.on_table_row_activated, "mouse-event": self.on_table_mouse_event, "key-event": self.on_table_key_event, }, ) self.table.allow_multiple() self.refresh() def get_local_path(self, path): return path.replace("file://", "") def on_note_box_add(self, *args, **kwargs): print("Added!") def refresh(self): self.table.clear() propdets = {} try: propdets = self.svn.propdetails(self.path) except Exception as e: log.exception(e) rabbitvcs.ui.dialog.MessageBox(_("Unable to retrieve properties list")) for propname, details in list(propdets.items()): self.table.append([propname, details["value"], "N/A", details["status"]]) def on_refresh_clicked(self, widget): self.refresh() def on_new_clicked(self, widget): self.edit_property() def edit_property(self, name=""): value = self.svn.propget(self.path, name) dialog = rabbitvcs.ui.dialog.Property(name, value) name, value, recurse = dialog.run() if name: success = self.svn.propset( self.path, name, value, overwrite=True, recurse=False ) if not success: rabbitvcs.ui.dialog.MessageBox( _("Unable to set new value for property.") ) self.refresh() def delete_properties(self, names): recursive = False if os.path.isdir(self.path): dialog = rabbitvcs.ui.dialog.Confirmation(RECURSIVE_DELETE_MSG) recursive = dialog.run() for name in names: self.svn.propdel(self.path, name, recurse=recursive) self.refresh() def on_table_row_activated(self, treeview, event, col): for name in self.table.get_selected_row_items(0): self.edit_property(name) def on_table_key_event(self, treeview, event, *args): if Gdk.keyval_name(event.keyval) == "Delete": names = self.table.get_selected_row_items(0) self.delete_properties(names) def on_table_mouse_event(self, treeview, event, *args): if event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE: self.show_menu(event) def show_menu(self, event): # self.show_files_table_popup_menu(treeview, event) selected_propnames = self.table.get_selected_row_items(0) propdetails = self.svn.propdetails(self.path) filtered_details = {} for propname, detail in list(propdetails.items()): if propname in selected_propnames: filtered_details[propname] = detail conditions = PropMenuConditions(self.path, filtered_details) callbacks = PropMenuCallbacks(self, self.path, filtered_details, self.vcs) GtkContextMenu(PROP_MENU_STRUCTURE, conditions, callbacks).show(event) class PropMenuCallbacks(object): def __init__(self, caller, path, propdetails, vcs): self.path = path self.caller = caller self.propdetails = propdetails self.vcs = vcs self.svn = self.vcs.svn() def property_edit(self, widget, *args): if list(self.propdetails.keys()): propname = list(self.propdetails.keys())[0] self.caller.edit_property(propname) def property_delete(self, widget, *args): for propname in list(self.propdetails.keys()): self.svn.propdel(self.path, propname, recurse=False) self.caller.refresh() def property_delete_recursive(self, widget, *args): for propname in list(self.propdetails.keys()): self.svn.propdel(self.path, propname, recurse=True) self.caller.refresh() def property_revert(self, widget, *args): pass def property_revert_recursive(self, widget, *args): pass class PropMenuConditions(object): def __init__(self, path, propdetails): self.path = path self.propdetails = propdetails def all_modified(self): return all( [ detail["status"] != "unchanged" for (propname, detail) in list(self.propdetails.items()) ] ) def all_not_deleted(self): return all( [ detail["status"] != "deleted" for (propname, detail) in list(self.propdetails.items()) ] ) def property_revert(self): return False # return self.all_modified() def property_delete(self): return self.all_not_deleted() def property_edit(self): return len(list(self.propdetails.keys())) == 1 if __name__ == "__main__": # These are some dumb tests before I add any functionality. from rabbitvcs.ui import main (options, paths) = main(usage="Usage: rabbitvcs propedit [url_or_path]") window = PropEditor(paths[0]) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/property_page.py000066400000000000000000000145251445560650400212700ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.log import Log from rabbitvcs.util.strings import S from rabbitvcs.ui import STATUS_EMBLEMS from rabbitvcs.services.checkerservice import StatusCheckerStub as StatusChecker import rabbitvcs.vcs import rabbitvcs.ui.widget import rabbitvcs.ui from collections import defaultdict from gi.repository import Gtk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2010 by Jason Heeris # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import os.path import gi gi.require_version("Gtk", "3.0") log = Log("rabbitvcs.ui.property_page") _ = gettext.gettext class PropertyPage(rabbitvcs.ui.GtkBuilderWidgetWrapper): gtkbuilder_filename = "property_page" gtkbuilder_id = "prop_page_scroller" def __init__(self, paths, vcs=None, claim_domain=True): rabbitvcs.ui.GtkBuilderWidgetWrapper.__init__(self, claim_domain=claim_domain) self.paths = paths self.vcs = vcs or rabbitvcs.vcs.VCS() self.info_pane = rabbitvcs.ui.widget.Box( self.get_widget("property_page"), vertical=True ) if len(paths) == 1: file_info = FileInfoPane(paths[0], self.vcs, claim_domain=self.claim_domain) self.info_pane.pack_start( file_info.get_widget(), expand=False, fill=False, padding=0 ) elif len(paths) > 1: try: for path in paths: expander = FileInfoExpander( path, self.vcs, claim_domain=self.claim_domain, indent=12 ) self.info_pane.pack_start( expander.get_widget(), expand=False, fill=False, padding=0 ) except Exception as ex: log.exception(ex) raise class FileInfoPane(rabbitvcs.ui.GtkBuilderWidgetWrapper): gtkbuilder_filename = "property_page" gtkbuilder_id = "file_info_table" def __init__(self, path, vcs=None, claim_domain=True): rabbitvcs.ui.GtkBuilderWidgetWrapper.__init__(self, claim_domain=claim_domain) self.path = path self.vcs = vcs or rabbitvcs.vcs.VCS() self.checker = StatusChecker() self.get_widget("file_name").set_text(S(os.path.basename(path)).display()) self.status = self.checker.check_status( path, recurse=False, invalidate=False, summary=False ) self.get_widget("vcs_type").set_text(S(self.status.vcs_type).display()) self.get_widget("content_status").set_text( S(self.status.simple_content_status()).display() ) self.get_widget("prop_status").set_text( S(self.status.simple_metadata_status()).display() ) self.set_icon_from_status( self.get_widget("content_status_icon"), self.status.simple_content_status() ) self.set_icon_from_status( self.get_widget("prop_status_icon"), self.status.simple_metadata_status() ) self.set_icon_from_status( self.get_widget("vcs_icon"), self.status.single, Gtk.IconSize.DIALOG ) additional_info = self.get_additional_info() if additional_info: additional_props_table = rabbitvcs.ui.widget.KeyValueTable(additional_info) additional_props_table.show() file_info_table = rabbitvcs.ui.widget.Box( self.get_widget("file_info_table"), vertical=True ) file_info_table.pack_start( additional_props_table, expand=False, fill=False, padding=0 ) def set_icon_from_status(self, icon, status, size=Gtk.IconSize.BUTTON): if status in rabbitvcs.ui.STATUS_EMBLEMS: icon.set_from_icon_name("emblem-" + STATUS_EMBLEMS[status], size) def get_additional_info(self): vcs_type = rabbitvcs.vcs.guess_vcs(self.path)["vcs"] if vcs_type == rabbitvcs.vcs.VCS_SVN: return self.get_additional_info_svn() elif vcs_type == rabbitvcs.vcs.VCS_GIT: return self.get_additional_info_git() else: return [] def get_additional_info_svn(self): repo_url = S(self.vcs.svn().get_repo_url(self.path)) return [(_("Repository URL"), repo_url)] def get_additional_info_git(self): repo_url = S(self.vcs.git().config_get(("remote", "origin"), "url")) return [(_("Repository URL"), repo_url)] class FileInfoExpander(rabbitvcs.ui.GtkBuilderWidgetWrapper): gtkbuilder_filename = "property_page" gtkbuilder_id = "file_info_expander" def __init__(self, path, vcs=None, claim_domain=True, indent=0): # Might be None, but that's okay, only subclasses use it self.vcs = vcs rabbitvcs.ui.GtkBuilderWidgetWrapper.__init__(self, claim_domain=claim_domain) self.path = path self.get_widget("file_expander_path").set_label(path) # Do a lazy evaluate for this self.file_info = None self.expander = self.get_widget() self.indent = indent # There seems to be no easy way to connect to this in Gtkbuilder self.expander.connect("notify::expanded", self.on_expand) def on_expand(self, param_spec, user_data): if self.expander.get_expanded() and not self.file_info: self.file_info = FileInfoPane( self.path, self.vcs, claim_domain=self.claim_domain ).get_widget() self.file_info.set_margin_start(self.indent) self.expander.add(self.file_info) class PropertyPageLabel(rabbitvcs.ui.GtkBuilderWidgetWrapper): gtkbuilder_filename = "property_page" gtkbuilder_id = "property_page_label" rabbitvcs-0.19/rabbitvcs/ui/property_page4.py000066400000000000000000000042711445560650400213510ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2010 by Jason Heeris # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import os.path from gi.repository import Gtk from rabbitvcs import gettext from rabbitvcs.util.strings import S from rabbitvcs.ui import STATUS_EMBLEMS from rabbitvcs.services.checkerservice import StatusCheckerStub as StatusChecker import rabbitvcs.vcs _ = gettext.gettext class FileInfo(): def __init__(self, path, vcs=None, claim_domain=True): self.path = path self.vcs = vcs or rabbitvcs.vcs.VCS() self.checker = StatusChecker() def get_status(self, path): status = self.checker.check_status( path, recurse=False, invalidate=False, summary=False ) return status def get_additional_info(self): vcs_type = rabbitvcs.vcs.guess_vcs(self.path)["vcs"] if vcs_type == rabbitvcs.vcs.VCS_SVN: return self.get_additional_info_svn() elif vcs_type == rabbitvcs.vcs.VCS_GIT: return self.get_additional_info_git() else: return None, None def get_additional_info_svn(self): repo_url = S(self.vcs.svn().get_repo_url(self.path)) repo_path = self.vcs.svn().find_repository_path(self.path) return repo_url, repo_path def get_additional_info_git(self): repo_url = S(self.vcs.git().config_get(("remote", "origin"), "url")) repo_path = self.vcs.git().find_repository_path(self.path) return repo_url, repo_pathrabbitvcs-0.19/rabbitvcs/ui/push.py000066400000000000000000000130341445560650400173610ustar00rootroot00000000000000from __future__ import absolute_import import six from rabbitvcs import gettext import rabbitvcs.vcs import rabbitvcs.util.settings import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path import six.moves._thread from datetime import datetime from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext helper.gobject_threads_init() class Push(InterfaceView): def __init__(self, path): InterfaceView.__init__(self, "push", "Push") self.path = path self.vcs = rabbitvcs.vcs.VCS() sm = rabbitvcs.util.settings.SettingsManager() self.datetime_format = sm.get("general", "datetime_format") # # Event handlers # def on_ok_clicked(self, widget, data=None): pass class GitPush(Push): def __init__(self, path): Push.__init__(self, path) self.git = self.vcs.git(path) self.repository_selector = rabbitvcs.ui.widget.GitRepositorySelector( self.get_widget("repository_container"), self.git, self.on_branch_changed ) self.log_table = rabbitvcs.ui.widget.Table( self.get_widget("log"), [GObject.TYPE_STRING, GObject.TYPE_STRING], [_("Date"), _("Message")], flags={"sortable": True, "sort_on": 0}, ) # Set default for checkboxes. self.get_widget("tags").set_active(True) self.get_widget("force_with_lease").set_active(False) self.initialize_logs() def on_ok_clicked(self, widget, data=None): self.hide() repository = self.repository_selector.repository_opt.get_active_text() branch = self.repository_selector.branch_opt.get_active_text() tags = self.get_widget("tags").get_active() force_with_lease = self.get_widget("force_with_lease").get_active() self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Push")) self.action.append(self.action.set_status, _("Running Push Command...")) self.action.append(self.git.push, repository, branch, tags, force_with_lease) self.action.append(self.action.set_status, _("Completed Push")) self.action.append(self.action.finish) self.action.schedule() def initialize_logs(self): """ Initializes the git logs """ try: six.moves._thread.start_new_thread(self.load_logs, ()) except Exception as e: log.exception(e) def load_logs_exit(self): self.get_widget("status").set_text("") self.update_widgets() def load_logs(self): helper.run_in_main_thread(self.get_widget("status").set_text, _("Loading...")) self.load_push_log() helper.run_in_main_thread(self.load_logs_exit) def load_push_log(self): repository = self.repository_selector.repository_opt.get_active_text() branch = self.repository_selector.branch_opt.get_active_text() refspec = "refs/remotes/%s/%s" % (repository, branch) self.push_log = self.git.log( revision=self.git.revision(refspec), showtype="push" ) def on_branch_changed(self, repository, branch): self.load_push_log() self.update_widgets() def update_widgets(self): self.log_table.clear() repository = self.repository_selector.repository_opt.get_active_text() branch = self.repository_selector.branch_opt.get_active_text() if not repository or not branch: self.get_widget("ok").set_sensitive(False) return has_commits = False for item in self.push_log: self.log_table.append( [ helper.format_datetime(item.date, self.datetime_format), helper.format_long_text(item.message.rstrip("\n")), ] ) has_commits = True self.get_widget("ok").set_sensitive(True) if not has_commits: self.get_widget("status").set_text(_("No commits found")) classes_map = {rabbitvcs.vcs.VCS_GIT: GitPush} def push_factory(path): guess = rabbitvcs.vcs.guess(path) return classes_map[guess["vcs"]](path) if __name__ == "__main__": from rabbitvcs.ui import main (options, paths) = main(usage="Usage: rabbitvcs push [path]") window = push_factory(paths[0]) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/relocate.py000077500000000000000000000060321445560650400202030ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.strings import S import rabbitvcs.vcs from rabbitvcs.ui.dialog import MessageBox from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class Relocate(InterfaceView): """ Interface to relocate your working copy's repository location. """ def __init__(self, path): """ @type path: string @param path: A path to a local working copy """ InterfaceView.__init__(self, "relocate", "Relocate") self.path = path self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() repo = S(self.svn.get_repo_url(self.path)).display() self.get_widget("from_url").set_text(repo) self.get_widget("to_url").set_text(repo) self.repositories = rabbitvcs.ui.widget.ComboBox( self.get_widget("to_urls"), helper.get_repository_paths() ) def on_ok_clicked(self, widget): from_url = self.get_widget("from_url").get_text() to_url = self.get_widget("to_url").get_text() if not from_url or not to_url: MessageBox(_("The from and to url fields are both required.")) return self.hide() self.action = SVNAction(self.svn, register_gtk_quit=self.gtk_quit_is_set()) self.action.append(self.action.set_header, _("Relocate")) self.action.append(self.action.set_status, _("Running Relocate Command...")) self.action.append(self.svn.relocate, from_url, to_url, self.path) self.action.append(self.action.set_status, _("Completed Relocate")) self.action.append(self.action.finish) self.action.schedule() if __name__ == "__main__": from rabbitvcs.ui import main (options, paths) = main(usage="Usage: rabbitvcs relocate [path]") window = Relocate(paths[0]) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/remotes.py000066400000000000000000000122111445560650400200540ustar00rootroot00000000000000from __future__ import absolute_import, print_function from rabbitvcs import gettext import rabbitvcs.vcs from rabbitvcs.ui.dialog import DeleteConfirmation import rabbitvcs.ui.widget from rabbitvcs.ui.action import GitAction from rabbitvcs.ui import InterfaceView import time from datetime import datetime from gi.repository import Gtk, GObject, Gdk, Pango # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext STATE_ADD = 0 STATE_EDIT = 1 class GitRemotes(InterfaceView): """ Provides a UI interface to manage items """ state = STATE_ADD def __init__(self, path): InterfaceView.__init__(self, "manager", "Manager") self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(path) self.get_widget("right_side").hide() self.get_widget("Manager").set_title(_("Remote Repository Manager")) self.get_widget("items_label").set_markup(_("Remote Repositories")) self.selected_branch = None self.items_treeview = rabbitvcs.ui.widget.Table( self.get_widget("items_treeview"), [GObject.TYPE_STRING, GObject.TYPE_STRING], [_("Name"), _("Host")], callbacks={ "mouse-event": self.on_treeview_mouse_event, "key-event": self.on_treeview_key_event, "cell-edited": self.on_treeview_cell_edited_event, }, flags={"sortable": False, "sort_on": 0, "editable": [0, 1]}, ) self.load() def load(self): self.items_treeview.clear() self.remote_list = self.git.remote_list() for remote in self.remote_list: self.items_treeview.append([remote["name"], remote["host"]]) def save(self, row, column, data): row = int(row) if row in self.remote_list: remote = self.remote_list[row] name = remote["name"] if column == 0: name = data host = remote["host"] if column == 1: host = data if name != remote["name"]: self.git.remote_rename(remote["name"], name) if host != remote["host"]: self.git.remote_set_url(remote["name"], host) self.load() else: (name, host) = self.items_treeview.get_row(row) if name and host: self.git.remote_add(name, host) self.load() def on_add_clicked(self, widget): self.show_add() def on_delete_clicked(self, widget): selected = self.items_treeview.get_selected_row_items(0) confirm = rabbitvcs.ui.dialog.Confirmation( _("Are you sure you want to delete %s?" % ", ".join(selected)) ) result = confirm.run() if result == Gtk.ResponseType.OK or result == True: for remote in selected: self.git.remote_delete(remote) self.load() def on_treeview_key_event(self, treeview, event, *args): if Gdk.keyval_name(event.keyval) in ("Up", "Down", "Return"): self.on_treeview_event(treeview, event) def on_treeview_mouse_event(self, treeview, event, *args): self.on_treeview_event(treeview, event) def on_treeview_cell_edited_event(self, cell, row, data, column): self.items_treeview.set_row_item(row, column, data) self.save(row, column, data) def on_treeview_event(self, treeview, event): selected = self.items_treeview.get_selected_row_items(0) if len(selected) > 0: if len(selected) == 1: self.show_edit(selected[0]) self.get_widget("delete").set_sensitive(True) def show_add(self): self.state = STATE_ADD self.items_treeview.unselect_all() self.items_treeview.append(["", ""]) self.items_treeview.focus(len(self.remote_list), 0) def show_edit(self, remote_name): self.state = STATE_EDIT if __name__ == "__main__": from rabbitvcs.ui import main (options, paths) = main(usage="Usage: rabbitvcs branch-manager path") window = GitRemotes(paths[0]) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/rename.py000077500000000000000000000102411445560650400176510ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.vcs from rabbitvcs.ui.dialog import MessageBox, OneLineTextChange from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui import InterfaceNonView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class Rename(InterfaceNonView): DO_RENAME = False def __init__(self, path): InterfaceNonView.__init__(self) self.register_gtk_quit() self.vcs = rabbitvcs.vcs.VCS() self.path = path if not os.path.exists(self.path): MessageBox(_("The requested file or folder does not exist.")) self.close() return dialog = OneLineTextChange(_("Rename"), _("New Name:"), self.path) (result, new_path) = dialog.run() if result != Gtk.ResponseType.OK: self.close() return if not new_path: MessageBox(_("The new name field is required")) self.new_path = new_path self.DO_RENAME = True class SVNRename(Rename): def __init__(self, path): Rename.__init__(self, path) if not self.DO_RENAME: return self.svn = self.vcs.svn() self.action = rabbitvcs.ui.action.SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set() ) dirname = os.path.dirname(self.new_path) if not os.path.exists(dirname): os.mkdir(dirname) self.svn.add(dirname) self.action.append(self.action.set_header, _("Rename")) self.action.append(self.action.set_status, _("Running Rename Command...")) self.action.append(self.svn.move, self.path, self.new_path) self.action.append(self.action.set_status, _("Completed Rename")) self.action.append(self.action.finish) self.action.append(self.close) self.action.schedule() class GitRename(Rename): def __init__(self, path): Rename.__init__(self, path) if not self.DO_RENAME: return self.git = self.vcs.git(path) self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) dirname = os.path.dirname(os.path.realpath(self.new_path)) if not os.path.exists(dirname): os.mkdir(dirname) self.action.append(self.action.set_header, _("Rename")) self.action.append(self.action.set_status, _("Running Rename Command...")) self.action.append(self.git.move, self.path, self.new_path) self.action.append(self.action.set_status, _("Completed Rename")) self.action.append(self.action.finish) self.action.append(self.close) self.action.schedule() classes_map = {rabbitvcs.vcs.VCS_SVN: SVNRename, rabbitvcs.vcs.VCS_GIT: GitRename} def rename_factory(path): guess = rabbitvcs.vcs.guess(path) return classes_map[guess["vcs"]](path) if __name__ == "__main__": from rabbitvcs.ui import main (options, paths) = main(usage="Usage: rabbitvcs rename [path]") window = rename_factory(os.path.abspath(paths[0])) Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/renderers/000077500000000000000000000000001445560650400200205ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/ui/renderers/__init__.py000066400000000000000000000000001445560650400221170ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/ui/renderers/graphcell.py000066400000000000000000000166101445560650400223370ustar00rootroot00000000000000"""Cell renderer for directed graph. This module contains the implementation of a custom GtkCellRenderer that draws part of the directed graph based on the lines suggested by the code in graph.py. Because we're shiny, we use Cairo to do this, and because we're naughty we cheat and draw over the bits of the TreeViewColumn that are supposed to just be for the background. """ from __future__ import absolute_import __copyright__ = "Copyright 2005 Canonical Ltd." __author__ = "Scott James Remnant " import math import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GObject, Pango import cairo # Styles used when rendering revision graph edges style_SOLID = 0 style_DASHED = 1 class CellRendererGraph(Gtk.CellRenderer): """Cell renderer for directed graph. Properties: node (column, colour) tuple to draw revision node, in_lines (start, end, colour, style) tuple list to draw inward lines, out_lines (start, end, colour, style) tuple list to draw outward lines. """ columns_len = 1 _box_size = None node = None in_lines = [] out_lines = [] __gproperties__ = { "graph": ( GObject.TYPE_PYOBJECT, "graph", "revision node instruction", GObject.PARAM_WRITABLE, ) } def do_set_property(self, property, value): """Set properties from GObject properties.""" if not value: return if property.name == "graph": self.node = value["node"] self.in_lines = value["in_lines"] self.out_lines = value["out_lines"] else: raise AttributeError("no such property: '%s'" % property.name) def box_size(self, widget): """Calculate box size based on widget's font. Cache this as it's probably expensive to get. It ensures that we draw the graph at least as large as the text. """ return 20 def set_colour(self, ctx, colour, bg, fg): """Set the context source colour. Picks a distinct colour based on an internal wheel; the bg parameter provides the value that should be assigned to the 'zero' colours and the fg parameter provides the multiplier that should be applied to the foreground colours. """ if isinstance(colour, str): r, g, b = colour[1:3], colour[3:5], colour[5:7] colour_rgb = int(r, 16) / 255.0, int(g, 16) / 255.0, int(b, 16) / 255.0 else: if colour == 0: colour_rgb = Gtklib.MAINLINE_COLOR else: colour_rgb = Gtklib.LINE_COLORS[colour % len(Gtklib.LINE_COLORS)] red = (colour_rgb[0] * fg) or bg green = (colour_rgb[1] * fg) or bg blue = (colour_rgb[2] * fg) or bg ctx.set_source_rgb(red, green, blue) def do_get_size(self, widget, cell_area): """Return the size we need for this cell. Each cell is drawn individually and is only as wide as it needs to be, we let the TreeViewColumn take care of making them all line up. """ box_size = self.box_size(widget) + 1 width = box_size * (self.columns_len + 1) height = box_size # FIXME I have no idea how to use cell_area properly return (0, 0, width, height) def do_render(self, ctx, widget, bg_area, cell_area, flags): """Render an individual cell. Draws the cell contents using cairo, taking care to clip what we do to within the background area so we don't draw over other cells. Note that we're a bit naughty there and should really be drawing in the cell_area (or even the exposed area), but we explicitly don't want any gutter. We try and be a little clever, if the line we need to draw is going to cross other columns we actually draw it as in the .---' style instead of a pure diagonal ... this reduces confusion by an incredible amount. """ ctx.rectangle(bg_area.x, bg_area.y, bg_area.width, bg_area.height) ctx.clip() box_size = self.box_size(widget) # Maybe draw branch head highlight under revision node if self.node: (column, colour) = self.node arc_start_position_x = cell_area.x + box_size * column + box_size / 2 arc_start_position_y = cell_area.y + cell_area.height / 2 ctx.set_line_width(box_size / 8) ctx.set_line_cap(cairo.LINE_CAP_ROUND) # Draw lines into the cell if self.in_lines: for start, end, lcolour in self.in_lines: style = style_SOLID self.render_line( ctx, cell_area, box_size, bg_area.y, bg_area.height, start, end, lcolour, style, ) # Draw lines out of the cell if self.out_lines: for start, end, lcolour in self.out_lines: style = style_SOLID self.render_line( ctx, cell_area, box_size, bg_area.y + bg_area.height, bg_area.height, start, end, lcolour, style, ) # Draw the revision node in the right column if not self.node: return ctx.arc( arc_start_position_x, arc_start_position_y, box_size / 5, 0, 2 * math.pi ) self.set_colour(ctx, colour, 0.0, 0.5) ctx.stroke_preserve() self.set_colour(ctx, colour, 0.5, 1.0) ctx.fill() ctx.save() def render_line( self, ctx, cell_area, box_size, mid, height, start, end, colour, style ): if start is None: x = cell_area.x + box_size * end + box_size / 2 ctx.move_to(x, mid + height / 3) ctx.line_to(x, mid + height / 3) ctx.move_to(x, mid + height / 6) ctx.line_to(x, mid + height / 6) elif end is None: x = cell_area.x + box_size * start + box_size / 2 ctx.move_to(x, mid - height / 3) ctx.line_to(x, mid - height / 3) ctx.move_to(x, mid - height / 6) ctx.line_to(x, mid - height / 6) else: startx = cell_area.x + box_size * start + box_size / 2 endx = cell_area.x + box_size * end + box_size / 2 ctx.move_to(startx, mid - height / 2) if start - end == 0: ctx.line_to(endx, mid + height / 2) else: ctx.curve_to( startx, mid - height / 5, startx, mid - height / 5, startx + (endx - startx) / 2, mid, ) ctx.curve_to( endx, mid + height / 5, endx, mid + height / 5, endx, mid + height / 2, ) self.set_colour(ctx, colour, 0.0, 0.65) if style == style_DASHED: dashes = [1, 2] ctx.set_dash(dashes) ctx.stroke() ctx.set_dash([]) rabbitvcs-0.19/rabbitvcs/ui/reset.py000066400000000000000000000101771445560650400175310ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.vcs from rabbitvcs.util.strings import S import rabbitvcs.ui.widget from rabbitvcs.ui.action import GitAction from rabbitvcs.ui import InterfaceView import time from datetime import datetime from gi.repository import Gtk, GObject, Gdk, Pango # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class GitReset(InterfaceView): """ Provides a UI to reset your repository to some specified state """ def __init__(self, path, revision=None): InterfaceView.__init__(self, "reset", "Reset") self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(path) self.path = path self.revision_obj = None if revision: self.revision_obj = self.git.revision(revision) self.get_widget("path").set_text(S(path).display()) self.revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("revision_container"), self.git, revision=self.revision_obj, url=self.path, expand=True, ) self.get_widget("none_opt").set_active(True) self.check_path() def on_ok_clicked(self, widget): path = self.get_widget("path").get_text() mixed = self.get_widget("mixed_opt").get_active() soft = self.get_widget("soft_opt").get_active() hard = self.get_widget("hard_opt").get_active() merge = self.get_widget("merge_opt").get_active() none = self.get_widget("none_opt").get_active() type = None if mixed: type = "mixed" if soft: type = "soft" if hard: type = "hard" if merge: type = "merge" revision = self.revision_selector.get_revision_object() self.hide() self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Reset")) self.action.append(self.action.set_status, _("Running Reset Command...")) self.action.append(self.git.reset, path, revision, type) self.action.append(self.action.set_status, _("Completed Reset")) self.action.append(self.action.finish) self.action.schedule() def on_browse_clicked(self, widget, data=None): chooser = rabbitvcs.ui.dialog.FolderChooser() path = chooser.run() if path is not None: self.get_widget("path").set_text(S(path).display()) def on_path_changed(self, widget, data=None): self.check_path() def check_path(self): path = self.get_widget("path").get_text() root = self.git.find_repository_path(path) if root != path: self.get_widget("none_opt").set_active(True) if __name__ == "__main__": from rabbitvcs.ui import main, REVISION_OPT, VCS_OPT (options, paths) = main( [REVISION_OPT, VCS_OPT], usage="Usage: rabbitvcs reset [-r REVISION] path" ) window = GitReset(paths[0], options.revision) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/revert.py000077500000000000000000000202031445560650400177100ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.vcs.status import Status from rabbitvcs.util.log import Log from rabbitvcs.util.strings import S import rabbitvcs.vcs import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.util.contextmenu import GtkFilesContextMenu, GtkContextMenuCaller from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import six.moves._thread from time import sleep from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.revert") _ = gettext.gettext helper.gobject_threads_init() log = Log("rabbitvcs.ui.revert") _ = gettext.gettext class Revert(InterfaceView, GtkContextMenuCaller): TOGGLE_ALL = True def __init__(self, paths, base_dir=None): InterfaceView.__init__(self, "revert", "Revert") self.paths = paths self.base_dir = base_dir self.last_row_clicked = None self.vcs = rabbitvcs.vcs.VCS() self.items = [] self.statuses = self.vcs.statuses_for_revert(paths) self.files_table = rabbitvcs.ui.widget.Table( self.get_widget("files_table"), [ GObject.TYPE_BOOLEAN, rabbitvcs.ui.widget.TYPE_HIDDEN_OBJECT, rabbitvcs.ui.widget.TYPE_PATH, GObject.TYPE_STRING, ], [rabbitvcs.ui.widget.TOGGLE_BUTTON, "", _("Path"), _("Extension")], filters=[ { "callback": rabbitvcs.ui.widget.path_filter, "user_data": {"base_dir": base_dir, "column": 2}, } ], callbacks={ "row-activated": self.on_files_table_row_activated, "mouse-event": self.on_files_table_mouse_event, "key-event": self.on_files_table_key_event, }, ) self.initialize_items() def on_ok_clicked(self, widget): return True def load(self): self.get_widget("status").set_text(_("Loading...")) self.items = self.vcs.get_items(self.paths, self.statuses) self.populate_files_table() self.get_widget("status").set_text(_("Found %d item(s)") % len(self.items)) def populate_files_table(self): self.files_table.clear() for item in self.items: self.files_table.append( [True, S(item.path), item.path, helper.get_file_extension(item.path)] ) # Overrides the GtkContextMenuCaller method def on_context_menu_command_finished(self): self.initialize_items() def initialize_items(self): """ Initializes the activated cache and loads the file items in a new thread """ try: six.moves._thread.start_new_thread(self.load, ()) except Exception as e: log.exception(e) def on_select_all_toggled(self, widget): self.TOGGLE_ALL = not self.TOGGLE_ALL for row in self.files_table.get_items(): row[0] = self.TOGGLE_ALL def on_files_table_row_activated(self, treeview, event, col): paths = self.files_table.get_selected_row_items(1) helper.launch_diff_tool(*paths) def on_files_table_key_event(self, treeview, event, *args): if Gdk.keyval_name(event.keyval) == "Delete": self.delete_items(treeview, event) def on_files_table_mouse_event(self, treeview, event, *args): if event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE: self.show_files_table_popup_menu(treeview, event) def show_files_table_popup_menu(self, treeview, event): paths = self.files_table.get_selected_row_items(1) GtkFilesContextMenu(self, event, self.base_dir, paths).show() class SVNRevert(Revert): def __init__(self, paths, base_dir=None): Revert.__init__(self, paths, base_dir) self.svn = self.vcs.svn() def on_ok_clicked(self, widget): items = self.files_table.get_activated_rows(1) if not items: self.close() return self.hide() self.action = rabbitvcs.ui.action.SVNAction( self.vcs.svn(), register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Revert")) self.action.append(self.action.set_status, _("Running Revert Command...")) self.action.append(self.vcs.svn().revert, items, recurse=True) self.action.append(self.action.set_status, _("Completed Revert")) self.action.append(self.action.finish) self.action.schedule() class GitRevert(Revert): def __init__(self, paths, base_dir=None): Revert.__init__(self, paths, base_dir) self.git = self.vcs.git(self.paths[0]) def on_files_table_row_activated(self, treeview, event, col): paths = self.files_table.get_selected_row_items(1) pathrev1 = helper.create_path_revision_string(paths[0], "base") pathrev2 = helper.create_path_revision_string(paths[0], "working") proc = helper.launch_ui_window("diff", ["-s", pathrev1, pathrev2]) self.rescan_after_process_exit(proc, paths) def on_ok_clicked(self, widget): items = self.files_table.get_activated_rows(1) if not items: self.close() return self.hide() self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Revert")) self.action.append(self.action.set_status, _("Running Revert Command...")) self.action.append(self.git.checkout, items) self.action.append(self.action.set_status, _("Completed Revert")) self.action.append(self.action.finish) self.action.schedule() class SVNRevertQuiet(object): def __init__(self, paths, base_dir=None): self.vcs = rabbitvcs.vcs.VCS() self.action = rabbitvcs.ui.action.SVNAction(self.vcs.svn(), run_in_thread=False) self.action.append(self.vcs.svn().revert, paths) self.action.schedule() class GitRevertQuiet(object): def __init__(self, paths, base_dir=None): self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(paths[0]) self.action = rabbitvcs.ui.action.GitAction(self.git, run_in_thread=False) self.action.append(self.git.checkout, paths) self.action.schedule() classes_map = {rabbitvcs.vcs.VCS_SVN: SVNRevert, rabbitvcs.vcs.VCS_GIT: GitRevert} quiet_classes_map = { rabbitvcs.vcs.VCS_SVN: SVNRevertQuiet, rabbitvcs.vcs.VCS_GIT: GitRevertQuiet, } def revert_factory(classes_map, paths, base_dir=None): guess = rabbitvcs.vcs.guess(paths[0]) return classes_map[guess["vcs"]](paths, base_dir) if __name__ == "__main__": from rabbitvcs.ui import main, BASEDIR_OPT, QUIET_OPT (options, paths) = main( [BASEDIR_OPT, QUIET_OPT], usage="Usage: rabbitvcs revert [path1] [path2] ..." ) if options.quiet: revert_factory(quiet_classes_map, paths) else: window = revert_factory(classes_map, paths, options.base_dir) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/revprops.py000066400000000000000000000067201445560650400202660ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.ui.action import SVNAction from rabbitvcs.util.log import Log import rabbitvcs.vcs from rabbitvcs.util.strings import S import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui.properties import PropertiesBase from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.revprops") _ = gettext.gettext class SVNRevisionProperties(PropertiesBase): def __init__(self, path, revision=None): PropertiesBase.__init__(self, path) self.svn = self.vcs.svn() if not self.svn.is_path_repository_url(path): self.path = self.svn.get_repo_url(path) self.get_widget("path").set_text(S(self.path).display()) self.revision = revision self.revision_obj = None if revision is not None: self.revision_obj = self.svn.revision("number", revision) self.load() def load(self): self.table.clear() try: self.proplist = self.svn.revproplist( self.get_widget("path").get_text(), self.revision_obj ) except Exception as e: log.exception(e) rabbitvcs.ui.dialog.MessageBox(_("Unable to retrieve properties list")) self.proplist = {} if self.proplist: for key, val in list(self.proplist.items()): self.table.append([False, key, val.rstrip()]) def save(self): delete_recurse = self.get_widget("delete_recurse").get_active() self.action = SVNAction(self.svn, notification=False, run_in_thread=False) for row in self.delete_stack: self.action.append( self.svn.revpropdel, self.path, row[1], self.revision_obj, force=True ) for row in self.table.get_items(): self.action.append( self.svn.revpropset, row[1], row[2], self.path, self.revision_obj, force=True, ) self.action.schedule() self.close() if __name__ == "__main__": from rabbitvcs.ui import main, VCS_OPT (options, args) = main([VCS_OPT], usage="Usage: rabbitvcs revprops [url1@rev1]") pathrev = helper.parse_path_revision_string(args.pop(0)) window = SVNRevisionProperties(pathrev[0], pathrev[1]) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/settings.py000066400000000000000000000361601445560650400202470ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext, _gettext, APP_NAME, LOCALE_DIR from rabbitvcs.services.checkerservice import StatusCheckerStub import rabbitvcs.services.checkerservice from rabbitvcs.util.strings import S from rabbitvcs.util._locale import get_locale import rabbitvcs.util.settings import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk, Pango # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import dbus import datetime from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext CHECKER_UNKNOWN_INFO = _("Unknown") CHECKER_SERVICE_ERROR = _( "There was an error communicating with the status checker service." ) class Settings(InterfaceView): dtformats = [ ["", _("default")], ["%c", _("locale")], ["%Y-%m-%d %H:%M:%S", _("ISO")], ["%b %d, %Y %I:%M:%S %p", None], ["%B %d, %Y %I:%M:%S %p", None], ["%m/%d/%Y %I:%M:%S %p", None], ["%b %d, %Y %H:%M:%S", None], ["%B %d, %Y %H:%M:%S", None], ["%m/%d/%Y %H:%M:%S", None], ["%d %b %Y %H:%M:%S", None], ["%d %B %Y %H:%M:%S", None], ["%d/%m/%Y %H:%M:%S", None], ] def __init__(self, base_dir=None): """ Provides an interface to the settings library. """ InterfaceView.__init__(self, "settings", "Settings") self.checker_service = None self.settings = rabbitvcs.util.settings.SettingsManager() self.get_widget("enable_attributes").set_active( int(self.settings.get("general", "enable_attributes")) ) self.get_widget("enable_emblems").set_active( int(self.settings.get("general", "enable_emblems")) ) self.get_widget("enable_recursive").set_active( int(self.settings.get("general", "enable_recursive")) ) self.get_widget("enable_highlighting").set_active( int(self.settings.get("general", "enable_highlighting")) ) self.get_widget("enable_colorize").set_active( int(self.settings.get("general", "enable_colorize")) ) self.get_widget("show_debug").set_active( int(self.settings.get("general", "show_debug")) ) self.get_widget("enable_subversion").set_active( int(self.settings.get("HideItem", "svn")) == 0 ) self.get_widget("enable_git").set_active( int(self.settings.get("HideItem", "git")) == 0 ) self.get_widget("enable_mercurial").set_active( int(self.settings.get("HideItem", "hg")) == 0 ) dtfs = [] dt = datetime.datetime.today() # Disambiguate day. if dt.day <= 12: dt = datetime.datetime( dt.year, dt.month, dt.day + 12, dt.hour, dt.minute, dt.second ) for format, label in self.dtformats: if label is None: label = helper.format_datetime(dt, format) dtfs.append([format, label]) self.datetime_format = rabbitvcs.ui.widget.ComboBox( self.get_widget("datetime_format"), dtfs, 2, 1 ) self.datetime_format.set_active_from_value( self.settings.get("general", "datetime_format") ) self.default_commit_message = rabbitvcs.ui.widget.TextView( self.get_widget("default_commit_message") ) self.default_commit_message.set_text( S( self.settings.get_multiline("general", "default_commit_message") ).display() ) self.get_widget("diff_tool").set_text( S(self.settings.get("external", "diff_tool")).display() ) self.get_widget("diff_tool_swap").set_active( int(self.settings.get("external", "diff_tool_swap")) ) self.get_widget("merge_tool").set_text( S(self.settings.get("external", "merge_tool")).display() ) self.get_widget("cache_number_repositories").set_text( S(self.settings.get("cache", "number_repositories")).display() ) self.get_widget("cache_number_messages").set_text( S(self.settings.get("cache", "number_messages")).display() ) self.logging_type = rabbitvcs.ui.widget.ComboBox( self.get_widget("logging_type"), ["None", "Console", "File", "Both"] ) val = self.settings.get("logging", "type") if not val: val = "Console" self.logging_type.set_active_from_value(val) self.logging_level = rabbitvcs.ui.widget.ComboBox( self.get_widget("logging_level"), ["Debug", "Info", "Warning", "Error", "Critical"], ) val = self.settings.get("logging", "level") if not val: val = "Debug" self.logging_level.set_active_from_value(val) # Git Configuration Editor show_git = False self.file_editor = None if base_dir: vcs = rabbitvcs.vcs.VCS() git_config_files = [] if ( vcs.is_in_a_or_a_working_copy(base_dir) and vcs.guess(base_dir)["vcs"] == rabbitvcs.vcs.VCS_GIT ): git = vcs.git(base_dir) git_config_files = git.get_config_files(base_dir) self.file_editor = rabbitvcs.ui.widget.MultiFileTextEditor( self.get_widget("git_config_container"), _("Config file:"), git_config_files, git_config_files, show_add_line=False, ) show_git = True if show_git: self.get_widget("pages").get_nth_page(5).show() else: self.get_widget("pages").get_nth_page(5).hide() self._populate_checker_tab() def _get_checker_service(self, report_failure=True): if not self.checker_service: try: session_bus = dbus.SessionBus() self.checker_service = session_bus.get_object( rabbitvcs.services.checkerservice.SERVICE, rabbitvcs.services.checkerservice.OBJECT_PATH, ) # Initialize service locale in case it just started. self.checker_service.SetLocale(*get_locale()) except dbus.DBusException as ex: if report_failure: rabbitvcs.ui.dialog.MessageBox(CHECKER_SERVICE_ERROR) return self.checker_service def _populate_checker_tab(self, report_failure=True, connect=True): # This is a limitation of GLADE, and can be removed when we migrate to # GTK2 Builder checker_service = self.checker_service if not checker_service and connect: checker_service = self._get_checker_service(report_failure) self.get_widget("stop_checker").set_sensitive(bool(checker_service)) if checker_service: self.get_widget("checker_type").set_text( S(checker_service.CheckerType()).display() ) self.get_widget("pid").set_text(S(checker_service.PID()).display()) memory = checker_service.MemoryUsage() if memory: self.get_widget("memory_usage").set_text("%s KB" % memory) else: self.get_widget("memory_usage").set_text(CHECKER_UNKNOWN_INFO) self.get_widget("locale").set_text( S(".".join(checker_service.SetLocale())).display() ) self._populate_info_table(checker_service.ExtraInformation()) else: self.get_widget("checker_type").set_text(CHECKER_UNKNOWN_INFO) self.get_widget("pid").set_text(CHECKER_UNKNOWN_INFO) self.get_widget("memory_usage").set_text(CHECKER_UNKNOWN_INFO) self.get_widget("locale").set_text(CHECKER_UNKNOWN_INFO) self._clear_info_table() def _clear_info_table(self): for info_table in self.get_widget("info_table_area").get_children(): info_table.destroy() def _populate_info_table(self, info): self._clear_info_table() table_place = self.get_widget("info_table_area") table = rabbitvcs.ui.widget.KeyValueTable(info) table_place.add(table) table.show() def on_refresh_info_clicked(self, widget): self._populate_checker_tab() def _stop_checker(self): pid = None if self.checker_service: try: pid = self.checker_service.Quit() except dbus.exceptions.DBusException: # Ignore it, it will necessarily happen when we kill the service pass self.checker_service = None if pid: try: os.waitpid(pid, 0) except OSError: # This occurs if the process is already gone. pass def on_restart_checker_clicked(self, widget): self._stop_checker() rabbitvcs.services.checkerservice.start() self._populate_checker_tab() def on_stop_checker_clicked(self, widget): self._stop_checker() self._populate_checker_tab(report_failure=False, connect=False) def on_destroy(self, widget): Gtk.main_quit() def on_cancel_clicked(self, widget): Gtk.main_quit() def on_ok_clicked(self, widget): self.save() Gtk.main_quit() def on_apply_clicked(self, widget): self.save() def save(self): self.settings.set( "general", "enable_attributes", self.get_widget("enable_attributes").get_active(), ) self.settings.set( "general", "enable_emblems", self.get_widget("enable_emblems").get_active() ) self.settings.set( "general", "enable_recursive", self.get_widget("enable_recursive").get_active(), ) self.settings.set( "general", "enable_highlighting", self.get_widget("enable_highlighting").get_active(), ) self.settings.set( "general", "enable_colorize", self.get_widget("enable_colorize").get_active(), ) self.settings.set( "general", "show_debug", self.get_widget("show_debug").get_active() ) self.settings.set( "HideItem", "svn", not self.get_widget("enable_subversion").get_active() ) self.settings.set( "HideItem", "git", not self.get_widget("enable_git").get_active() ) self.settings.set( "HideItem", "hg", not self.get_widget("enable_mercurial").get_active() ) self.settings.set_multiline( "general", "default_commit_message", self.default_commit_message.get_text() ) self.settings.set( "general", "datetime_format", self.datetime_format.get_active_text() ) self.settings.set( "external", "diff_tool", self.get_widget("diff_tool").get_text() ) self.settings.set( "external", "diff_tool_swap", self.get_widget("diff_tool_swap").get_active() ) self.settings.set( "external", "merge_tool", self.get_widget("merge_tool").get_text() ) self.settings.set( "cache", "number_repositories", self.get_widget("cache_number_repositories").get_text(), ) self.settings.set( "cache", "number_messages", self.get_widget("cache_number_messages").get_text(), ) self.settings.set("logging", "type", self.logging_type.get_active_text()) self.settings.set("logging", "level", self.logging_level.get_active_text()) self.settings.write() if self.file_editor: self.file_editor.save() def on_external_diff_tool_browse_clicked(self, widget): chooser = rabbitvcs.ui.dialog.FileChooser(_("Select a program"), "/usr/bin") path = chooser.run() if not path is None: path = path.replace("file://", "") self.get_widget("diff_tool").set_text(S(path).display()) def on_cache_clear_repositories_clicked(self, widget): confirmation = rabbitvcs.ui.dialog.Confirmation( _("Are you sure you want to clear your repository paths?") ) if confirmation.run() == Gtk.ResponseType.OK: path = helper.get_repository_paths_path() fh = open(path, "w") fh.write("") fh.close() rabbitvcs.ui.dialog.MessageBox(_("Repository paths cleared")) def on_cache_clear_messages_clicked(self, widget): confirmation = rabbitvcs.ui.dialog.Confirmation( _("Are you sure you want to clear your previous messages?") ) if confirmation.run() == Gtk.ResponseType.OK: path = helper.get_previous_messages_path() fh = open(path, "w") fh.write("") fh.close() rabbitvcs.ui.dialog.MessageBox(_("Previous messages cleared")) def on_cache_clear_authentication_clicked(self, widget): confirmation = rabbitvcs.ui.dialog.Confirmation( _("Are you sure you want to clear your authentication information?") ) if confirmation.run() == Gtk.ResponseType.OK: home_dir = helper.get_user_path() subpaths = [ "/.subversion/auth/svn.simple", "/.subversion/auth/svn.ssl.server", "/.subversion/auth/svn.username", ] for subpath in subpaths: path = "%s%s" % (home_dir, subpath) if os.path.exists(path): files = os.listdir(path) for filename in files: filepath = "%s/%s" % (path, filename) os.remove(filepath) rabbitvcs.ui.dialog.MessageBox(_("Authentication information cleared")) if __name__ == "__main__": from rabbitvcs.ui import main, BASEDIR_OPT (options, paths) = main([BASEDIR_OPT], usage="Usage: rabbitvcs settings") window = Settings(options.base_dir) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/stage.py000066400000000000000000000071731445560650400175140ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.vcs from rabbitvcs.util.log import Log from rabbitvcs.util.strings import S import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui.add import Add from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import six.moves._thread from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.stage") _ = gettext.gettext class GitStage(Add): def setup(self, window, columns): window.set_title(_("Stage")) self.git = self.vcs.git(self.paths[0]) self.statuses = self.git.STATUSES_FOR_STAGE def populate_files_table(self): self.files_table.clear() for item in self.items: self.files_table.append( [True, S(item.path), item.path, helper.get_file_extension(item.path)] ) def on_ok_clicked(self, widget): items = self.files_table.get_activated_rows(1) if not items: self.close() return self.hide() self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Stage")) self.action.append(self.action.set_status, _("Running Stage Command...")) for item in items: self.action.append(self.git.stage, item) self.action.append(self.action.set_status, _("Completed Stage")) self.action.append(self.action.finish) self.action.schedule() class GitStageQuiet(object): def __init__(self, paths, base_dir=None): self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(paths[0]) self.action = rabbitvcs.ui.action.GitAction(self.git, run_in_thread=False) for path in paths: self.action.append(self.git.stage, path) self.action.schedule() classes_map = {rabbitvcs.vcs.VCS_GIT: GitStage} quiet_classes_map = {rabbitvcs.vcs.VCS_GIT: GitStageQuiet} def stage_factory(classes_map, paths, base_dir=None): guess = rabbitvcs.vcs.guess(paths[0]) return classes_map[guess["vcs"]](paths, base_dir) if __name__ == "__main__": from rabbitvcs.ui import main, BASEDIR_OPT, QUIET_OPT (options, paths) = main( [BASEDIR_OPT, QUIET_OPT], usage="Usage: rabbitvcs stage [path1] [path2] ..." ) if options.quiet: stage_factory(quiet_classes_map, paths) else: window = stage_factory(classes_map, paths, options.base_dir) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/switch.py000077500000000000000000000070431445560650400177110ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.strings import * import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class SVNSwitch(InterfaceView): def __init__(self, path, revision=None): InterfaceView.__init__(self, "switch", "Switch") self.path = path self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() self.get_widget("path").set_text(S(self.path).display()) self.repositories = rabbitvcs.ui.widget.ComboBox( self.get_widget("repositories"), helper.get_repository_paths() ) self.revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("revision_container"), self.svn, revision=revision, url_combobox=self.repositories, expand=True, ) self.repositories.set_child_text( helper.unquote_url(self.svn.get_repo_url(self.path)) ) def on_ok_clicked(self, widget): url = self.repositories.get_active_text() if not url or not self.path: rabbitvcs.ui.dialog.MessageBox( _("The repository location is a required field.") ) return revision = self.revision_selector.get_revision_object() self.hide() self.action = rabbitvcs.ui.action.SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Switch")) self.action.append(self.action.set_status, _("Running Switch Command...")) self.action.append(helper.save_repository_path, url) self.action.append( self.svn.switch, self.path, helper.quote_url(url), revision=revision ) self.action.append(self.action.set_status, _("Completed Switch")) self.action.append(self.action.finish) self.action.schedule() classes_map = {rabbitvcs.vcs.VCS_SVN: SVNSwitch} def switch_factory(path, revision=None): guess = rabbitvcs.vcs.guess(path) return classes_map[guess["vcs"]](path, revision) if __name__ == "__main__": from rabbitvcs.ui import main, REVISION_OPT (options, args) = main([REVISION_OPT], usage="Usage: rabbitvcs switch [url]") window = switch_factory(args[0], revision=options.revision) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/tags.py000066400000000000000000000275621445560650400173530ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.vcs import rabbitvcs.util.settings from rabbitvcs.util.strings import S from rabbitvcs.ui.log import log_dialog_factory from rabbitvcs.ui.dialog import DeleteConfirmation import rabbitvcs.ui.widget from rabbitvcs.ui.action import GitAction from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk, Pango # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os from datetime import datetime import time from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext STATE_ADD = 0 STATE_EDIT = 1 class GitTagManager(InterfaceView): """ Provides a UI interface to manage items """ state = STATE_ADD def __init__(self, path, revision=None): InterfaceView.__init__(self, "manager", "Manager") self.path = path sm = rabbitvcs.util.settings.SettingsManager() self.datetime_format = sm.get("general", "datetime_format") self.get_widget("right_side").show() self.get_widget("Manager").set_size_request(695, -1) self.get_widget("Manager").set_title(_("Tag Manager")) self.get_widget("items_label").set_markup(_("Tags")) self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(path) self.revision_obj = self.git.revision(revision) self.selected_tag = None self.items_treeview = rabbitvcs.ui.widget.Table( self.get_widget("items_treeview"), [GObject.TYPE_STRING], [_("Tag")], callbacks={ "mouse-event": self.on_treeview_mouse_event, "key-event": self.on_treeview_key_event, }, flags={"sortable": True, "sort_on": 0}, ) self.initialize_detail() self.load(self.show_add) def initialize_detail(self): self.detail_container = self.get_widget("detail_container") self.detail_grid = Gtk.Grid() self.detail_grid.set_row_spacing(4) self.detail_grid.set_column_spacing(6) self.detail_grid.set_hexpand(True) row = 0 # Set up the Tag line label = Gtk.Label(label=_("Name:")) label.set_properties(xalign=0, yalign=0.5) self.tag_entry = Gtk.Entry() self.tag_entry.set_hexpand(True) self.detail_grid.attach(label, 0, row, 1, 1) self.detail_grid.attach(self.tag_entry, 1, row, 2, 1) tag_name_row = row row = row + 1 # Set up the Commit-sha line label = Gtk.Label(label=_("Revision:")) label.set_properties(xalign=0, yalign=0.5) self.start_point_entry = Gtk.Entry() self.start_point_entry.set_size_request(300, -1) self.start_point_entry.set_hexpand(True) if self.revision_obj.value: self.start_point_entry.set_text(S(self.revision_obj).display()) self.log_dialog_button = Gtk.Button() self.log_dialog_button.connect("clicked", self.on_log_dialog_button_clicked) image = Gtk.Image() image.set_from_icon_name("rabbitvcs-show_log", Gtk.IconSize.SMALL_TOOLBAR) self.log_dialog_button.set_image(image) self.detail_grid.attach(label, 0, row, 1, 1) self.detail_grid.attach(self.start_point_entry, 1, row, 1, 1) self.detail_grid.attach(self.log_dialog_button, 2, row, 1, 1) start_point_row = row row = row + 1 # Set up the Log Message Entry line label = Gtk.Label(label=_("Message:")) label.set_properties(xalign=0, yalign=0) self.message_entry = rabbitvcs.ui.widget.TextView() self.message_entry.view.set_size_request(300, 75) self.message_entry.view.set_hexpand(True) self.message_entry.view.set_vexpand(True) swin = Gtk.ScrolledWindow() swin.set_shadow_type(Gtk.ShadowType.ETCHED_IN) swin.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) swin.set_hexpand(True) swin.set_vexpand(True) swin.add(self.message_entry.view) self.detail_grid.attach(label, 0, row, 1, 1) self.detail_grid.attach(swin, 1, row, 2, 1) message_entry_row = row row = row + 1 # Set up Save button self.save_button = Gtk.Button(label=_("Save")) self.save_button.set_halign(Gtk.Align.START) self.save_button.connect("clicked", self.on_save_clicked) self.detail_grid.attach(self.save_button, 1, row, 1, 1) save_row = row row = row + 1 # Set up the tagger line label = Gtk.Label(label=_("Tagger:")) label.set_properties(xalign=0, yalign=0) self.tagger_label = Gtk.Label(label="") self.tagger_label.set_properties(xalign=0, yalign=0, selectable=True) self.tagger_label.set_hexpand(True) self.tagger_label.set_line_wrap(True) self.detail_grid.attach(label, 0, row, 1, 1) self.detail_grid.attach(self.tagger_label, 1, row, 2, 1) tagger_row = row row = row + 1 # Set up the Date line label = Gtk.Label(label=_("Date:")) label.set_properties(xalign=0, yalign=0) self.date_label = Gtk.Label(label="") self.date_label.set_properties(xalign=0, yalign=0, selectable=True) self.date_label.set_hexpand(True) self.detail_grid.attach(label, 0, row, 1, 1) self.detail_grid.attach(self.date_label, 1, row, 2, 1) date_row = row row = row + 1 # Set up the Revision line label = Gtk.Label(label=_("Revision:")) label.set_properties(xalign=0, yalign=0) self.revision_label = Gtk.Label(label="") self.revision_label.set_properties(xalign=0, selectable=True) self.revision_label.set_hexpand(True) self.revision_label.set_line_wrap(True) self.detail_grid.attach(label, 0, row, 1, 1) self.detail_grid.attach(self.revision_label, 1, row, 2, 1) revision_row = row row = row + 1 # Set up the Log Message line label = Gtk.Label(label=_("Message:")) label.set_properties(xalign=0, yalign=0) self.message_label = Gtk.Label(label="") self.message_label.set_properties(xalign=0, yalign=0, selectable=True) self.message_label.set_hexpand(True) self.message_label.set_vexpand(True) self.message_label.set_line_wrap(True) vport = Gtk.Viewport() vport.set_shadow_type(Gtk.ShadowType.NONE) vport.set_hexpand(True) vport.set_vexpand(True) vport.add(self.message_label) swin = Gtk.ScrolledWindow() swin.set_shadow_type(Gtk.ShadowType.NONE) swin.set_size_request(250, -1) swin.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) swin.set_hexpand(True) swin.set_vexpand(True) swin.add(vport) self.detail_grid.attach(label, 0, row, 1, 1) self.detail_grid.attach(swin, 1, row, 2, 1) message_row = row row = row + 1 self.add_rows = [tag_name_row, message_entry_row, start_point_row, save_row] self.view_rows = [tag_name_row, tagger_row, date_row, revision_row, message_row] self.detail_grid.show() self.detail_container.add(self.detail_grid) def load(self, callback, *args, **kwargs): self.items_treeview.clear() self.tag_list = self.git.tag_list() for item in self.tag_list: self.items_treeview.append([item.name]) if callback: callback(*args, **kwargs) def on_add_clicked(self, widget): self.show_add() def on_delete_clicked(self, widget): selected = self.items_treeview.get_selected_row_items(0) confirm = rabbitvcs.ui.dialog.Confirmation( _("Are you sure you want to delete %s?" % ", ".join(selected)) ) result = confirm.run() if result == Gtk.ResponseType.OK or result == True: for tag in selected: self.git.tag_delete(tag) self.load(self.show_add) def on_save_clicked(self, widget): tag_name = self.tag_entry.get_text() tag_message = self.message_entry.get_text() tag_revision = self.git.revision(self.start_point_entry.get_text()) self.git.tag(tag_name, tag_message, tag_revision) self.load(self.show_detail, tag_name) def on_treeview_key_event(self, treeview, event, *args): if Gdk.keyval_name(event.keyval) in ("Up", "Down", "Return"): self.on_treeview_event(treeview, event) def on_treeview_mouse_event(self, treeview, event, *args): self.on_treeview_event(treeview, event) def on_treeview_event(self, treeview, event): selected = self.items_treeview.get_selected_row_items(0) if len(selected) > 0: if len(selected) == 1: self.show_detail(selected[0]) self.get_widget("delete").set_sensitive(True) else: self.show_add() def show_rows(self, rows): self.detail_grid.hide() for w in self.detail_grid.get_children(): if self.detail_grid.child_get_property(w, "top-attach") in rows: w.show_all() else: w.hide() self.detail_grid.show() def show_add(self): self.items_treeview.unselect_all() self.tag_entry.set_text("") self.message_entry.set_text("") self.save_button.set_label(_("Add")) self.show_rows(self.add_rows) self.get_widget("detail_label").set_markup(_("Add Tag")) def show_detail(self, tag_name): self.selected_tag = None for item in self.tag_list: if S(item.name) == tag_name: self.selected_tag = item break self.save_button.set_label(_("Save")) if self.selected_tag: self.tag_entry.set_text(S(self.selected_tag.name).display()) self.revision_label.set_text(S(self.selected_tag.sha).display()) self.message_label.set_text( S(self.selected_tag.message).display().rstrip("\n") ) self.tagger_label.set_text(S(self.selected_tag.tagger).display()) self.date_label.set_text( helper.format_datetime( datetime.fromtimestamp(self.selected_tag.tag_time), self.datetime_format, ) ) self.show_rows(self.view_rows) self.get_widget("detail_label").set_markup(_("Tag Detail")) def on_log_dialog_button_clicked(self, widget): log_dialog_factory(self.path, ok_callback=self.on_log_dialog_closed) def on_log_dialog_closed(self, data): if data: self.start_point_entry.set_text(S(data).display()) if __name__ == "__main__": from rabbitvcs.ui import main, REVISION_OPT, VCS_OPT (options, paths) = main( [REVISION_OPT, VCS_OPT], usage="Usage: rabbitvcs tag-manager path" ) window = GitTagManager(paths[0], options.revision) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/unlock.py000077500000000000000000000111121445560650400176730ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext from rabbitvcs.util.log import Log from rabbitvcs.util.strings import S import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui.add import Add from rabbitvcs.ui import InterfaceView, InterfaceNonView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import six.moves._thread from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.unlock") _ = gettext.gettext class SVNUnlock(Add): def setup(self, window, columns): window.set_title(_("Unlock")) self.svn = self.vcs.svn() self.statuses = None # # Helpers # def on_context_menu_command_finished(self): self.initialize_items() def initialize_items(self): """ Initializes the activated cache and loads the file items in a new thread """ try: six.moves._thread.start_new_thread(self.load, ()) except Exception as e: log.exception(e) def load(self): self.get_widget("status").set_text(_("Loading...")) self.items = self.vcs.get_items(self.paths, self.statuses) self.populate_files_table() def populate_files_table(self): self.files_table.clear() found = 0 for item in self.items: # FIXME: ... if item.simple_content_status() in ( rabbitvcs.vcs.status.status_unversioned, rabbitvcs.vcs.status.status_ignored, ): continue if not self.svn.is_locked(item.path): continue self.files_table.append( [True, S(item.path), item.path, helper.get_file_extension(item.path)] ) found += 1 self.get_widget("status").set_text(_("Found %d item(s)") % found) # # UI Signal Callbacks # def on_ok_clicked(self, widget): items = self.files_table.get_activated_rows(1) if not items: self.close() return self.hide() self.action = rabbitvcs.ui.action.SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Unlock")) self.action.append(self.action.set_status, _("Running Unlock Command...")) for item in items: self.action.append(self.svn.unlock, item, force=True) self.action.append(self.action.set_status, _("Completed Unlock")) self.action.append(self.action.finish) self.action.schedule() class SVNUnlockQuiet(object): """ This class provides a handler to unlock functionality. """ def __init__(self, paths, base_dir=None): self.paths = paths self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() for path in self.paths: self.svn.unlock(path, force=True) classes_map = {rabbitvcs.vcs.VCS_SVN: SVNUnlock} quiet_classes_map = {rabbitvcs.vcs.VCS_SVN: SVNUnlockQuiet} def unlock_factory(cmap, paths, base_dir=None): guess = rabbitvcs.vcs.guess(paths[0]) return cmap[guess["vcs"]](paths, base_dir) if __name__ == "__main__": from rabbitvcs.ui import main, BASEDIR_OPT, QUIET_OPT (options, paths) = main( [BASEDIR_OPT, QUIET_OPT], usage="Usage: rabbitvcs unlock [path1] [path2] ..." ) if options.quiet: unlock_factory(quiet_classes_map, paths) else: window = unlock_factory(classes_map, paths, options.base_dir) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/unstage.py000066400000000000000000000072331445560650400200540ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.vcs from rabbitvcs.util.log import Log from rabbitvcs.util.strings import S import rabbitvcs.ui.action import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui.action import SVNAction from rabbitvcs.ui.add import Add from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import six.moves._thread from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() log = Log("rabbitvcs.ui.unstage") _ = gettext.gettext class GitUnstage(Add): def setup(self, window, columns): window.set_title(_("Unstage")) self.git = self.vcs.git(self.paths[0]) self.statuses = self.git.STATUSES_FOR_UNSTAGE def populate_files_table(self): self.files_table.clear() for item in self.items: self.files_table.append( [True, S(item.path), item.path, helper.get_file_extension(item.path)] ) def on_ok_clicked(self, widget): items = self.files_table.get_activated_rows(1) if not items: self.close() return self.hide() self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Unstage")) self.action.append(self.action.set_status, _("Running Unstage Command...")) for item in items: self.action.append(self.git.unstage, item) self.action.append(self.action.set_status, _("Completed Unstage")) self.action.append(self.action.finish) self.action.schedule() class GitUnstageQuiet(object): def __init__(self, paths, base_dir=None): self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(paths[0]) self.action = rabbitvcs.ui.action.GitAction(self.git, run_in_thread=False) for path in paths: self.action.append(self.git.unstage, path) self.action.schedule() classes_map = {rabbitvcs.vcs.VCS_GIT: GitUnstage} quiet_classes_map = {rabbitvcs.vcs.VCS_GIT: GitUnstageQuiet} def unstage_factory(classes_map, paths, base_dir=None): guess = rabbitvcs.vcs.guess(paths[0]) return classes_map[guess["vcs"]](paths, base_dir) if __name__ == "__main__": from rabbitvcs.ui import main, BASEDIR_OPT, QUIET_OPT (options, paths) = main( [BASEDIR_OPT, QUIET_OPT], usage="Usage: rabbitvcs unstage [path1] [path2] ..." ) if options.quiet: unstage_factory(quiet_classes_map, paths) else: window = unstage_factory(classes_map, paths, options.base_dir) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/update.py000077500000000000000000000115111445560650400176650ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.ui.dialog import rabbitvcs.ui.widget from rabbitvcs.ui.action import SVNAction, GitAction from rabbitvcs.ui import InterfaceNonView, InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class SVNUpdate(InterfaceNonView): """ This class provides an interface to generate an "update". Pass it a path and it will start an update, running the notification dialog. There is no glade . """ def __init__(self, paths): self.paths = paths self.vcs = rabbitvcs.vcs.VCS() self.svn = self.vcs.svn() def start(self): self.action = SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set(), run_in_thread=False ) self.action.append(self.action.set_header, _("Update")) self.action.append(self.action.set_status, _("Updating...")) self.action.append(self.svn.update, self.paths) self.action.append(self.action.set_status, _("Completed Update")) self.action.append(self.action.finish) self.action.schedule() class GitUpdate(InterfaceView): """ This class provides an interface to generate an "update". Pass it a path and it will start an update, running the notification dialog. There is no glade . """ def __init__(self, paths): InterfaceView.__init__(self, "git-update", "Update") self.paths = paths self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(paths[0]) self.repository_selector = rabbitvcs.ui.widget.GitRepositorySelector( self.get_widget("repository_container"), self.git ) def on_apply_changes_toggled(self, widget, data=None): self.get_widget("merge").set_sensitive( self.get_widget("apply_changes").get_active() ) self.get_widget("rebase").set_sensitive( self.get_widget("apply_changes").get_active() ) def on_ok_clicked(self, widget, data=None): self.hide() rebase = self.get_widget("rebase").get_active() git_function_params = [] apply_changes = self.get_widget("apply_changes").get_active() repository = self.repository_selector.repository_opt.get_active_text() branch = self.repository_selector.branch_opt.get_active_text() fetch_all = self.get_widget("all").get_active() self.action = GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set(), run_in_thread=False ) self.action.append(self.action.set_header, _("Update")) self.action.append(self.action.set_status, _("Updating...")) if apply_changes: if rebase: git_function_params.append("rebase") if fetch_all: git_function_params.append("all") repository = "" branch = "" self.action.append(self.git.pull, repository, branch, git_function_params) else: if fetch_all: self.action.append(self.git.fetch_all) else: self.action.append(self.git.fetch, repository, branch) self.action.append(self.action.set_status, _("Completed Update")) self.action.append(self.action.finish) self.action.schedule() classes_map = {rabbitvcs.vcs.VCS_SVN: SVNUpdate, rabbitvcs.vcs.VCS_GIT: GitUpdate} def update_factory(paths): guess = rabbitvcs.vcs.guess(paths[0]) return classes_map[guess["vcs"]](paths) if __name__ == "__main__": from rabbitvcs.ui import main (options, paths) = main(usage="Usage: rabbitvcs update [path1] [path2] ...") window = update_factory(paths) window.register_gtk_quit() if isinstance(window, SVNUpdate): window.start() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/updateto.py000066400000000000000000000136531445560650400202360ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs import gettext import rabbitvcs.ui.dialog import rabbitvcs.ui.widget import rabbitvcs.ui.action from rabbitvcs.ui import InterfaceView from gi.repository import Gtk, GObject, Gdk # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from rabbitvcs.util import helper import gi gi.require_version("Gtk", "3.0") sa = helper.SanitizeArgv() sa.restore() _ = gettext.gettext class UpdateToRevision(InterfaceView): """ This class provides an interface to update a working copy to a specific revision. It has a glade . """ def __init__(self, path, revision=None): InterfaceView.__init__(self, "update", "Update") self.path = path self.revision = revision self.vcs = rabbitvcs.vcs.VCS() class SVNUpdateToRevision(UpdateToRevision): def __init__(self, path, revision): UpdateToRevision.__init__(self, path, revision) self.svn = self.vcs.svn() self.get_widget("options_box").show() self.revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("revision_container"), self.svn, revision=revision, url=self.path, expand=True, revision_changed_callback=self.on_revision_changed, ) def on_ok_clicked(self, widget): revision = self.revision_selector.get_revision_object() recursive = self.get_widget("recursive").get_active() omit_externals = self.get_widget("omit_externals").get_active() rollback = self.get_widget("rollback").get_active() self.action = rabbitvcs.ui.action.SVNAction( self.svn, register_gtk_quit=self.gtk_quit_is_set() ) if rollback: self.action.append(self.action.set_header, _("Rollback To Revision")) self.action.append(self.action.set_status, _("Rolling Back...")) self.action.append( self.svn.merge_ranges, self.svn.get_repo_url(self.path), [(self.svn.revision("HEAD").primitive(), revision.primitive())], self.svn.revision("head"), self.path, ) self.action.append(self.action.set_status, _("Completed Rollback")) else: self.action.append(self.action.set_header, _("Update To Revision")) self.action.append(self.action.set_status, _("Updating...")) self.action.append( self.svn.update, self.path, revision=revision, recurse=recursive, ignore_externals=omit_externals, ) self.action.append(self.action.set_status, _("Completed Update")) self.action.append(self.action.finish) self.action.schedule() def on_revision_changed(self, revision_selector): # Only allow rollback when a revision number is specified if ( revision_selector.revision_kind_opt.get_active() == 1 and revision_selector.revision_entry.get_text() != "" ): self.get_widget("rollback").set_sensitive(True) else: self.get_widget("rollback").set_sensitive(False) class GitUpdateToRevision(UpdateToRevision): def __init__(self, path, revision): UpdateToRevision.__init__(self, path, revision) self.get_widget("revision_label").set_text( _("What revision/branch do you want to checkout?") ) self.git = self.vcs.git(path) self.revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("revision_container"), self.git, revision=revision, url=self.path, expand=True, revision_changed_callback=self.on_revision_changed, ) def on_ok_clicked(self, widget): revision = self.revision_selector.get_revision_object() self.action = rabbitvcs.ui.action.GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Checkout")) self.action.append(self.action.set_status, _("Checking out %s..." % revision)) self.action.append(self.git.checkout, [self.path], revision) self.action.append(self.action.set_status, _("Completed Checkout")) self.action.append(self.action.finish) self.action.schedule() def on_revision_changed(self, revision_selector): pass classes_map = { rabbitvcs.vcs.VCS_SVN: SVNUpdateToRevision, rabbitvcs.vcs.VCS_GIT: GitUpdateToRevision, } def updateto_factory(vcs, path, revision=None): if not vcs: guess = rabbitvcs.vcs.guess(path) vcs = guess["vcs"] return classes_map[vcs](path, revision) if __name__ == "__main__": from rabbitvcs.ui import main, REVISION_OPT, VCS_OPT (options, args) = main( [REVISION_OPT, VCS_OPT], usage="Usage: rabbitvcs updateto [path]" ) window = updateto_factory(options.vcs, args[0], revision=options.revision) window.register_gtk_quit() Gtk.main() rabbitvcs-0.19/rabbitvcs/ui/widget.py000066400000000000000000001512411445560650400176700ustar00rootroot00000000000000from __future__ import absolute_import from pprint import pformat from rabbitvcs.ui import STATUS_EMBLEMS from rabbitvcs.util.log import Log from rabbitvcs import gettext import rabbitvcs.vcs from rabbitvcs.util.strings import S from rabbitvcs.util._locale import get_locale from rabbitvcs.util import helper from rabbitvcs.util.decorators import gtk_unsafe from gi.repository import Gtk, Gdk, GObject, Pango from six.moves import range # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import os.path from locale import strxfrm import gi try: gi.require_version("Gtk", "3.0") except: gi.require_version("Gtk", "4.0") HAS_GTKSPELL = False try: gi.require_version("GtkSpell", "3.0") from gi.repository import GtkSpell HAS_GTKSPELL = True except (ImportError, ValueError): pass _ = gettext.gettext log = Log("rabbitvcs.ui.widget") TOGGLE_BUTTON = "TOGGLE_BUTTON" TYPE_PATH = "TYPE_PATH" TYPE_STATUS = "TYPE_STATUS" TYPE_ELLIPSIZED = "TYPE_ELLIPSIZED" TYPE_GRAPH = "TYPE_GRAPH" TYPE_MARKUP = "TYPE_MARKUP" TYPE_HIDDEN = "TYPE_HIDDEN" TYPE_HIDDEN_OBJECT = "TYPE_HIDDEN_OBJECT" ELLIPSIZE_COLUMN_CHARS = 20 PATH_ENTRY = "PATH_ENTRY" SEPARATOR = "\u2015" * 10 def filter_router(model, iter, column, filters): """ Route filter requests for a table's columns. This function is called for each cell of the table that gets displayed. @type model: Gtk.TreeModelFilter or Gtk.TreeModelSort @param model: The TreeModelFilter or Gtk.TreeModelSort instance for our table @type iter: Gtk.TreeIter @param iter: The TreeIter instance for the table row being filtered @type column: int @param column: The column index of the current item being filtered @type filters: list @param filters: A list of dicts used to define how a column should be filtered Note for filters: Each dict consists of a callback function and user data like so: { "callback": self.file_filter, "user_data": { "column": 0, //tells the callback what column to filter "base_dir": "/home/workingcopy" } } @return The filtered output defined for the given column """ real_model = model.get_model() real_iter = model.convert_iter_to_child_iter(iter) row = real_model[real_model.get_path(real_iter)] if not filters: return row[column] for filter in filters: filter_column = filter["user_data"]["column"] if column == filter_column: return filter["callback"](row, column, filter["user_data"]) return row[column] def path_filter(row, column, user_data=None): """ A common filter function that is used in many tables. Changes the displayed path to a path relative to the given base_dir (current working directory) @type row: Gtk.TreeModelRow @param row: The row that is being filtered @type column: int @param column: The column that is being filtered @type user_data: dict @param user_data: A dictionary of user_data useful to this function @rtype str @return A relative path """ base_dir = user_data["base_dir"] if row[column]: relpath = helper.get_relative_path(base_dir, row[column]) if relpath == "": relpath = os.path.basename(row[column]) return relpath else: return row[column] def long_text_filter(row, column, user_data=None): """ Uses the format_long_text helper function to trim and prettify some text. """ text = row[column] cols = user_data["cols"] if text: text = helper.format_long_text(text, cols) return text def git_revision_filter(row, column, user_data=None): """ Only show the first seven characters of a git revision hash """ text = row[column] if text: if text.startswith(""): text = text[3:10] else: text = text[0:7] return text def translate_filter(row, column, user_data=None): """ Translates text as needed. """ text = row[column] if text: return _(text) def compare_items(model, iter1, iter2, user_data=None): if not user_data: # No column data given => Give up return 0 colnum, coltype = user_data real_model = model.get_model() real_iter1 = model.convert_iter_to_child_iter(iter1) real_iter2 = model.convert_iter_to_child_iter(iter2) value1 = real_model.get_value(real_iter1, colnum) value2 = real_model.get_value(real_iter2, colnum) if coltype in [GObject.TYPE_STRING, str]: value1 = strxfrm(value1) value2 = strxfrm(value2) if value1 == value2: return 0 elif value1 < value2: return -1 else: return 1 class TableBase(object): def __init__( self, treeview, coltypes, colnames, values=[], filters=None, filter_types=None, callbacks={}, flags={}, ): """ @type treeview: Gtk.Treeview @param treeview: The treeview widget to use @type coltypes: list @param coltypes: Contains the "type" of each column (i.e. str or int) @type colnames: list @param colnames: Contains the name string for each column @type values: list @param values: Contains the data to be inserted into the table @type filters: list @param filters: A list of dicts used to define how a column should be filtered Note for filters: Each dict consists of a callback function and user data like so: { "callback": self.file_filter, "user_data": { "column": 0, //tells the callback what column to filter "base_dir": "/home/workingcopy" } } @type filter_types: list @param filter_types: Contains the filtered "type" of each column. @type callbacks: dict @param callbacks: A dict of callbacks to be used. Some are for signal handling while others are useful for other things. @type flags: dict @param flags: A dict of flags FLAGS: @type sortable: boolean @param sortable: whether the columns can be sorted @type sort_on: int @param sort_on: the column number to initially sort by @type editable: list @param editable: A list of which columns are editable """ from .renderers.graphcell import CellRendererGraph if "sortable" not in flags: flags["sortable"] = False if "sort_on" not in flags: flags["sort_on"] = -1 if "editable" not in flags: flags["editable"] = () self.treeview = treeview self.selected_rows = [] # When True, will cause update_selection to reapply the existing content of selected_rows, # rather than the other way around, then set it to False again. self._reassert_selection = False i = 0 for name in colnames: if coltypes[i] == GObject.TYPE_BOOLEAN: cell = Gtk.CellRendererToggle() cell.set_property("activatable", True) cell.set_property("xalign", 0) cell.connect("toggled", self.toggled_cb, i) colname = "" if name != TOGGLE_BUTTON: colname = name col = Gtk.TreeViewColumn(colname, cell) col.set_attributes(cell, active=i) elif coltypes[i] == TYPE_PATH: # The type should be str but we have to use TYPE_PATH to # distinguish from a regular str column coltypes[i] = str # First we create the column, then we create a CellRenderer # instance for the path icon and a CellRenderer instance for # the path. Each is packed into the treeview column col = Gtk.TreeViewColumn(name) cellpb = Gtk.CellRendererPixbuf() cellpb.set_property("xalign", 0) cellpb.set_property("yalign", 0) col.pack_start(cellpb, False) data = None if "file-column-callback" in callbacks: data = {"callback": callbacks["file-column-callback"], "column": i} else: data = {"callback": helper.get_node_kind, "column": i} col.set_cell_data_func(cellpb, self.file_pixbuf, data) cell = Gtk.CellRendererText() cell.set_property("xalign", 0) cell.set_property("yalign", 0) col.pack_start(cell, False) col.set_attributes(cell, text=i) elif coltypes[i] == TYPE_STATUS: # Same as for TYPE_PATH coltypes[i] = str col = Gtk.TreeViewColumn(name) cellpb = Gtk.CellRendererPixbuf() cellpb.set_property("xalign", 0) cellpb.set_property("yalign", 0) col.pack_start(cellpb, False) data = None col.set_cell_data_func(cellpb, self.status_pixbuf, i) cell = Gtk.CellRendererText() cell.set_property("xalign", 0) cell.set_property("yalign", 0) col.pack_start(cell, False) col.set_attributes(cell, text=i) elif coltypes[i] == TYPE_HIDDEN: coltypes[i] = str col = Gtk.TreeViewColumn(name) col.set_visible(False) elif coltypes[i] == TYPE_HIDDEN_OBJECT: coltypes[i] = GObject.TYPE_PYOBJECT col = Gtk.TreeViewColumn(name) col.set_visible(False) elif coltypes[i] == TYPE_ELLIPSIZED: coltypes[i] = str cell = Gtk.CellRendererText() cell.set_property("yalign", 0) cell.set_property("xalign", 0) cell.set_property("ellipsize", Pango.EllipsizeMode.END) cell.set_property("width-chars", ELLIPSIZE_COLUMN_CHARS) col = Gtk.TreeViewColumn(name, cell) col.set_attributes(cell, text=i) elif coltypes[i] == TYPE_GRAPH: coltypes[i] = GObject.TYPE_PYOBJECT cell = CellRendererGraph() col = Gtk.TreeViewColumn(name, cell) col.add_attribute(cell, "graph", i) else: cell = Gtk.CellRendererText() cell.set_property("yalign", 0) cell.set_property("xalign", 0) if i in flags["editable"]: cell.set_property("editable", True) cell.connect("edited", self.__cell_edited, i) if coltypes[i] == TYPE_MARKUP: col = Gtk.TreeViewColumn(name, cell, markup=i) else: col = Gtk.TreeViewColumn(name, cell, text=i) coltypes[i] = GObject.TYPE_STRING if flags["sortable"]: col.set_sort_column_id(i) self.treeview.append_column(col) i += 1 self.coltypes = coltypes self.data = self.get_store(coltypes) self.sorted = None # self.sorted == sorted view of data # self.filter == filtered data (abs paths -> rel paths) # self.data == actual data # The filter is there to change the way data is displayed. The data # should always be accessed via self.data, NOT self.filter. self.filter = self.data.filter_new() types = filter_types and filter_types or coltypes self.filter.set_modify_func(types, filter_router, filters) # This runs through the columns, and sets the "compare_items" comparator # as needed. Note that the user data tells which column to sort on. if flags["sortable"]: self.sorted = Gtk.TreeModelSort(self.filter) self.sorted.set_default_sort_func(compare_items, None) for idx in range(0, i): self.sorted.set_sort_func(idx, compare_items, (idx, coltypes[idx])) self.sorted.set_sort_column_id(flags["sort_on"], Gtk.SortType.ASCENDING) self.treeview.set_model(self.sorted) elif filters: self.treeview.set_model(self.filter) else: self.treeview.set_model(self.data) if len(values) > 0: self.populate(values) self.set_resizable() # Set up some callbacks for all tables to deal with row clicking and # selctions self.treeview.connect("cursor-changed", self.__cursor_changed_event) self.treeview.connect("row-activated", self.__row_activated_event) self.treeview.connect("button-press-event", self.__button_press_event) self.treeview.connect("button-release-event", self.__button_release_event) self.treeview.connect("key-press-event", self.__key_press_event) self.treeview.connect("select-cursor-row", self.__row_selected) # Necessary for self.selected_rows to remain sane self.treeview.connect("select-all", self.__all_selected) self.treeview.connect("unselect-all", self.__all_unselected) self.callbacks = callbacks if self.callbacks: self.allow_multiple() def _sortedpath(self, real_path): """ Converts a model index (as stored in selected_rows) into a user selection path """ if self.sorted: path = self.sorted.convert_child_path_to_path(real_path) else: path = self.filter.convert_child_path_to_path(real_path) return path def _realpath(self, visible_path): """ Converts a path (ie. row number) that we get from what the user selects into a path for the underlying data structure. If the data is not sorted, this is trivial; if it is sorted, the sorting model can figure it out for us. """ if self.sorted: path = self.sorted.convert_path_to_child_path(visible_path) else: path = self.filter.convert_path_to_child_path(visible_path) return path def toggled_cb(self, cell, path, column): model = self.data realpath = self._realpath(Gtk.TreePath.new_from_string(path)) # User has clicked a checkbox on a selected item. toggleMulti = realpath in self.selected_rows and len(self.selected_rows) > 1 model[realpath][column] = not model[realpath][column] if "row-toggled" in self.callbacks: self.callbacks["row-toggled"](model[realpath], column) # Set the state of _all_ selected items to match the new state of the checkbox if toggleMulti: sel = self.treeview.get_selection() for selPath in self.selected_rows: model[selPath][column] = model[realpath][column] if "row-toggled" in self.callbacks: self.callbacks["row-toggled"](model[selPath], column) self._reassert_selection = True @gtk_unsafe def real_append(self, **kwargs): return self.data.append(**kwargs) def append(self, row, **kwargs): # Python 3 needs type conversions. newrow = [] for i, item in enumerate(row): if self.coltypes[i] in [GObject.TYPE_STRING, str]: item = S(item).display() newrow.append(item) return self.real_append(row=newrow, **kwargs) @gtk_unsafe def remove(self, index): model = self.data del model[index] def remove_multiple(self, rows): i = 0 for row in rows: rm_index = row if i > 0: rm_index -= 1 self.remove(rm_index) i += 1 def get_items(self): return self.data @gtk_unsafe def clear(self): self.data.clear() self.reset_selection() def get_row(self, index): model = self.data return model[index] @gtk_unsafe def set_row(self, index, row): model = self.data model[index] = row @gtk_unsafe def set_row_item(self, row, column, val): model = self.data model[row][column] = val def allow_multiple(self): self.treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) def get_activated_rows(self, column=None): returner = [] for row in self.data: if row[0]: item = row if column is not None: item = row[column] returner.append(item) return returner def scroll_to_bottom(self): bottom = len(self.get_items()) - 1 self.treeview.scroll_to_cell(bottom) def set_resizable(self, resizable=True): for col in self.treeview.get_columns(): col.set_resizable(resizable) def get_column(self, column): return self.treeview.get_column(column) def set_column_width(self, column, width=None): col = self.treeview.get_column(column) if width is not None: col.set_sizing(Gtk.TreeViewColumnSizing.FIXED) col.set_fixed_width(width) else: col.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) def update_selection(self): selection = self.treeview.get_selection() # Will be set if a checkmark is changed while multiple rows # selected; user retains their selection after using # the new multicheck feature. if not self._reassert_selection: (model, indexes) = selection.get_selected_rows() self.reset_selection() for path in indexes: self.selected_rows.append(self._realpath(path)) else: self._reassert_selection = False for path in self.selected_rows: selection.select_path(self._sortedpath(path)) def reset_selection(self): self.selected_rows = [] def get_selected_row_items(self, col): items = [] for row in self.selected_rows: items.append(self.data[row][col]) return items def get_selected_rows(self): return self.selected_rows def generate_string_from_data(self): lines = [] for row in self.data: line = [] for cell in row: line.append(S(cell)) lines.append("\t".join(line)) return "\n".join(lines) @gtk_unsafe def unselect_all(self): self.treeview.get_selection().unselect_all() def focus(self, row, column): treecol = self.treeview.get_column(column) self.treeview.set_cursor((row,), treecol) self.treeview.grab_focus() def __button_press_event(self, treeview, event, *args): info = treeview.get_path_at_pos(int(event.x), int(event.y)) selection = treeview.get_selection() result = False # If info is none, that means the user is clicking the empty space # In that case, unselect everything and update the selected_rows if info is None: selection.unselect_all() self.update_selection() elif event.button == 3: # this allows us to retain multiple selections with a right-click (model, indexes) = selection.get_selected_rows() # If the mouse click is one of the currently selected rows # keep the selection, otherwise, use the new selection result = any(index == info[0] for index in indexes) if "mouse-event" in self.callbacks: result = self.callbacks["mouse-event"](treeview, event, *args) or result return result def __row_activated_event(self, treeview, data, col): treeview.grab_focus() self.update_selection() if "row-activated" in self.callbacks: self.callbacks["row-activated"](treeview, data, col) def __row_selected(self, treeview, started_editing): self.update_selection() if "row-selected" in self.callbacks: self.callbacks["row-selected"](treeview, started_editing) # Without these in place, Ctrl+A / Shift+Ctrl+A were not updating # self.selected_rows def __all_selected(self, treeview): treeview.get_selection().select_all() self.update_selection() if "all-selected" in self.callbacks: self.callbacks["all-selected"](treeview) def __all_unselected(self, treeview): treeview.get_selection().unselect_all() self.update_selection() if "all-unselected" in self.callbacks: self.callbacks["all-unselected"](treeview) def __key_press_event(self, treeview, event, *args): self.update_selection() if "key-event" in self.callbacks: self.callbacks["key-event"](treeview, event, *args) def __cursor_changed_event(self, treeview): self.update_selection() if "cursor-changed" in self.callbacks: self.callbacks["cursor-changed"](treeview) def __button_release_event(self, treeview, event, *args): self.update_selection() if "mouse-event" in self.callbacks: return self.callbacks["mouse-event"](treeview, event, *args) def __cell_edited(self, cell, row, data, column): self.update_selection() if "cell-edited" in self.callbacks: self.callbacks["cell-edited"](cell, row, data, column) # def __column_header_clicked(self, column, column_idx): # self.data.set_sort_column_id(column_idx, ) def status_pixbuf(self, column, cell, model, iter, colnum): path = model.get_path(iter) real_path = model.convert_path_to_child_path(path) status = self.data[real_path][colnum] if status not in list(STATUS_EMBLEMS.keys()): status = "error" icon = "emblem-" + STATUS_EMBLEMS[status] cell.set_property("icon-name", icon) def file_pixbuf(self, column, cell, model, iter, data=None): icon_name = None path = model.get_path(iter) real_path = model.convert_path_to_child_path(path) if data: real_item = self.data[real_path][data["column"]] kind = data["callback"](real_item) icon_name = "text-x-generic" if kind == "dir": icon_name = "folder" if not icon_name is None: cell.set_property("icon-name", icon_name) class Table(TableBase): """ Generate a flat tree view. See the TableBase documentation for parameter information """ def __init__( self, treeview, coltypes, colnames, values=[], filters=None, filter_types=None, callbacks={}, flags={}, ): TableBase.__init__( self, treeview, coltypes, colnames, values, filters, filter_types, callbacks, flags, ) def get_store(self, coltypes): return Gtk.ListStore(*coltypes) def populate(self, values): for row in values: self.append(row) def get_selected_rows(self): # Return as a list of integer row indexes. return [path[0] for path in self.selected_rows] class Tree(TableBase): """ Generate a hierarchal tree view. The structure of "values" should be like: values = [ (["A"], [ (["C"], None) ]), (["B"], [ (["D"], [ (["E"], None) ]) ]) ] Note that with multiple columns, you add to the list in the first element of each tuple. (i.e. ["A"] becomes ["A", "Z", ... ] See the TableBase documentation for parameter information """ def __init__( self, treeview, coltypes, colnames, values=[], filters=None, filter_types=None, callbacks={}, flags={}, ): TableBase.__init__( self, treeview, coltypes, colnames, values, filters, filter_types, callbacks, flags, ) def get_store(self, coltypes): return Gtk.TreeStore(*coltypes) def populate(self, values, parent=None): for node in values: root = self.append(node[0], parent=parent) if len(node) > 1 and node[1] is not None: self.populate(node[1], root) class Box(object): def __init__(self, box=None, vertical=False, spacing=-1): if not box: box = Gtk.Grid() self.box = box if spacing >= 0: box.set_row_spacing(spacing) box.set_column_spacing(spacing) self.middle = 0 # Determine pack start/end indexes. ch = [ ( box.child_get_property(c, "left-attach"), box.child_get_property(c, "width"), ) for c in box.get_children() ] cv = [ ( box.child_get_property(c, "top-attach"), box.child_get_property(c, "height"), ) for c in box.get_children() ] if ch: ch.sort(key=lambda x: x[0]) cv.sort(key=lambda x: x[0]) if ch[-1][0] - ch[0][0] > 0: vertical = False elif cv[-1][0] - cv[0][0] > 0: vertical = True c = cv if vertical else ch last = c.pop() self.middle = last[0] + last[1] while c: prev = c.pop() next = prev[0] + prev[1] if next < last[0]: self.middle = next break last = prev self.insert = self.box.insert_column self.attach = lambda child, pos: self.box.attach(child, pos, 0, 1, 1) self.set_expand = lambda child, expand: child.set_hexpand(expand) self.set_align = lambda child, align: child.set_halign(align) self.set_padding = lambda child, padding: ( child.set_margin_start(padding), child.set_margin_end(padding), ) if vertical: self.insert = self.box.insert_row self.attach = lambda child, pos: self.box.attach(child, 0, pos, 1, 1) self.set_expand = lambda child, expand: child.set_vexpand(expand) self.set_align = lambda child, align: child.set_valign(align) self.set_padding = lambda child, padding: ( child.set_margin_top(padding), child.set_margin_bottom(padding), ) def add(self, child): if isinstance(child, Box): child = child.box self.insert(self.middle) self.attach(child, self.middle) self.middle = self.middle + 1 def pack_start(self, child, expand, fill, padding): if isinstance(child, Box): child = child.box self.set_expand(child, expand) self.set_align(child, Gtk.Align.FILL if fill else Gtk.Align.START) self.set_padding(child, padding) self.add(child) def pack_end(self, child, expand, fill, padding): if isinstance(child, Box): child = child.box self.set_expand(child, expand) self.set_align(child, Gtk.Align.FILL if fill else Gtk.Align.END) self.set_padding(child, padding) self.insert(self.middle) self.attach(child, self.middle + 1) def __getattr__(self, name): return getattr(self.box, name) class ComboBox(object): def __init__(self, cb, items=None, columns=1, textcolumn=0): self.cb = cb coltypes = [str] * columns self.model = Gtk.ListStore(*coltypes) if not items is None: for i in items: self.append(i) self.cb.clear() self.cb.set_model(self.model) self.cb.set_entry_text_column(textcolumn) self.cell = Gtk.CellRendererText() self.cb.pack_start(self.cell, True) self.cb.add_attribute(self.cell, "text", textcolumn) def append(self, item): if not isinstance(item, list): item = [item] self.model.append(item) def set_active_from_value(self, value): index = 0 for entry in self.model: if entry[0] == value: self.cb.set_active(index) return index += 1 def get_active_text(self): child = self.cb.get_child() if isinstance(child, Gtk.Entry): return child.get_text() index = self.cb.get_active() if index < 0: return "" return self.model[index][0] def get_active(self): return self.cb.get_active() def set_active(self, index): self.cb.set_active(index) def set_child_text(self, text): self.cb.get_child().set_text(S(text).display()) def set_sensitive(self, val): self.cb.set_sensitive(val) def set_child_signal(self, signal, callback, userdata=None): self.cb.get_child().connect(signal, callback, userdata) class TextView(object): def __init__(self, widget=None, value="", spellcheck=True): if widget is None: self.view = Gtk.TextView() else: self.view = widget self.buffer = Gtk.TextBuffer() self.view.set_buffer(self.buffer) self.buffer.set_text(S(value).display()) if HAS_GTKSPELL and spellcheck: try: checker = GtkSpell.Checker() try: checker.set_language(get_locale()[0]) except: checker = None # Language not available. if checker: checker.attach(self.view) except Exception as e: log.exception(e) def get_text(self): return self.buffer.get_text( self.buffer.get_start_iter(), self.buffer.get_end_iter(), True ) @gtk_unsafe def set_text(self, text): self.buffer.set_text(S(text).display()) @gtk_unsafe def append_text(self, text): self.buffer.set_text(S(self.get_text() + text).display()) class ProgressBar(object): def __init__(self, pbar): if pbar is None: self.view = Gtk.ProgressBar() else: self.view = pbar self.timer = None def start_pulsate(self): # Set up an interval to make the progress bar pulse # The timeout is removed after the log action finishes self.timer = GObject.timeout_add(100, self.update) def stop_pulsate(self): if self.timer: GObject.source_remove(self.timer) self.timer = None @gtk_unsafe def update(self, fraction=None): if fraction: if self.timer is not None: self.stop_pulsate() if fraction > 1: fraction = 1 self.view.set_fraction(fraction) return False else: self.view.pulse() return True @gtk_unsafe def set_text(self, text): self.view.set_text(S(text).display()) class Clickable(object): """ Handle mouse button events for any click on an event-sensitive widget. Supports the following additional signals: - single_click(clickable, widget, event, data) - double_click(clickable, widget, event, data) - triple_click(clickable, widget, event, data) - long_click(clickable, widget, event, data) """ _BUTTON_PRESS = Gdk.EventType.BUTTON_PRESS _2BUTTON_PRESS = Gdk.EventType._2BUTTON_PRESS _3BUTTON_PRESS = Gdk.EventType._3BUTTON_PRESS def __init__(self, widget): self.widget = widget self._timer = None self._signals = { self._BUTTON_PRESS: self._signal_data(), self._2BUTTON_PRESS: self._signal_data(), self._3BUTTON_PRESS: self._signal_data(), "long-click": self._signal_data(), "button-press-event": self._signal_data(), "button-release-event": self._signal_data(), None: self._signal_data(), } self._lastpress = None widget.connect("button-press-event", self._on_button_pressed, None) widget.connect("button-release-event", self._on_button_released, None) widget.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) def connect(self, signal, func, *args): if signal == "single-click": self._signals[self._BUTTON_PRESS] = self._signal_data(func, args) elif signal == "double-click": self._signals[self._2BUTTON_PRESS] = self._signal_data(func, args) elif signal == "triple-click": self._signals[self._3BUTTON_PRESS] = self._signal_data(func, args) elif signal in ("long-click", "button-press-event", "button-release-event"): self._signals[signal] = self._signal_data(func, args) else: self.widget.connect(signal, func, *args) def _on_button_pressed(self, widget, event, data): self._cancel_timer() if self._callback("button-press-event", widget, event): return True if event.button == 1: self._lastpress = event.type if event.type == self._BUTTON_PRESS: self._start_timer(1000, self._long_click, event.copy()) return False def _on_button_released(self, widget, event, data): self._cancel_timer() if self._callback("button-release-event", widget, event): return True if event.button == 1: self._callback(self._lastpress, widget, event) self._lastpress = None return False def _long_click(self, event, *args): self._timer = None self._lastpress = None self._callback("long-click", self.widget, event) return False def _callback(self, signal, *args): func, data = self._signals[signal] args = list(args) + data return func(self, *args) @gtk_unsafe def _cancel_timer(self): if self._timer: GObject.source_remove(self._timer) self._timer = None @gtk_unsafe def _start_timer(self, milliseconds, callback, *args): self._cancel_timer() self._timer = GObject.timeout_add(milliseconds, callback, *args) def _signal_data(self, func=None, args=[]): if func is None: func = self._passfalse return (func, list(args)) def _passfalse(self, *args): return False def __getattr__(self, name): return getattr(self.widget, name) class RevisionSelector(object): """ Provides a standard way to generate a revision object from the UI. """ def __init__( self, container, client, revision=None, url_combobox=None, url_entry=None, url=None, expand=False, revision_changed_callback=None, ): """ @type container: A Gtk container object (i.e. HBox, VBox, Box) @param container: The container that to add this widget @type client: VCS client object @param client: A vcs client instance (i.e. rabbitvcs.vcs.VCS()) @type revision: int @param revision: A revision number to start with @type url_combobox: rabbitvcs.ui.widget.ComboBox @param url_combobox: A repository url combobox @type url_entry: Gtk.Entry @param url_entry: A repository url entry @type url: str @param url: A repository url string Note: The url fields are required for use with the log browser. It can be excluded. """ self.client = client self.revision = revision self.url_combobox = url_combobox self.url_entry = url_entry self.url = url self.revision_changed_callback = revision_changed_callback self.revision_change_inprogress = False hbox = Box(spacing=4) hbox.set_hexpand(expand) if self.url_combobox: self.url_combobox.cb.connect("changed", self.__on_url_combobox_changed) if client.vcs == rabbitvcs.vcs.VCS_GIT: self.OPTIONS = [_("HEAD"), _("Revision"), _("Branch")] elif client.vcs == rabbitvcs.vcs.VCS_SVN: self.OPTIONS = [_("HEAD"), _("Number")] if not client.is_path_repository_url(self.get_url()): self.OPTIONS.append(_("Working Copy")) self.revision_kind_opt = ComboBox(Gtk.ComboBox(), self.OPTIONS) self.revision_kind_opt.set_active(0) self.revision_kind_opt.cb.connect("changed", self.__revision_kind_changed) hbox.pack_start(self.revision_kind_opt.cb, False, False, 0) self.revision_entry = Gtk.Entry() self.revision_entry.connect("changed", self.__revision_entry_changed) hbox.pack_start(self.revision_entry, expand, expand, 0) self.branch_selector = None if client.vcs == rabbitvcs.vcs.VCS_GIT: self.branch_selector = GitBranchSelector( hbox, client, self.__branch_selector_changed ) self.branch_selector.hide() self.revision_browse = Gtk.Button() revision_browse_image = Gtk.Image() revision_browse_image.set_from_icon_name("edit-find", Gtk.IconSize.MENU) revision_browse_image.show() self.revision_browse.add(revision_browse_image) self.revision_browse.connect("clicked", self.__revision_browse_clicked) hbox.pack_start(self.revision_browse, False, False, 0) if self.revision is not None: self.set_kind_number(revision) else: self.set_kind_head() self.revision_kind_opt.cb.show() self.revision_entry.show() self.revision_browse.show() hbox.show() container.add(hbox.box) def __revision_browse_clicked(self, widget): from rabbitvcs.ui.log import SVNLogDialog, GitLogDialog if self.client.vcs == rabbitvcs.vcs.VCS_GIT: GitLogDialog(self.get_url(), ok_callback=self.__log_closed) elif self.client.vcs == rabbitvcs.vcs.VCS_SVN: SVNLogDialog(self.get_url(), ok_callback=self.__log_closed) def __log_closed(self, data): if data is not None: self.revision_kind_opt.set_active(1) self.revision_entry.set_text(S(data).display()) def __revision_kind_changed(self, widget): self.determine_widget_sensitivity() if self.revision_changed_callback: self.revision_change_inprogress = True GObject.timeout_add(400, self.__revision_changed_callback, self) def __revision_entry_changed(self, widget): if self.revision_changed_callback and not self.revision_change_inprogress: self.revision_change_inprogress = True GObject.timeout_add(400, self.__revision_changed_callback, self) def __revision_changed_callback(self, *args, **kwargs): self.revision_change_inprogress = False self.revision_changed_callback(*args, **kwargs) def __on_url_combobox_changed(self, widget): self.determine_widget_sensitivity() def determine_widget_sensitivity(self): index = self.revision_kind_opt.get_active() allow_revision_browse = True # Default to showing the revision entry self.hide_branch_selector() # Only allow number entry if "Number" is selected if index == 1: self.revision_entry.set_sensitive(True) elif index == 2: if self.client.vcs == rabbitvcs.vcs.VCS_GIT: self.revision_entry.set_sensitive(True) allow_revision_browse = False # If showing the "Branch" option, show the branch selector self.show_branch_selector() else: self.revision_entry.set_text("") self.revision_entry.set_sensitive(False) # Only allow browsing if a URL is provided if self.get_url() and allow_revision_browse: self.revision_browse.set_sensitive(True) else: self.revision_browse.set_sensitive(False) def get_url(self): if self.url_combobox: url = self.url_combobox.get_active_text() if url is None: return "" else: return url elif self.url_entry: return self.url_entry.get_text() elif self.url: return self.url else: return "" def set_url(self, url): self.url = url def get_revision_object(self): """ @rtype rabbitvcs.vcs.###.Revision @return A rabbitvcs revision object index=0 HEAD index=1 Revision Number index=2 SVN Working Copy Git Branch Selector """ index = self.revision_kind_opt.get_active() if index == 0: return self.client.revision("head") elif index == 1: if self.client.vcs == rabbitvcs.vcs.VCS_SVN: return self.client.revision("number", self.revision_entry.get_text()) elif self.client.vcs == rabbitvcs.vcs.VCS_GIT: return self.client.revision(self.revision_entry.get_text()) elif index == 2: if self.client.vcs == rabbitvcs.vcs.VCS_SVN: return self.client.revision("working") elif self.client.vcs == rabbitvcs.vcs.VCS_GIT: return self.client.revision(self.branch_selector.get_branch()) def set_kind_head(self): self.revision_kind_opt.set_active(0) self.determine_widget_sensitivity() def set_kind_number(self, number=None): self.revision_kind_opt.set_active(1) if number is not None: self.revision_entry.set_text(S(number).display()) self.determine_widget_sensitivity() def set_kind_working(self): self.revision_kind_opt.set_active(2) self.determine_widget_sensitivity() def show_branch_selector(self): if self.branch_selector: self.revision_entry.hide() self.revision_browse.hide() self.branch_selector.show() def hide_branch_selector(self): if self.branch_selector: self.branch_selector.hide() self.revision_entry.show() self.revision_browse.show() def __branch_selector_changed(self, branch): self.__revision_entry_changed(self.revision_entry) class KeyValueTable(Gtk.Grid): """ Simple extension of a GTK grid to display a two-column table of information with labels. """ default_col_spacing = 12 default_row_spacing = 6 def __init__(self, stuff): """ @param stuff: a list of two-element tuples - the first element of the tuple is the key/label, and the second element is the information """ super(KeyValueTable, self).__init__() if stuff and len(stuff): row = 0 for key, value in stuff: label_key = Gtk.Label(label="%s:" % key) label_key.set_properties(xalign=0, use_markup=True) label_value = Gtk.Label(label="%s" % value) label_value.set_properties( xalign=0, ellipsize=Pango.EllipsizeMode.MIDDLE, selectable=True ) label_value.set_hexpand(True) label_value.set_halign(Gtk.Align.START) self.attach(label_key, 0, row, 1, 1) self.attach(label_value, 1, row, 1, 1) label_key.show() label_value.show() row += 1 self.set_column_spacing(self.default_col_spacing) self.set_row_spacing(self.default_row_spacing) class GitRepositorySelector(object): def __init__(self, container, git, changed_callback=None): self.git = git self.changed_callback = changed_callback grid = Gtk.Grid() grid.set_row_spacing(4) grid.set_column_spacing(6) grid.set_hexpand(True) # Set up the Branch line label = Gtk.Label(label=_("Branch:")) label.set_justify(Gtk.Justification.LEFT) label.set_halign(Gtk.Align.START) tmp_branches = [] active_branch_index = 0 index = 0 for item in self.git.local_branch_list(): tmp_branches.append(item.name) if item.tracking: active_branch_index = index active_remote = item.upstream index += 1 self.branch_opt = ComboBox(Gtk.ComboBoxText.new_with_entry(), tmp_branches) self.branch_opt.set_active(active_branch_index) self.branch_opt.cb.connect("changed", self.__branch_changed) self.branch_opt.cb.set_size_request(175, -1) self.branch_opt.cb.set_hexpand(True) grid.attach(label, 0, 1, 1, 1) grid.attach(self.branch_opt.cb, 1, 1, 1, 1) # Set up the Repository Line label = Gtk.Label(label=_("Repository:")) label.set_justify(Gtk.Justification.LEFT) label.set_halign(Gtk.Align.START) tmp_repos = [] active_remote_index = 0 index = 0 for item in self.git.remote_list(): if item["name"] == active_remote: active_remote_index = index index += 1 tmp_repos.append(item["name"]) self.repository_opt = ComboBox(Gtk.ComboBoxText.new_with_entry(), tmp_repos) self.repository_opt.set_active(active_remote_index) self.repository_opt.cb.connect("changed", self.__repository_changed) self.repository_opt.cb.set_size_request(175, -1) self.repository_opt.cb.set_hexpand(True) grid.attach(label, 0, 0, 1, 1) grid.attach(self.repository_opt.cb, 1, 0, 1, 1) # Set up the Host line label = Gtk.Label(label=_("Host:")) label.set_justify(Gtk.Justification.LEFT) label.set_halign(Gtk.Align.START) self.host = Gtk.Label() self.host.set_justify(Gtk.Justification.LEFT) self.host.set_hexpand(True) self.host.set_halign(Gtk.Align.START) grid.attach(label, 0, 2, 1, 1) grid.attach(self.host, 1, 2, 1, 1) grid.show_all() container.add(grid) self.__update_host() def __update_host(self): repo = self.repository_opt.get_active_text() try: self.host.set_text( S(self.git.config_get(("remote", repo), "url")).display() ) except KeyError as e: log.error("Missing remote %s config key" % repo) def __repository_changed(self, repository_opt): if self.changed_callback: self.changed_callback( repository_opt.get_active_text(), self.branch_opt.get_active_text() ) self.__update_host() def __branch_changed(self, branch_opt): if self.changed_callback: self.changed_callback( self.repository_opt.get_active_text(), self.branch_opt.get_active_text() ) class GitBranchSelector(object): def __init__(self, container, git, changed_callback=None): self.git = git self.changed_callback = changed_callback self.vbox = Box(vertical=True, spacing=4) tmp_branches = [] active = 0 index = 0 for item in self.git.branch_list(): tmp_branches.append(item.name) if self.git.is_tracking(item.name): active = index index += 1 self.branch_opt = ComboBox(Gtk.ComboBoxText.new_with_entry(), tmp_branches) self.branch_opt.set_active(active) self.branch_opt.cb.connect("changed", self.__branch_changed) self.branch_opt.cb.set_size_request(175, -1) hbox = Box() hbox.pack_start(self.branch_opt.cb, True, False, 0) self.vbox.pack_start(hbox, False, False, 0) self.vbox.show_all() container.add(self.vbox.box) def append(self, widget): self.vbox.pack_start(widget, False, False, 0) def get_branch(self): return self.branch_opt.get_active_text() def __branch_changed(self, branch_opt): pass def show(self): self.vbox.show_all() def hide(self): self.vbox.hide() class MultiFileTextEditor(object): """ Edit a set of text/config/ignore files """ def __init__( self, container, label, combobox_labels, combobox_paths, show_add_line=True, line_content="", ): self.container = container self.label = label self.combobox_labels = combobox_labels self.combobox_paths = combobox_paths self.cache = {} self.last_path = None self.combobox = ComboBox(Gtk.ComboBox(), self.combobox_labels) self.combobox.cb.connect("changed", self.__combobox_changed) self.combobox.cb.set_size_request(175, -1) self.textview = TextView(Gtk.TextView()) grid = Gtk.Grid() grid.set_row_spacing(6) grid.set_column_spacing(3) grid.set_hexpand(True) grid.set_vexpand(True) combo_label = Gtk.Label(label=label) combo_label.set_alignment(0, 0.5) scrolled_window = Gtk.ScrolledWindow() scrolled_window.set_shadow_type(Gtk.ShadowType.ETCHED_IN) scrolled_window.add(self.textview.view) scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) scrolled_window.set_size_request(320, 150) scrolled_window.set_hexpand(True) scrolled_window.set_vexpand(True) grid.attach(combo_label, 0, 0, 1, 1) grid.attach(self.combobox.cb, 1, 0, 2, 1) if show_add_line: add_label = Gtk.Label(label=_("Add line:")) add_label.set_alignment(0, 0.5) self.add_entry = Gtk.Entry() self.add_entry.set_text(S(line_content).display()) self.add_entry.set_hexpand(True) add_button = Gtk.Button(_("Add")) add_button.connect("clicked", self.__add_button_clicked) grid.attach(add_label, 0, 1, 1, 1) grid.attach(self.add_entry, 1, 1, 1, 1) grid.attach(add_button, 2, 1, 1, 1) grid.attach(scrolled_window, 0, 2, 3, 1) grid.show_all() self.combobox.set_active(0) container.add(grid) def __combobox_changed(self, widget): index = self.combobox.get_active() path = self.combobox_paths[index] if not self.last_path: self.last_path = path self.cache[self.last_path] = self.textview.get_text() self.last_path = path self.load_file(path) def __add_button_clicked(self, widget): text = self.add_entry.get_text() self.add_line(text) self.add_entry.set_text("") def add_line(self, text): current_text = self.textview.get_text() if current_text: current_text += "\n" + text else: current_text = text self.textview.set_text(S(current_text).display()) def load_file(self, path): if os.path.exists(path): fh = open(path, "r") self.textview.set_text(S(fh.read()).display()) fh.close() else: self.textview.set_text("") def save(self, path=None): if path: paths = [path] else: paths = self.combobox_paths index = self.combobox.get_active() current_path = self.combobox_paths[index] self.cache[current_path] = self.textview.get_text() for tmppath in paths: if tmppath in self.cache: if not os.path.exists(os.path.dirname(tmppath)): os.mkdir(os.path.dirname(tmppath)) fh = open(tmppath, "w") fh.write(self.cache[tmppath]) fh.close() rabbitvcs-0.19/rabbitvcs/ui/wraplabel.py000066400000000000000000000051771445560650400203640ustar00rootroot00000000000000from __future__ import absolute_import from rabbitvcs.util.strings import S from gi.repository import Gtk, GObject, Pango # This file was originally obtained from: # http://git.gnome.org/cgit/meld/tree/meld/ui/wraplabel.py # ...and added here by Jason # # Copyright (c) 2005 VMware, Inc. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Python translation from wrapLabel.{cc|h} by Gian Mario Tagliaretti import gi gi.require_version("Gtk", "3.0") class WrapLabel(Gtk.Label): __gtype_name__ = "WrapLabel" def __init__(self, str=None): Gtk.Label.__init__(self) self.__wrap_width = 0 self.layout = self.get_layout() self.layout.set_wrap(Pango.WrapMode.WORD_CHAR) if str != None: self.set_text(S(str).display()) self.set_alignment(0.0, 0.0) def do_size_request(self, requisition): layout = self.get_layout() width, height = layout.get_pixel_size() requisition.width = 0 requisition.height = height def do_size_allocate(self, allocation): Gtk.Label.do_size_allocate(self, allocation) self.__set_wrap_width(allocation.width) def set_text(self, str): Gtk.Label.set_text(self, S(str).display()) self.__set_wrap_width(self.__wrap_width) def set_markup(self, str): Gtk.Label.set_markup(self, str) self.__set_wrap_width(self.__wrap_width) def __set_wrap_width(self, width): if width == 0: return layout = self.get_layout() layout.set_width(width * Pango.SCALE) if self.__wrap_width != width: self.__wrap_width = width self.queue_resize() rabbitvcs-0.19/rabbitvcs/ui/xml/000077500000000000000000000000001445560650400166275ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/ui/xml/add.xml000066400000000000000000000166301445560650400201070ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 450 True False Add center 400 300 rabbitvcs-small center True False 12 13 12 13 vertical 6 True False end True True False end 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 1 0 True False True 0 0 0 0 3 Show ignored files True True False start True True 0 2 Select / Deselect all True True False start True True True 0 1 200 True True True etched-in True True True 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/annotate.xml000066400000000000000000000251271445560650400211710ustar00rootroot00000000000000 True False document-save-as True False window-close 750 550 True False Annotate center rabbitvcs-small True False 12 12 12 12 True True vertical 18 True False True 100 True True True 2 1 True True True True False rabbitvcs-show_log 3 1 True False end 6 end Save _As True False True True document-save-as True False False 0 _Close True True True window-close True False False 1 6 1 True False <b>Revision</b> True 0 2 0 2 True False 4 True False go-first 0 1 True False True False go-previous 1 1 True False 4 True False go-next 4 1 True False 24 True False go-last 5 1 0 1 True True True True True True True 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/branch-merge.xml000066400000000000000000000224721445560650400217120ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok True False Merge rabbitvcs True False 12 12 12 12 True True vertical 18 True False end True True 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 0 2 True False start True True vertical 6 True False 12 True 0 0 1 True False True <b>Will be merged into</b> True 0 0 0 0 1 True False True vertical 6 True False True <b>From</b> True 0 0 0 True False 12 True vertical 0 2 True False 12 True vertical 0 1 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/branch.xml000066400000000000000000000346531445560650400206210ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 550 True False Branch/tag center rabbitvcs-small True False 6 6 6 6 vertical 18 True False 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 0 3 True False True True vertical 6 True True 6 True True etched-in 100 True True word 0 2 True False True start Previous Messages True True True 6 False False 0 0 1 True False <b>Add Message</b> True 0 0 0 0 2 Switch to branch after True True False start True True True 0 3 True False vertical 6 True False <b>Create copy from</b> True 0 0 0 True False 6 True 0 1 0 1 True False 6 6 True False 6 From: 0 0 1 True False 6 To: 0 0 2 True False True True True True 1 1 True True True True False edit-find 1 2 1 True False True True True True 1 2 2 True False <b>Repository</b> True 0 0 0 3 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/browser.xml000066400000000000000000000246711445560650400210460ustar00rootroot00000000000000 True False folder-new True False window-close 640 480 True False Repository Browser center rabbitvcs True False 12 12 12 12 vertical 18 True False 6 True False end 6 end True True True True False 2 True False Load/Refresh 1 0 True False view-refresh 0 0 False False 0 _Close True True True window-close True False False 1 1 0 _Create folder here True True True start True folder-new True 0 0 0 1 True False True 6 6 True False Revision: 0 0 1 True False URL: 0 0 0 True False True True True True 1 0 True False True 1 1 330 True True True True etched-in True True 0 2 2 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/changes.xml000066400000000000000000000552011445560650400207640ustar00rootroot00000000000000 True False window-close 640 500 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Changes center rabbitvcs-small True False 12 12 12 12 True True vertical 18 True False end True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK end True 6 end True True True True False 2 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Load/Refresh 1 0 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK view-refresh 0 0 False False 0 _Close True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK window-close True False False 1 1 0 True False False 0 0 0 3 True False True True vertical 6 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 True True etched-in True 200 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 1 True False True <b>Differences</b> (double-click to compare with base) True 0 0 0 0 2 True False True vertical 6 6 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 Revision 0 0 2 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 URL 0 0 1 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True True True 1 1 True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK zoom-fit-best 1 2 1 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK <b>Second:</b> True 0 0 0 3 True False True 1 2 2 0 1 True False True vertical 6 6 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 Revision 0 0 2 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 URL 0 0 1 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True True True 1 1 True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK zoom-fit-best 1 2 1 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK <b>First:</b> True 0 0 0 3 True False True 1 2 2 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/checkmods.xml000066400000000000000000000163501445560650400213160ustar00rootroot00000000000000 True False view-refresh True False window-close 550 300 True False Check for Modifications center 400 300 rabbitvcs-small center True False 12 12 12 12 True True vertical 18 True False end True 6 end _Refresh True True True view-refresh True False False 0 _Close True True True window-close True False False 1 0 1 True True True True True True True True etched-in True True True False Local False True True True True True True 1 True False Remote 1 False 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/checkout.xml000066400000000000000000000374141445560650400211670ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 550 True False Checkout center 450 rabbitvcs-small True False 12 12 12 12 True True vertical 18 True False end True 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True False True True rabbitvcs-ok True False False 1 0 3 True False True True 6 True False True <b>Revision</b> True 0 0 0 True False 12 True vertical 0 1 0 2 True False True 6 Omit Externals True True False start 12 True True 0 2 Recursive True True False start 12 True True True 0 1 True False <b>Options</b> True 0 0 0 0 1 True False True 6 6 True False 12 Destination: 0 0 2 True True True 1 2 True False 12 URL: 0 0 1 True True True Browse... True False drive-harddisk 2 2 2 True False <b>Repository</b> True 0 0 0 3 True False True 6 True False True True True True 0 0 True True True True Browse... True False edit-find 1 1 0 1 1 2 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/clean.xml000066400000000000000000000244431445560650400204420ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 400 True False Clean center-always True False 12 12 12 12 True True vertical 18 True False end True 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 0 1 True False True True vertical 6 True False 12 True vertical 2 Force True True False start True True True 0 4 Dry run True True False start True True 0 3 Remove only ignored files True True False start True True 0 2 Remove ignored files, too True True False start True True 0 1 Remove directories True True False start True True True 0 0 0 2 True False True Remove untracked files from the working tree 0.10000000149011612 0 1 True False True <b>Clean your Repository</b> True 0 0 0 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/commit.xml000066400000000000000000000463501445560650400206510ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok True False Commit center 640 640 rabbitvcs-small True False 12 12 12 12 vertical 18 True False True 6 True False end 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 2 0 True True True Refresh 6 6 True False view-refresh 1 0 True False True True 0 0 0 0 2 True True True True 6 vertical True False True True vertical 6 True False 12 True True vertical 6 True True True True etched-in True True True True True word False 0 1 0 True False True start Previous Messages True True True False False 0 0 0 0 1 True False <b>Add Message</b> True 0 0 0 False True True False 10 True True vertical 6 True False 12 True True vertical 6 True False True vertical Show unversioned files True True False start True True True 0 1 Select / Deselect all True True False start True True 0 0 0 1 True True True True etched-in True True 0 0 0 1 True False <b>Changed Files</b> (double-click to compare with base) True 0 0 0 False True 0 1 True False True 12 500 True False True True char True 0 1 0 True False <b>Commit to:</b> True char 0 0 0 0 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/000077500000000000000000000000001445560650400202515ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/authentication.xml000066400000000000000000000244611445560650400240210ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 450 False 5 Authentication center rabbitvcs-small dialog True False True True vertical 18 True False end True True end _Cancel True True False rabbitvcs-cancel True False False 0 _OK True True True True True rabbitvcs-ok True False False 1 False False end 0 True False True vertical 6 True False 12 True vertical 6 6 Save Authentication True True False start True True 1 3 True True True False True 1 2 True True True True 1 1 300 True False True True char True 0 0 1 0 True False Password: 0 0 2 True False Login: 0 0 1 True False Realm: 0 0 0 0 0 1 True False <b>Please add your authentication details</b> True 0 0 0 False False 1 auth_cancel auth_ok rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/cert_authentication.xml000066400000000000000000000217431445560650400250360ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 400 False 5 center rabbitvcs-small dialog True False vertical 18 True False end True True end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True True True rabbitvcs-ok True False False 1 False False end 0 True False True vertical 6 True False 12 True vertical 6 6 Save Authentication True True False start True True 1 2 True True True False True 1 1 True False Password: 0 0 1 True False True True True 0 0 1 0 True False Realm: 0 0 0 0 0 1 True False True <b>Please add your authentication details</b> True 0 0 0 False True 1 certauth_cancel certauth_ok rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/certificate.xml000066400000000000000000000303221445560650400232550ustar00rootroot00000000000000 550 False 5 Check Certificate center rabbitvcs-small dialog 400 True False vertical 12 True False end end True True spread Accept Once True True True False False 0 Accept Forever True True True False False 1 Deny True True True False False 2 False False end 0 True False True vertical 6 True False 12 True vertical 6 6 True False True True 0 0 1 4 True False Fingerprint: start 0 0 0 4 True False True True 0 0 1 3 True False Valid: start 0 0 0 3 True False True True 0 0 1 2 True False Issuer: start 0 0 0 2 True False True True 0 0 1 1 True False Host: start 0 0 0 1 True False True True 0 0 1 0 True False Realm: start 0 0 0 0 0 1 True False <b>Certificate Details</b> True 0 0 0 False False 1 cert_accept_once cert_accept_forever rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/confirmation.xml000066400000000000000000000127041445560650400234670ustar00rootroot00000000000000 True False rabbitvcs-no True False rabbitvcs-yes False 5 Confirmation center rabbitvcs-small dialog True False vertical 18 True False end end True True end _No True True True rabbitvcs-no True False False 0 _Yes True True True True True rabbitvcs-yes True False False 1 False False end 0 True False True 6 True False start True Are you sure you want to continue? 0 1 0 True False 48 dialog-warning 6 0 0 False False 1 confirm_cancel confirm_ok rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/conflict_decision.xml000066400000000000000000000154431445560650400244600ustar00rootroot00000000000000 False 5 Edit Conflicts normal True False True True vertical 18 True False end True True center Cancel True True True False False 0 Accept Mine True True True False False 1 Accept Theirs True True True False False 2 Edit Conflicts True True True False False 3 False True end 0 True False 18 6 True False 7 True <b>A conflict was found in the following file:</b> True 0 0.10000000149011612 1 0 True False 12 True 0 0 1 1 True False start 64 dialog-warning 6 0 0 2 True True 1 cancel accept_mine accept_theirs edit_conflicts rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/create_folder.xml000066400000000000000000000172341445560650400236000ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 320 240 False 5 Create Folder... normal True False vertical 18 True False end True end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True True True True rabbitvcs-ok True False False 1 False False end 0 True False True vertical 6 True True 12 True ● 0 1 True False True <b>Folder Name</b> True 0 0 0 False False 0 True False True True vertical 6 True True 12 True True etched-in True True 0 1 True False True <b>Add Message</b> True 0 0 0 False True 2 cancel ok rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/delete_confirmation.xml000066400000000000000000000144761445560650400250210ustar00rootroot00000000000000 True False edit-delete True False rabbitvcs-cancel False 5 Delete Confirmation center rabbitvcs-small dialog True False True True vertical 18 True False end end True True end _Cancel True True True rabbitvcs-cancel True False False 0 _Delete True True True True True edit-delete True False False 1 False False end 0 True False True 6 6 True False True The item(s) will be sent to the trash can. 0 1 1 True False True <span size="large"><b>Are you sure you want to delete %item%?</b></span> True 0 1 0 True False 64 dialog-warning 6 0 0 2 False True 1 cancel delete rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/error_notification.xml000066400000000000000000000135541445560650400247020ustar00rootroot00000000000000 True False window-close 500 300 False 5 RabbitVCS Error rabbitvcs-small normal True False True True vertical 18 True False end True end _Close True True True window-close True False False 0 False False end 0 True False 6 True False True <span weight="bold" size="xx-large">RabbitVCS Error</span> True 0 1 0 True False 6 64 dialog-warning 6 0 0 False True 1 True False True False True 2 True True True True etched-in True True False False False True 3 rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/loading.xml000066400000000000000000000100731445560650400224110ustar00rootroot00000000000000 True False rabbitvcs-cancel 300 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 5 Loading False center rabbitvcs-small dialog center True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical 18 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK end end True True end _Cancel True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK rabbitvcs-cancel True False False 0 False False end 0 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False False 1 rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/mark_resolved_prompt.xml000077500000000000000000000071121445560650400252350ustar00rootroot00000000000000 False 5 Mark Resolved False True dialog True False True True vertical True False end end True end Unresolved True True True False False 0 Resolved True True True False False 1 True True end 0 True False True True <b>Mark Conflict As</b> True True True 1 button2 button1 rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/message_box.xml000066400000000000000000000066251445560650400233000ustar00rootroot00000000000000 True False rabbitvcs-ok True False 5 Message center rabbitvcs-small dialog True False vertical 18 True False end end True end _OK True True True rabbitvcs-ok True False False 0 False False end 0 175 True False 6 6 6 6 True 0 False True 1 messagebox_ok rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/name_email_prompt.xml000066400000000000000000000176761445560650400245040ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 400 False 12 Name and Email center-on-parent normal True False True True vertical 18 True False end end True True end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 False False end 0 True False True vertical 6 True False True <b>Enter Name and Email Details</b> True 0 0 0 True False 12 12 True vertical 6 6 True True True ● 1 1 True False Email: 0 0 1 True True True ● 1 0 True False Name: 0 0 0 0 1 False False 1 cancel ok rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/one_line_text_change.xml000066400000000000000000000130101445560650400251270ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 500 False 5 Text Change rabbitvcs-small normal True False True True vertical 18 True False end end True True end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True True True True True rabbitvcs-ok True False False 1 False False end 0 True False True 6 True True True ● 1 0 True False New Name: 0 0 0 False False 1 cancel ok rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/previous_messages.xml000066400000000000000000000210311445560650400245330ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 500 False 5 Previous Messages center 450 rabbitvcs-small dialog True False True True vertical 18 True False end True end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 False False end 0 True False True True vertical 6 200 True True 12 12 True True etched-in True True 0 1 True False True <b>Previous Messages</b> True 0 0 0 True True 1 True False True True vertical 6 175 True True 12 12 True True etched-in 100 True True word 0 1 True False True <b>Message</b> True 0 0 0 True True 2 prevmes_cancel prevmes_ok rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/property.xml000066400000000000000000000233661445560650400226710ustar00rootroot00000000000000 True False True False rabbitvcs-ok False 5 Property center 600 400 rabbitvcs-small dialog True False vertical 18 True False end end True end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True True True rabbitvcs-ok True False False 1 False False end 0 True False True True vertical 6 True False 12 12 True True vertical 6 6 Apply property recursively True True False start True True True 1 2 True True True True etched-in 100 True True word 1 1 True False Value: 0 0.05000000074505806 0 1 True True True True True True 1 0 True False Property: 0 0 0 0 1 True False <b>Edit Property Details</b> True 0 0 0 False True 1 property_cancel property_ok rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/ssl_client_cert_prompt.xml000066400000000000000000000240731445560650400255560ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 400 False 5 SSL Client Certification center rabbitvcs-small dialog True False True True vertical 18 True False end end True True end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 False False end 0 True False True vertical 6 True False 12 12 True vertical 6 6 Save Authentication True True False start True True 1 2 2 True True True True False drive-harddisk 2 1 True True True ● 1 1 True False Path: 0 0 1 True False True 0 1 0 2 True False Realm: 0 0 0 0 1 True False <b>Please provide your ssl certification file</b> True 0 0 0 False True 1 sslclientcert_cancel sslclientcert_ok rabbitvcs-0.19/rabbitvcs/ui/xml/dialogs/text_change.xml000066400000000000000000000140331445560650400232650ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 350 200 False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 5 center-on-parent rabbitvcs-small dialog True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True vertical 18 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK end True end _Cancel True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK rabbitvcs-cancel True False False 0 _OK True True True True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK rabbitvcs-ok True False False 1 False False end 0 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 12 12 6 True True etched-in True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True word True True 1 textchange_cancel textchange_ok rabbitvcs-0.19/rabbitvcs/ui/xml/git-update.xml000066400000000000000000000225121445560650400214160ustar00rootroot00000000000000 True False rabbitvxs-cancel True False rabbitvcs-ok True False center-always True False 12 12 12 12 True True vertical 18 True False end end False 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 0 3 Fetch from all remotes True True False start start True True True 0 2 True False True vertical 5 Apply remote changes prior to local changes (rebase) True True False start True none True True merge 0 2 Merge into local branch True True False start True none True True 0 1 Apply remote changes True True False start True True True 0 0 0 1 True False True vertical 6 True False True <b>Options</b> True 0 0 0 True False True vertical 0 1 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/ignore.xml000066400000000000000000000132041445560650400206340ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok True False Ignore center-always rabbitvcs True False 12 12 12 12 True True vertical 18 True False end True 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 0 1 True False True True vertical 6 True False True <b>Ignore and exclude files from being tracked</b> True 0 0 0 0 True False 12 True True 0 1 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/import.xml000066400000000000000000000255361445560650400206760ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 550 True False Import center rabbitvcs-small True False 12 12 12 12 True True vertical 18 True False end True 6 end _Cancel True True True rabbitvcs-cancel True True True 0 _OK True True True rabbitvcs-ok True True True 1 0 2 True False True True vertical 6 True False 12 True True vertical 6 Include ignored files True True False start True True 0 2 150 True True True True etched-in True True word 0 1 True False start True start Previous Messages True True True True True 0 0 0 0 1 True False <b>Import Message</b> True 0 0 0 0 1 True False vertical 6 True False 12 True True True True 0 1 True False True <b>Repository</b> True 0 0 0 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/lock.xml000066400000000000000000000336431445560650400203120ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 600 True False Lock Files center rabbitvcs-small True False 12 12 12 12 True True vertical 18 True False True True False end 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 1 0 True False start 6 True 0 0 0 0 0 2 True False True True vertical 6 True False 12 True True Steal the locks True True False start True True 0 2 Select / Deselect all True True False start 6 True True True 0 1 250 True True True True etched-in True True 0 0 0 1 True False True <b>Files to lock</b> True 0 0 0 0 1 True False True True vertical 6 True False 12 True True vertical 6 100 True True True True etched-in True True word 0 1 True False True start Previous Messages True True True False False 0 0 0 0 1 True False <b>Please describe why you are locking these files</b> True 0 0 0 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/log.xml000066400000000000000000000604161445560650400201410ustar00rootroot00000000000000 True False go-next True False go-previous True False window-close 775 560 True False center rabbitvcs-small True False 12 12 12 12 vertical 18 True False _Close True True True end True window-close True 1 0 True False True False True True True Refresh True False view-refresh 2 0 75 True True 100 1 0 True False Limit: 0 0 1 0 True False 6 start _Back True False True True go-previous True False False 0 _Forward True False True True go-next True False False 1 0 0 0 0 0 1 True True True True vertical 274 True True False True vertical 6 True False True True vertical 6 True True True True etched-in True True True 0 0 0 1 True False True 12 True False 3 True False N/A 3 0 True False to 2 0 True False N/A 1 0 True False Showing Revisions: 0 0 3 0 Stop on copy True True False True 2 0 True False True 3 True True True 1 3 4 3 4 search_buffer 0 0 1 0 True False <b>Revisions Table</b> True 0 0 0 0 0 True True True True 6 True True 390 True True False vertical 6 80 True True True True etched-in True True True True 0 1 True False True <b>Affected File(s)</b> (double-click to compare with base) True 0 0 0 True True True False vertical 6 80 True True True True etched-in True True True True False word 0 1 True False True <b>Message</b> True 0 0 0 True True True True 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/manager.xml000066400000000000000000000263111445560650400207660ustar00rootroot00000000000000 True False window-close 450 True False center-always rabbitvcs-small True False 12 12 12 12 True True vertical 18 True False end True 6 end _Close True True True window-close True False False 0 0 1 True False True True 6 True True False True True vertical 6 True False True True vertical 0 1 True False True 0 0 0 1 0 True False True True vertical 6 6 200 150 True True 12 True True etched-in True True 0 1 3 True False True True start True False edit-delete 1 2 True True True start True False list-add 1 1 True False True 0 0 0 2 True False True 1 3 0 0 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/merge.xml000066400000000000000000001401261445560650400204540ustar00rootroot00000000000000 600 True False 12 Merge Assistant center rabbitvcs-small center True False 12 12 12 12 vertical 18 True False True vertical 475 True False 30 True Choose this method if you wish to reintegrate a branch into the trunk. True 0 0 1 Reintegrate a branch True True False start True True mergetype_range_opt 0 0 0 2 True False True vertical 475 True False 30 Choose this method if you wish to merge two different branches into your working copy. True 0 0 1 Merge two different trees True True False start True True True mergetype_range_opt 0 0 0 1 True False True vertical 475 True False 30 True Choose this method if you have made some changes to a branch and wish to merge your changes with another branch. True 0 0 1 Merge a range of revisions True True False start True True True 0 0 0 0 intro Step 1: Merge Type False True False 12 12 12 12 True 18 True False True vertical 6 True False 12 True 0 0 1 True False start True <b>Working Copy</b> True 0 0 0 0 2 True False vertical 6 True False 12 True vertical 6 6 500 True False 8 True Use the log dialog to select the revisions that you wish to merge. Or write out the revisions manually, each separated by a comma. You can specify a revision range by a dash. Example: 4-7,9,11,15-HEAD To merge all revisions, leave the box empty. True 0 0 1 2 True True True Show log True False 24 rabbitvcs-show_log 1 0 True True True 0 0 0 1 True False start True <b>Revision Range</b> True 0 0 0 0 1 True False True vertical 6 True False 12 True True True True 0 1 True False start True <b>URL to merge from</b> True 0 0 0 0 0 Step 2: Merge a Range of Revisions False True False 12 12 12 12 True vertical 18 True False True 6 True False 12 True 0 0 1 True False <b>Working Copy</b> True 0 0 0 0 2 True False True 6 True False 12 True vertical 6 6 Revision True True False start True mergetree_to_revision_head_opt 0 2 75 True True True 1 2 True True True Show log True False 24 rabbitvcs-show_log 2 2 HEAD True True False start True True True 0 1 3 True False True True True 0 0 3 0 1 True False True <b>To: (URL and revision to merge)</b> True 0 0 0 0 1 True False True 6 True False 12 True 6 6 True True True Show log True False 24 rabbitvcs-show_log 2 2 75 True True True 1 2 Revision True True False start True mergetree_from_revision_head_opt 0 2 HEAD True True False start True True True 0 1 3 True False True True True True 0 0 3 0 1 True False <b>From: (URL and revision to merge)</b> True 0 0 0 0 0 Step 2: Merge two different trees False True False 12 12 12 12 True True vertical 18 True False True vertical True False 12 True True 0 0 1 True False True <b>Working Copy</b> True 0 0 0 0 1 True False True vertical 6 True False 12 True 6 6 True True True True Show log True False 24 drive-harddisk 1 0 True False True True True True 0 0 True False True True vertical 0 1 2 0 1 True False <b>From URL</b> True 0 0 0 0 0 Step 2: Reintegrate a Branch False True False 12 12 12 12 True 18 True False True end True True True True False True False Test Merge 1 0 True False system-run 0 0 False False 0 0 1 True False True vertical 6 True False 12 True vertical Only record the merge True True False start True 0 2 Ignore ancestry True True False start True True 0 1 Recursive True True False start True True True 0 0 0 1 True False <b>Options</b> True 0 0 0 0 0 confirm Step 3: Final Options False rabbitvcs-0.19/rabbitvcs/ui/xml/notification.xml000066400000000000000000000217751445560650400220530ustar00rootroot00000000000000 True False document-save-as True False rabbitvcs-cancel True False rabbitvcs-ok 740 True Notification Messages center rabbitvcs-small center True False 12 12 12 12 True True vertical 18 True False True 6 True False True 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True False True True True True rabbitvcs-ok True False False 1 1 0 True False start Save _As True False True True document-save-as True False False 0 0 0 0 3 True False True 0 2 225 True True True True etched-in True True 0 1 True False vertical 6 True False True True 0 0 1 True False True True 0 0 0 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/properties.xml000066400000000000000000000357031445560650400215550ustar00rootroot00000000000000 True False document-new True False document-save True False edit-delete True False rabbitvcs-cancel True False rabbitvcs-editprops 600 True False Properties center rabbitvcs-small True False 12 12 12 12 True True vertical 18 True False True 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _Save True True True document-save True False False 1 0 1 True False True True vertical 6 True False 12 True True vertical 6 True False 8 True 3 start _New... True True True document-new True False False 0 _Edit... True False True True rabbitvcs-editprops True False False 1 _Delete True False True True edit-delete True False False 2 0 4 Delete properties recursively True True False start True True 0 3 True False start True <i>Selected properties will be applied recursively.</i> True 0 2 150 True True True True etched-in True True True 0 1 True False True 6 True True True True False view-refresh 1 0 True True URL/Path True 0 0 0 0 0 1 True False <b>Properties for:</b> True 0 0 0 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/property_editor.xml000066400000000000000000000240041445560650400226030ustar00rootroot00000000000000 True False document-new True False view-refresh True False window-close True False Property Editor 600 400 rabbitvcs-small True False 12 12 12 12 True True vertical 18 True False end True 6 True end _Close True True True Close this dialog. window-close True False False 0 0 4 True False True 0 3 True False True 6 True center _Refresh True True True Refresh the list of properties. view-refresh True False False 0 _New True True True Add a new property. document-new True False False 1 0 2 True True True True etched-in True True 0 1 True False vertical 6 20 True False start <b>Remote URI:</b> True True 0 1 True False start True middle 0 1 0 True False start True middle 0 1 1 True False start <b>Working Copy:</b> True True 0 0 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/property_page.xml000066400000000000000000000273751445560650400222470ustar00rootroot00000000000000 True True True False 0 True False 12 True vertical 12 12 True False True 0 2 True False True False 8 16 True False Property status: 0 0 3 True False Content status: 0 0 2 True False VCS: 0 0 1 True False True True 0 1 1 True False True True 0 1 0 True False Name: 0 0 0 True False True False start True True 0 1 0 True False 0 0 1 2 True False True False start True True 0 1 0 True False 0 0 1 3 1 0 True False start 8 8 True text-x-generic 6 0 0 0 1 12 True False True 0 0 True True never True False queue True False True False True False center RabbitVCS 0 1 True False center rabbitvcs 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/push.xml000066400000000000000000000250171445560650400203350ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok True False Push center-always rabbitvcs True False 12 12 12 12 True True vertical 18 True False True True False 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 1 0 True False True 0 0 0 0 3 True False True True vertical 6 True True 12 True True etched-in 450 200 True True 0 1 True False <b>Commits to Push</b> True 0 0 0 0 1 True False vertical 6 True False 12 True True 0 1 True False <b>Push Information</b> True 0 0 0 0 0 True False vertical Include tags True False False start True True 0 0 Force with lease True True False start True True 0 1 0 2 rabbitvcs-0.19/rabbitvcs/ui/xml/relocate.xml000066400000000000000000000177671445560650400211710ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 640 True False Relocate center rabbitvcs-small True False 12 12 12 12 True True vertical 18 True False end True True 6 end _Cancel True True True rabbitvcs-cancel True True True 0 _OK True True True rabbitvcs-ok True True True 1 0 1 True False True vertical 6 True False 12 True 6 6 True False To: 0 0 1 True False True True True True 1 1 True True True 1 0 True False From: 0 0 0 0 1 True False <b>Change the repository of your working copy</b> True 0 0 0 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/reset.xml000066400000000000000000000443421445560650400205020ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok True False Reset center-always True False 12 12 12 12 True True vertical 18 True False True 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 0 4 True False True vertical 6 True False 12 True vertical 6 True True False start True True True mixed_opt True False None 0 0 4 True True False start True True mixed_opt True False <i>Merge</i> - Resets the index to match the tree recorded by the named commit, and updates the files that are different between the named commit and the current commit in the working tree True 0 0 3 True True False start True True mixed_opt True False <i>Hard</i> - Matches the working tree and index to that of the tree being switched to True 0 0 2 True True False start True True mixed_opt True False <i>Soft</i> - Does not touch the index file or working tree at all, but requires them to be in good working order True 0 0 1 True True False start True True True False <i>Mixed</i> - Reset the index but not the working tree True 0 0 0 0 1 True False <b>Options</b> True 0 0 0 0 3 True False True True vertical 6 True False 12 True True vertical 0 1 True False <b>Revision</b> True 0 0 0 0 2 True False True vertical 6 6 True True True True False drive-harddisk 1 1 True True 12 True ● 0 1 True False True <b>Path</b> True 0 0 0 2 0 1 True False True vertical 6 True False True Reset current HEAD to specified state. 0 0 1 True False True <b>Reset your Repository</b> True 0 0 0 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/revert.xml000066400000000000000000000151261445560650400206650ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 450 True False Revert center 400 300 rabbitvcs-small center True False 12 12 12 12 True True vertical 6 True False True True False 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 1 0 True False True 0 0 0 0 2 Select / Deselect all True True False start True True True 0 1 200 True True True True etched-in True True 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/settings.xml000066400000000000000000002137601445560650400212220ustar00rootroot00000000000000 True False edit-clear True False edit-clear True False edit-clear True False process-stop True False rabbitvcs-cancel True False rabbitvcs-ok True False system-run True False view-refresh 550 425 True False Settings center rabbitvcs-small True False 12 12 12 12 True True vertical 18 True False True 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 0 1 True True True True True False 12 12 12 12 vertical 18 True False True vertical 6 True False True <b>Version Control Systems</b> True 0 0 0 True False 12 True vertical Enable Subversion True True False start True True True 0 0 Enable Git True True False start True True True 0 1 Enable Mercurial True True False start True True True 0 2 0 1 0 1 True False vertical 6 True False 12 True vertical 5 Enable emblems True True False start True True True 0 2 2 Enable recursive status checks True False start True True True 0 1 2 Enable file attributes True True False start True True True 0 0 2 True False start False Date/time format 0 6 True False start True 1 6 Highlight source syntax True True False Highlight source lines according to language syntax start True True True 0 3 2 Colorize commits and authors True True False Set a unique background color of lines belonging to the same commit. Apply to line author's too start True True True 0 4 2 Show RabbitVCS debugging tools True True False The debug menu is used to diagnose problems with RabbitVCS itself start True True 0 5 2 0 1 True False <b>RabbitVCS</b> True 0 0 0 0 0 True False True True 6 True False start True <b>Default Commit Message</b> True 0 0 True True True True never in True True True True word False 0 1 0 2 False General False True False 12 12 12 12 True vertical 18 True False vertical 6 True False <b>Configure the program to resolve conflicted files.</b> True 0 0 0 True False 12 True vertical True False Use the following macros to configure the merge tool: %base - The common ancestor of the two files to be merged. %mine - The file you modified in your working copy. %theirs - The file being merged into your working copy. %merged - The file to store the merged result. False 0 0 1 True True True â€ĸ False False 0 0 0 1 0 1 True False True vertical 6 True False 12 True vertical 6 6 True True True Browse... True False drive-harddisk 1 0 Show new version on the left side True True False start True True 0 1 2 True True True False False 0 0 0 1 True False True <b>Program used to compare files</b> True 0 0 0 0 0 1 True False External Programs 1 False True False 12 12 12 12 True vertical 18 True False True vertical 6 True False 12 True 6 Clear True True True edit-clear-3 1 0 True False True Clear your authentication information 0.0099999997764825821 0 0 0 1 True False <b>Authentication</b> True 0 0 0 0 2 True False True vertical 6 True False 12 True 6 Clear True True True edit-clear-2 2 0 60 True True False False 1 0 True False True Number of messages to remember word-char 0 0 0 0 1 True False True <b>Log Messages</b> True 0 0 0 0 1 True False True vertical 6 True False 12 True 6 Clear True True True edit-clear-1 2 0 60 True True False False 1 0 True False True Number of URLs to remember 0 0 0 0 1 True False True <b>URL History</b> True 0 0 0 0 0 2 True False Saved Data 2 False True False 12 12 12 12 True vertical 18 True False True 6 True False <b>Logging Options</b> True 0 0 0 0 True False 12 True vertical 6 True False 1 1 True False 1 0 True False True Minimum level to log: 0 0 1 True False True Type: 0 0 0 0 1 0 0 3 True False Logging 3 False True False 12 12 12 12 True vertical 18 True False True center Refresh Information True True True view-refresh False False 0 Restart Checker True True True system-run False False 1 Stop Checker True True True process-stop 0.54000002145767212 False False 2 0 3 True False True 0 none True False 12 12 12 12 True vertical True False True <b>Other Information</b> True 0 2 True False 0 1 True False 6 True 6 12 True False <b>Checker type:</b> True 0 0 0 True False True Unknown 0 1 0 True False True Unknown 0 1 1 True False True Unknown 0 1 2 True False <b>Process ID:</b> True 0 0 1 True False <b>Memory usage:</b> True 0 0 2 True False <b>Locale:</b> True 0 0 3 True False True Unknown 0 1 3 0 0 4 True False Status Checker 4 False True False 12 12 12 12 True True vertical 18 True False True True vertical 6 True False True <b>Configuration Editor</b> True 0 0 0 True False 12 True True vertical 0 1 0 0 5 True False Git 5 False 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/switch.xml000066400000000000000000000236041445560650400206570ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 550 True False Switch center rabbitvcs-small True False 12 12 12 12 True True vertical 18 True False end True True 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 0 2 True False True vertical 6 True False 12 True vertical 0 1 True False True <b>Revision</b> True 0 0 0 0 1 True False True vertical 6 True False 12 True vertical 6 6 True False True True True True 1 1 True False To: 0 0 1 True True True 1 0 True False From: 0 0 0 0 1 True False True <b>Switch Details</b> True 0 0 0 0 0 rabbitvcs-0.19/rabbitvcs/ui/xml/update.xml000066400000000000000000000235121445560650400206360ustar00rootroot00000000000000 True False rabbitvcs-cancel True False rabbitvcs-ok 400 True False Update center-always rabbitvcs-small True False 12 12 12 12 True True vertical 18 True False end True True 6 end _Cancel True True True rabbitvcs-cancel True False False 0 _OK True True True rabbitvcs-ok True False False 1 0 2 True False True 6 Rollback to specified revision number True False True False start True True 1 2 Omit Externals True True False start True True 1 1 Recursive True True False start True True True 1 0 True False start start <b>Options</b> True 0 0 0 0 3 0 1 True False True 6 True False True 1 0 True False start 6 True <b>Revision</b> True 0 0 0 0 0 rabbitvcs-0.19/rabbitvcs/util/000077500000000000000000000000001445560650400163675ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/util/__init__.py000066400000000000000000000072761445560650400205140ustar00rootroot00000000000000from __future__ import absolute_import # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # from rabbitvcs.util.log import Log logger = Log("rabbitvcs.util.__init__") class Function(object): """ Provides an interface to define and call a function. Usage: f = Function(self.do_this, path) f.run() """ def __init__(self, func, *args, **kwargs): self.func = func self.args = args self.kwargs = kwargs self.result = None def start(self): self.result = self.func(*self.args, **self.kwargs) def call(self): return self.func(*self.args, **self.kwargs) def set_args(self, *args, **kwargs): self.args = args self.kwargs = kwargs def get_result(self): return self.result class FunctionQueue(object): """ Provides an interface to generate a queue of function calls. """ def __init__(self): self.queue = [] self.cancel = False self._exception = None self.position = 0 def cancel_queue(self): self.cancel = True def append(self, func, *args, **kwargs): """ Append a Function object to the FunctionQueue @type func: def @param func: A method call @type *args: list @param *args: A list of arguments @type **kwargs: list @param **kwargs: A list of keyword arguments """ self.queue.append(Function(func, *args, **kwargs)) def insert(self, position, func, *args, **kwargs): """ Insert a Function object into the FunctionQueue @type func: def @param func: A method call @type *args: list @param *args: A list of arguments @type **kwargs: list @param **kwargs: A list of keyword arguments """ self.queue.insert(position, Function(func, *args, **kwargs)) def set_exception_callback(self, func): self._exception = Function(func) def start(self): """ Runs through the queue and calls each function """ for func in self.queue: if self.cancel == True: return try: func.start() except Exception as e: logger.exception() if self._exception: self._exception.set_args(e) self._exception.call() break self.position += 1 def get_position(self): return self.position def get_result(self, index): """ Retrieve the result of a single function call by specifying the order in which the function was in the queue. @type index: int @param index: The queue index """ return self.queue[index].get_result() rabbitvcs-0.19/rabbitvcs/util/_locale.py000066400000000000000000000035541445560650400203460ustar00rootroot00000000000000from __future__ import absolute_import import locale import os from rabbitvcs.util.log import Log import rabbitvcs.util.settings import rabbitvcs.util.helper from rabbitvcs import gettext log = Log("rabbitvcs.util.locale") def get_locale(): loc = locale.getlocale(locale.LC_MESSAGES) if loc[0] is None and loc[1] is None: locale.setlocale(locale.LC_MESSAGES, "") loc = locale.getlocale(locale.LC_MESSAGES) locale.setlocale(locale.LC_MESSAGES, (None, None)) return (loc[0] or "", loc[1] or "") def set_locale(language, encoding): sane_default = get_locale() loc = language if not encoding: if not language: return sane_default encoding = sane_default[1] if not loc: loc = sane_default[0] try: locale.setlocale(locale.LC_ALL, (loc, encoding)) except locale.Error: # If the user's environment does not specify an encoding, Python will # pick a default which might not be available. It seems to pick # ISO8859-1 (latin1), but UTF8 is a better idea on GNU/Linux. log.warning("Could not set locale (%s, %s)" % (loc, encoding)) # We should only try this if we have a region to set as well. if language and encoding != "UTF-8": try: locale.setlocale(locale.LC_ALL, (language, "UTF-8")) log.warning("Manually set encoding to UTF-8") except locale.Error: # Nope, no UTF-8 either. log.warning("Could not set user's locale to UTF-8") loc = locale.getlocale(locale.LC_MESSAGES) langs = [] if loc[0]: langs.append(loc[0]) gettext.set_language(langs) return loc def initialize_locale(): sane_default = locale.getdefaultlocale(["LANG", "LANGUAGE"]) # Just try to set the default locale for the user set_locale(*sane_default) rabbitvcs-0.19/rabbitvcs/util/configspec/000077500000000000000000000000001445560650400205075ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/util/configspec/configspec.ini000066400000000000000000000016001445560650400233250ustar00rootroot00000000000000[general] enable_attributes = boolean(default=True) enable_emblems = boolean(default=True) enable_recursive = boolean(default=True) enable_highlighting = boolean(default=True) enable_colorize = boolean(default=True) show_debug = boolean(default=False) show_unversioned_files = boolean(default=True) datetime_format = string(default="") default_commit_message = string(default="") switch_after_branch = boolean(default=True) [external] diff_tool = string(default="/usr/bin/meld") diff_tool_swap = boolean(default=False) merge_tool = string(default="") [cache] number_repositories = integer(default=30) number_messages = integer(default=30) [logging] type = option("None", "File", "Console", "Both", default="Both") level = option("Debug", "Warning", "Info", "Error", "Critical", default="Error") [HideItem] svn = boolean(default=False) hg = boolean(default=False) git = boolean(default=False) rabbitvcs-0.19/rabbitvcs/util/contextmenu.py000066400000000000000000001565051445560650400213260ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2010 by Jason Heeris # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import os.path from time import sleep from collections import deque from six.moves import range # Yes, * imports are bad. You write it out then. from .contextmenuitems import * from rabbitvcs.util import helper import gi try: gi.require_version("Gtk", "3.0") except: gi.require_version("Gtk", "4.0") sa = helper.SanitizeArgv() from gi.repository import Gtk, GLib sa.restore() from rabbitvcs.vcs import ( create_vcs_instance, VCS_SVN, VCS_GIT, VCS_DUMMY, VCS_MERCURIAL, ) from rabbitvcs.util.log import Log from rabbitvcs import gettext from rabbitvcs.util.settings import SettingsManager import rabbitvcs.vcs log = Log("rabbitvcs.util.contextmenu") _ = gettext.gettext settings = SettingsManager() class MenuBuilder(object): """ Generalised menu builder class. Subclasses must provide: connect_to_signal(self, menuitem, callback, callback_args) - connect the menu item to a signal (or do whatever needs to be done) so that the callback is called upon activation. In actual fact, a standard GTK compatible method for this is provided by this class. All a subclass has to do is define the class parameter "signal", and it will be automatically done. make_menu_item(self, item, id_magic) - create the menu item for whatever toolkit (usually this should be just call a convenience method on the MenuItem instance). attach_submenu(self, menu_node, submenu_list) - given a list of whatever make_menu_item(...) returns, create a submenu and attach it to the given node. top_level_menu(self, items) - in some circumstances we need to treat the top level menu differently (eg. Nautilus, because Xenu said so). This processes a list of menu items returned by make_menu_item(...) to create the overall menu. """ def __init__(self, structure, conditions, callbacks): """ @param structure: Menu structure @type structure: list Note on "structure". The menu structure is defined in a list of tuples of two elements each. The first element is a class - the MenuItem subclass that defines the menu interface (see below). The second element is either None (if there is no submenu) or a list of tuples if there is a submenu. The submenus are generated recursively. FYI, this is a list of tuples so that we retain the desired menu item order (dicts do not retain order) Example: [ (MenuClassOne, [ (MenuClassOneSubA, None), (MenuClassOneSubB, None) ]), (MenuClassTwo, None), (MenuClassThree, None) ] """ # The index is mostly for identifier magic index = 0 last_level = -1 last_item = last_menuitem = None stack = [] # ([items], last_item, last_menuitem) flat_structure = helper.walk_tree_depth_first( structure, show_levels=True, preprocess=lambda x: x(conditions, callbacks), filter=lambda x: x.show(), ) # Here's how this works: we walk the tree, which is a series of (level, # MenuItem instance) tuples. We accumulate items in the list in # stack[level][0], and when we go back up a level we put them in a # submenu (as defined by the subclasses). We need to keep track of the # last item on each level, in case they are separators, so that's on the # stack too. for (level, item) in flat_structure: index += 1 # Have we dropped back a level? Restore previous context if level < last_level: # We may have ended up descending several levels (it works, but # please no-one write triply nested menus, it's just dumb). for num in range(last_level - level): # Remove separators at the end of menus if type(last_item) == MenuSeparator: stack[-1][0].remove(last_menuitem) (items, last_item, last_menuitem) = stack.pop() # Every time we back out of a level, we attach the list of # items as a submenu, however the subclass wants to do it. self.attach_submenu(last_menuitem, items) # Have we gone up a level? Save the context and create a submenu if level > last_level: # Skip separators at the start of a menu if type(item) == MenuSeparator: continue stack.append(([], last_item, last_menuitem)) last_item = last_menuitem = None # Skip duplicate separators if type(last_item) == type(item) == MenuSeparator and level == last_level: continue menuitem = self.make_menu_item(item, index) self.connect_signal(menuitem, item.callback, item.callback_args) stack[-1][0].append(menuitem) last_item = item last_menuitem = menuitem last_level = level # Hey, we're out of the loop. Go back up any remaining levels (in case # there were submenus at the end) and finish the job. for (items, last_item2, last_menuitem2) in stack[:0:-1]: if type(last_item) == MenuSeparator: stack[-1][0].remove(last_menuitem) self.attach_submenu(last_menuitem2, items) last_item = last_item2 last_menuitem = last_menuitem2 if stack: self.menu = self.top_level_menu(stack[0][0]) else: log.debug("Empty top level menu!") self.menu = self.top_level_menu([]) def connect_signal(self, menuitem, callback, callback_args): if callback: if callback_args: menuitem.connect(self.signal, callback, callback_args) else: menuitem.connect(self.signal, callback) class GtkContextMenu(MenuBuilder): """ Provides a standard Gtk Context Menu class used for all context menus in Gtk dialogs/windows. """ signal = "button-press-event" def make_menu_item(self, item, id_magic): return item.make_gtk3_menu_item(id_magic) def attach_submenu(self, menu_node, submenu_list): submenu = Gtk.Menu() menu_node.set_submenu(submenu) [submenu.add(item) for item in submenu_list] def top_level_menu(self, items): menu = Gtk.Menu() [menu.add(item) for item in items] return menu def show(self, event): if self.menu.get_children(): self.menu.show_all() self.menu.popup(None, None, None, None, event.button, event.time) def get_widget(self): return self.menu class GtkContextMenuCaller(object): """ Provides an abstract interface to be inherited by dialogs/windows that call a GtkContextMenu. Allows us to have a standard common set of methods we can call from the callback object. """ def __init__(self): pass def on_context_menu_command_finished(self): pass def rescan_after_process_exit(self, proc, paths=None): self.execute_after_process_exit(proc, self.on_context_menu_command_finished) def execute_after_process_exit(self, proc, callback=None): if callback is None: callback = self.on_context_menu_command_finished def is_process_still_alive(): log.debug("is_process_still_alive() for pid: %i" % proc.pid) # First we need to see if the process is still running retval = proc.poll() log.debug("%s" % retval) still_going = retval is None if not still_going and callable(callback): callback() return still_going # Add our callback function on a 1 second timeout GLib.timeout_add_seconds(1, is_process_still_alive) class ContextMenuCallbacks(object): """ The base class for context menu callbacks. This is inherited by sub-classes. """ def __init__(self, caller, base_dir, vcs_client, paths=[]): """ @param caller: The calling object @type caller: RabbitVCS extension @param base_dir: The curent working directory @type base_dir: string @param vcs_client: The vcs client to be used @type vcs_client: rabbitvcs.vcs.create_vcs_instance() @param paths: The selected paths @type paths: list """ self.caller = caller self.base_dir = base_dir self.vcs_client = vcs_client self.paths = paths def python_console(self, widget, data1=None, data2=None): """ Open up an interactive Python console sharing our current context. """ from rabbitvcs.debug.pythonconsole import PythonConsole def exit(): window.destroy() window = Gtk.Window() window.set_size_request(750, 550) window.set_resizable(True) window.set_position(Gtk.WindowPosition.CENTER) console = PythonConsole(exit, namespace={"extension": self.caller}) console.eval( 'print("You can access the extension through ' "'extension'\")", False ) window.add(console) window.show_all() def refresh_status(self, widget, data1=None, data2=None): """ Refreshes an item status, which is actually just invalidate. """ self.debug_invalidate(widget) def debug_revert(self, widget, data1=None, data2=None): client = pysvn.Client() for path in self.paths: client.revert(path, recurse=True) def debug_invalidate(self, widget, data1=None, data2=None): rabbitvcs_extension = self.caller VFSFile_table = rabbitvcs_extension.VFSFile_table for path in self.paths: log.debug("callback_debug_invalidate() called for %s" % path) if path in VFSFile_table: VFSFile_table[path].invalidate_extension_info() def debug_add_emblem(self, widget, data1=None, data2=None): def add_emblem_dialog(): from subprocess import Popen, PIPE command = [ "zenity", "--entry", "--title=RabbitVCS", "--text=Emblem to add:", ] emblem = S(Popen(command, stdout=PIPE).communicate()[0]).replace("\n", "") rabbitvcs_extension = self.caller VFSFile_table = rabbitvcs_extension.VFSFile_table for path in self.paths: if path in VFSFile_table: VFSFile_table[path].add_emblem(emblem) return False GLib.idle_add(add_emblem_dialog) # End debugging callbacks def checkout(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("checkout", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def update(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("update", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def commit(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("commit", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def add(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("add", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def check_for_modifications(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("checkmods", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def delete(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("delete", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def revert(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("revert", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def diff(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("diff", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def diff_multiple(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("diff", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def diff_previous_revision(self, widget, data1=None, data2=None): guess = self.vcs_client.guess(self.paths[0]) if guess["vcs"] == rabbitvcs.vcs.VCS_SVN: previous_revision_number = ( self.vcs_client.svn().get_revision(self.paths[0]) - 1 ) pathrev1 = helper.create_path_revision_string( self.vcs_client.svn().get_repo_url(self.paths[0]), previous_revision_number, ) pathrev2 = helper.create_path_revision_string(self.paths[0], "working") proc = helper.launch_ui_window( "diff", ["-s", pathrev1, pathrev2, "--vcs=%s" % rabbitvcs.vcs.VCS_SVN] ) self.caller.rescan_after_process_exit(proc, self.paths) def compare_tool(self, widget, data1=None, data2=None): pathrev1 = helper.create_path_revision_string(self.paths[0], "base") pathrev2 = helper.create_path_revision_string(self.paths[0], "working") proc = helper.launch_ui_window("diff", ["-s", pathrev1, pathrev2]) self.caller.rescan_after_process_exit(proc, self.paths) def compare_tool_multiple(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("diff", ["-s"] + self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def compare_tool_previous_revision(self, widget, data1=None, data2=None): guess = self.vcs_client.guess(self.paths[0]) if guess["vcs"] == rabbitvcs.vcs.VCS_SVN: previous_revision_number = ( self.vcs_client.svn().get_revision(self.paths[0]) - 1 ) pathrev1 = helper.create_path_revision_string( self.vcs_client.svn().get_repo_url(self.paths[0]), previous_revision_number, ) pathrev2 = helper.create_path_revision_string(self.paths[0], "working") proc = helper.launch_ui_window( "diff", ["-s", pathrev1, pathrev2, "--vcs=%s" % rabbitvcs.vcs.VCS_SVN] ) self.caller.rescan_after_process_exit(proc, self.paths) def show_changes(self, widget, data1=None, data2=None): pathrev1 = helper.create_path_revision_string(self.paths[0]) pathrev2 = pathrev1 if len(self.paths) == 2: pathrev2 = helper.create_path_revision_string(self.paths[1]) proc = helper.launch_ui_window("changes", [pathrev1, pathrev2]) self.caller.rescan_after_process_exit(proc, self.paths) def show_log(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("log", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def rename(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("rename", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def create_patch(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("createpatch", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def apply_patch(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("applypatch", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def properties(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("property_editor", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def about(self, widget, data1=None, data2=None): helper.launch_ui_window("about") def settings(self, widget, data1=None, data2=None): base_dir = self.base_dir if len(self.paths) == 1 and os.path.isdir(self.paths[0]): base_dir = self.paths[0] proc = helper.launch_ui_window("settings", [base_dir]) self.caller.reload_settings(proc) def ignore_by_filename(self, widget, data1=None, data2=None): path = self.paths[0] base_dir = os.path.join(self.base_dir, os.path.dirname(path)) proc = helper.launch_ui_window("ignore", [base_dir, os.path.basename(path)]) self.caller.rescan_after_process_exit(proc, self.paths) def ignore_by_file_extension(self, widget, data1=None, data2=None): path = self.paths[0] pattern = "*%s" % helper.get_file_extension(path) base_dir = os.path.join(self.base_dir, os.path.dirname(path)) proc = helper.launch_ui_window("ignore", [base_dir, pattern]) self.caller.rescan_after_process_exit(proc, self.paths) def get_lock(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("lock", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def branch_tag(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("branch", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def switch(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("switch", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def merge(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("merge", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def _import(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("import", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def export(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("export", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def svn_export(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("export", ["--vcs=svn", self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def git_export(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("export", ["--vcs=git", self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def update_to_revision(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("updateto", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def mark_resolved(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("markresolved", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def annotate(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("annotate", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def unlock(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("unlock", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def create_repository(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("create", ["--vcs", "svn", self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def relocate(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("relocate", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def cleanup(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("cleanup", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def restore(self, widget, data1=None, data2=None): guess = self.vcs_client.guess(self.paths[0]) if guess["vcs"] == rabbitvcs.vcs.VCS_SVN: proc = helper.launch_ui_window("update", self.paths) elif guess["vcs"] == rabbitvcs.vcs.VCS_GIT: proc = helper.launch_ui_window( "checkout", ["-q", "--vcs", "git"] + self.paths ) self.caller.rescan_after_process_exit(proc, self.paths) def _open(self, widget, data1=None, data2=None): pass def browse_to(self, widget, data1=None, data2=None): pass def repo_browser(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("browser", [self.paths[0]]) def initialize_repository(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("create", ["--vcs", "git", self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def clone(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("clone", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def push(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("push", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def branches(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("branches", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def tags(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("tags", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def remotes(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("remotes", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def clean(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("clean", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def reset(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("reset", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def stage(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("stage", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def unstage(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("unstage", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def edit_conflicts(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("editconflicts", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, [self.paths[0]]) class ContextMenuConditions(object): """ Provides a standard interface to checking conditions for menu items. This class should never be instantied directly, rather the narrowly defined FileManagerContextMenuConditions and GtkFilesContextMenuConditions classes should be called. """ def __init__(self): pass def generate_path_dict(self, paths): self.path_dict = {"length": len(paths)} checks = { "is_svn": lambda path: (self.vcs_client.guess(path)["vcs"] == VCS_SVN), "is_git": lambda path: (self.vcs_client.guess(path)["vcs"] == VCS_GIT), "is_mercurial": lambda path: ( self.vcs_client.guess(path)["vcs"] == VCS_MERCURIAL ), "is_dir": os.path.isdir, "is_file": os.path.isfile, "exists": os.path.exists, "is_working_copy": self.vcs_client.is_working_copy, "is_in_a_or_a_working_copy": self.vcs_client.is_in_a_or_a_working_copy, "is_versioned": self.vcs_client.is_versioned, "is_normal": lambda path: self.statuses[path].simple_content_status() == "unchanged" and self.statuses[path].simple_metadata_status() == "normal", "is_added": lambda path: self.statuses[path].simple_content_status() == "added", "is_modified": lambda path: self.statuses[path].simple_content_status() == "modified" or self.statuses[path].simple_metadata_status() == "modified", "is_deleted": lambda path: self.statuses[path].simple_content_status() == "deleted", "is_ignored": lambda path: self.statuses[path].simple_content_status() == "ignored", "is_locked": self.vcs_client.is_locked, "is_missing": lambda path: self.statuses[path].simple_content_status() == "missing", "is_conflicted": lambda path: self.statuses[path].simple_content_status() == "complicated", "is_obstructed": lambda path: self.statuses[path].simple_content_status() == "obstructed", "has_unversioned": lambda path: "unversioned" in self.text_statuses, "has_added": lambda path: "added" in self.text_statuses, "has_modified": lambda path: "modified" in self.text_statuses or "modified" in self.prop_statuses, "has_deleted": lambda path: "deleted" in self.text_statuses, "has_ignored": lambda path: "ignored" in self.text_statuses, "has_missing": lambda path: "missing" in self.text_statuses, "has_conflicted": lambda path: "complicated" in self.text_statuses, "has_obstructed": lambda path: "obstructed" in self.text_statuses, } for key, func in list(checks.items()): self.path_dict[key] = False # Each path gets tested for each check # If a check has returned True for any path, skip it for remaining paths for path in paths: for key, func in list(checks.items()): try: self.path_dict[key] = func(path) except KeyError as e: self.path_dict[key] = False def checkout(self, data=None): if self.path_dict["length"] == 1: if self.path_dict["is_git"]: return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] ) else: return ( self.path_dict["is_dir"] and not self.path_dict["is_working_copy"] ) return False def update(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and not self.path_dict["is_added"] ) def commit(self, data=None): if ( self.path_dict["is_svn"] or self.path_dict["is_git"] or self.path_dict["is_mercurial"] ): if self.path_dict["is_in_a_or_a_working_copy"]: if ( self.path_dict["is_added"] or self.path_dict["is_modified"] or self.path_dict["is_deleted"] or not self.path_dict["is_versioned"] ): return True elif self.path_dict["is_dir"]: return True return False def diff_menu(self, data=None): return self.path_dict["is_in_a_or_a_working_copy"] def diff_multiple(self, data=None): if ( self.path_dict["length"] == 2 and self.path_dict["is_versioned"] and self.path_dict["is_in_a_or_a_working_copy"] ): return True return False def compare_tool_multiple(self, data=None): if ( self.path_dict["length"] == 2 and self.path_dict["is_versioned"] and self.path_dict["is_in_a_or_a_working_copy"] ): return True return False def diff(self, data=None): if ( self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] and ( self.path_dict["is_modified"] or self.path_dict["has_modified"] or self.path_dict["is_conflicted"] or self.path_dict["has_conflicted"] ) ): return True return False def diff_previous_revision(self, data=None): if ( self.path_dict["is_svn"] and self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] ): return True return False def compare_tool(self, data=None): if ( self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] and ( self.path_dict["is_modified"] or self.path_dict["has_modified"] or self.path_dict["is_conflicted"] or self.path_dict["has_conflicted"] ) ): return True return False def compare_tool_previous_revision(self, data=None): if ( self.path_dict["is_svn"] and self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] ): return True return False def show_changes(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and self.path_dict["length"] in (1, 2) ) def show_log(self, data=None): return ( self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and not self.path_dict["is_added"] ) def add(self, data=None): if not self.path_dict["is_svn"]: return False if self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"]: return True elif ( not self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"] and not self.path_dict["is_versioned"] ): return True return False def check_for_modifications(self, data=None): return self.path_dict["is_working_copy"] or self.path_dict["is_versioned"] def rename(self, data=None): return ( self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] and not self.path_dict["is_working_copy"] and self.path_dict["is_versioned"] ) def delete(self, data=None): return ( self.path_dict["exists"] or self.path_dict["is_versioned"] ) and not self.path_dict["is_deleted"] def revert(self, data=None): if self.path_dict["is_in_a_or_a_working_copy"]: if ( self.path_dict["is_added"] or self.path_dict["is_modified"] or self.path_dict["is_deleted"] ): return True else: if self.path_dict["is_dir"] and ( self.path_dict["has_added"] or self.path_dict["has_modified"] or self.path_dict["has_deleted"] or self.path_dict["has_missing"] ): return True return False def annotate(self, data=None): return ( self.path_dict["length"] == 1 and not self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and not self.path_dict["is_added"] ) def properties(self, data=None): return ( self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] ) def create_patch(self, data=None): if self.path_dict["is_in_a_or_a_working_copy"]: if ( self.path_dict["is_added"] or self.path_dict["is_modified"] or self.path_dict["is_deleted"] or not self.path_dict["is_versioned"] ): return True elif self.path_dict["is_dir"] and ( self.path_dict["has_added"] or self.path_dict["has_modified"] or self.path_dict["has_deleted"] or self.path_dict["has_unversioned"] or self.path_dict["has_missing"] ): return True return False def apply_patch(self, data=None): if self.path_dict["is_in_a_or_a_working_copy"]: return True return False def add_to_ignore_list(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and not self.path_dict["is_versioned"] ) def ignore_by_filename(self, *args): return ( self.path_dict["is_in_a_or_a_working_copy"] and not self.path_dict["is_versioned"] ) def ignore_by_file_extension(self, *args): return ( self.path_dict["is_in_a_or_a_working_copy"] and not self.path_dict["is_versioned"] ) def refresh_status(self, data=None): return True def get_lock(self, data=None): return self.path_dict["is_versioned"] def branch_tag(self, data=None): return self.path_dict["is_versioned"] def relocate(self, data=None): return self.path_dict["is_versioned"] def switch(self, data=None): return self.path_dict["is_versioned"] def merge(self, data=None): return self.path_dict["is_versioned"] def _import(self, data=None): return ( self.path_dict["length"] == 1 and not self.path_dict["is_in_a_or_a_working_copy"] ) def export(self, data=None): return self.path_dict["length"] == 1 def svn_export(self, data=None): return self.export(data) def git_export(self, data=None): return self.export(data) def update_to_revision(self, data=None): return ( self.path_dict["length"] == 1 and self.path_dict["is_versioned"] and self.path_dict["is_in_a_or_a_working_copy"] ) def mark_resolved(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and self.path_dict["is_conflicted"] ) def create_repository(self, data=None): return ( self.path_dict["length"] == 1 and not self.path_dict["is_in_a_or_a_working_copy"] ) def unlock(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and (self.path_dict["is_dir"] or self.path_dict["is_locked"]) ) def cleanup(self, data=None): return self.path_dict["is_versioned"] def browse_to(self, data=None): return self.path_dict["exists"] def _open(self, data=None): return self.path_dict["is_file"] def restore(self, data=None): return self.path_dict["has_missing"] def update(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and not self.path_dict["is_added"] ) def repo_browser(self, data=None): return True def rabbitvcs(self, data=None): return False def rabbitvcs_svn(self, data=None): return ( self.path_dict["is_svn"] or not self.path_dict["is_in_a_or_a_working_copy"] ) def rabbitvcs_git(self, data=None): return ( self.path_dict["is_git"] or not self.path_dict["is_in_a_or_a_working_copy"] ) def rabbitvcs_mercurial(self, data=None): return ( self.path_dict["is_mercurial"] or not self.path_dict["is_in_a_or_a_working_copy"] ) def debug(self, data=None): return settings.get("general", "show_debug") def separator(self, data=None): return True def help(self, data=None): return False def settings(self, data=None): return True def about(self, data=None): return True def bugs(self, data=None): return True def initialize_repository(self, data=None): return ( self.path_dict["is_dir"] and not self.path_dict["is_in_a_or_a_working_copy"] ) def clone(self, data=None): return ( self.path_dict["is_dir"] and not self.path_dict["is_in_a_or_a_working_copy"] ) def push(self, data=None): return self.path_dict["is_git"] or self.path_dict["is_mercurial"] def branches(self, data=None): return self.path_dict["is_git"] def tags(self, data=None): return self.path_dict["is_git"] def remotes(self, data=None): return self.path_dict["is_git"] def clean(self, data=None): return self.path_dict["is_git"] def reset(self, data=None): return self.path_dict["is_git"] def stage(self, data=None): if self.path_dict["is_git"]: if self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"]: return True elif ( not self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"] and not self.path_dict["is_versioned"] ): return True return False def unstage(self, data=None): if self.path_dict["is_git"]: if self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"]: return True elif ( not self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_added"] ): return True return False def edit_conflicts(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and self.path_dict["is_conflicted"] ) class GtkFilesContextMenuCallbacks(ContextMenuCallbacks): """ A callback class created for GtkFilesContextMenus. This class inherits from the standard ContextMenuCallbacks class and overrides some methods. """ def __init__(self, caller, base_dir, vcs_client, paths=[]): """ @param caller: The calling object @type caller: RabbitVCS extension @param base_dir: The curent working directory @type base_dir: string @param vcs_client: The vcs client to be used @type vcs_client: rabbitvcs.vcs.create_vcs_instance() @param paths: The selected paths @type paths: list """ ContextMenuCallbacks.__init__(self, caller, base_dir, vcs_client, paths) def _open(self, widget, data1=None, data2=None): for path in self.paths: helper.open_item(path) def add(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("add", ["-q"] + self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def revert(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("revert", ["-q"] + self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def mark_resolved(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("markresolved", ["-q"] + self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def browse_to(self, widget, data1=None, data2=None): helper.browse_to_item(self.paths[0]) def delete(self, widget, data1=None, data2=None): if len(self.paths) > 0: proc = helper.launch_ui_window("delete", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def update(self, data1=None, data2=None): proc = helper.launch_ui_window("update", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def unlock(self, data1=None, data2=None): proc = helper.launch_ui_window("unlock", ["-q"] + self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def show_log(self, data1=None, data2=None): proc = helper.launch_ui_window("log", self.paths) self.caller.rescan_after_process_exit(proc, [self.paths[0]]) def stage(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("stage", ["-q"] + self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def unstage(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("unstage", ["-q"] + self.paths) self.caller.rescan_after_process_exit(proc, self.paths) class GtkFilesContextMenuConditions(ContextMenuConditions): """ Sub-class for ContextMenuConditions for our dialogs. Allows us to override some generic condition methods with condition logic more suitable to the dialogs. """ def __init__(self, vcs_client, paths=[]): """ @param vcs_client: The vcs client to be used @type vcs_client: rabbitvcs.vcs.create_vcs_instance() @param paths: The selected paths @type paths: list """ self.vcs_client = vcs_client self.paths = paths self.statuses = {} self.generate_statuses(self.paths) self.generate_path_dict(self.paths) def generate_statuses(self, paths): self.statuses = {} for path in paths: if not path: continue statuses_tmp = self.vcs_client.statuses(path, invalidate=True) for status in statuses_tmp: self.statuses[status.path] = status self.text_statuses = [ self.statuses[key].simple_content_status() for key in list(self.statuses.keys()) ] self.prop_statuses = [ self.statuses[key].simple_metadata_status() for key in list(self.statuses.keys()) ] class GtkFilesContextMenu(object): """ Defines context menu items for a table with files """ def __init__( self, caller, event, base_dir, paths=[], conditions=None, callbacks=None ): """ @param caller: The calling object @type caller: RabbitVCS extension @param base_dir: The curent working directory @type base_dir: string @param paths: The selected paths @type paths: list @param conditions: The conditions class that determines menu item visibility @kind conditions: ContextMenuConditions @param callbacks: The callbacks class that determines what actions are taken @kind callbacks: ContextMenuCallbacks """ self.caller = caller self.event = event self.paths = paths self.base_dir = base_dir self.vcs_client = create_vcs_instance() self.conditions = conditions if self.conditions is None: self.conditions = GtkFilesContextMenuConditions(self.vcs_client, paths) self.callbacks = callbacks if self.callbacks is None: self.callbacks = GtkFilesContextMenuCallbacks( self.caller, self.base_dir, self.vcs_client, paths ) ignore_items = get_ignore_list_items(paths) # The first element of each tuple is a key that matches a # ContextMenuItems item. The second element is either None when there # is no submenu, or a recursive list of tuples for desired submenus. self.structure = [ (MenuDiff, None), (MenuCompareTool, None), (MenuUnlock, None), (MenuShowLog, None), (MenuOpen, None), (MenuBrowseTo, None), (MenuDelete, None), (MenuRevert, None), (MenuRestore, None), (MenuEditConflicts, None), (MenuMarkResolved, None), (MenuCreatePatch, None), (MenuAdd, None), (MenuStage, None), (MenuUnstage, None), (MenuAddToIgnoreList, ignore_items), ] def show(self): if len(self.paths) == 0: return context_menu = GtkContextMenu(self.structure, self.conditions, self.callbacks) context_menu.show(self.event) def get_menu(self): context_menu = GtkContextMenu(self.structure, self.conditions, self.callbacks) return context_menu.menu class MainContextMenuCallbacks(ContextMenuCallbacks): """ The callback class used for the main context menu. This inherits from and overrides the ContextMenuCallbacks class. """ def __init__(self, caller, base_dir, vcs_client, paths=[]): """ @param caller: The calling object @type caller: RabbitVCS extension @param base_dir: The curent working directory @type base_dir: string @param vcs_client: The vcs client to be used @type vcs_client: rabbitvcs.vcs.create_vcs_instance() @param paths: The selected paths @type paths: list """ ContextMenuCallbacks.__init__(self, caller, base_dir, vcs_client, paths) class MainContextMenuConditions(ContextMenuConditions): """ Sub-class for ContextMenuConditions used for file manager extensions. Allows us to override some generic condition methods with condition logic more suitable to the dialogs. """ def __init__(self, vcs_client, paths=[]): """ @param vcs_client: The vcs client to be used @type vcs_client: rabbitvcs.vcs.create_vcs_instance() @param paths: The selected paths @type paths: list """ self.vcs_client = vcs_client self.paths = paths self.statuses = {} self.generate_statuses(paths) self.generate_path_dict(paths) # FIXME: major bottleneck def generate_statuses(self, paths): self.statuses = {} for path in paths: if not path: continue statuses_tmp = self.vcs_client.statuses(path) for status in statuses_tmp: self.statuses[status.path] = status self.text_statuses = [ self.statuses[key].simple_content_status() for key in list(self.statuses.keys()) ] self.prop_statuses = [ self.statuses[key].simple_metadata_status() for key in list(self.statuses.keys()) ] class MainContextMenu(object): """ Defines and composes the main context menu. """ def __init__(self, caller, base_dir, paths=[], conditions=None, callbacks=None): """ @param caller: The calling object @type caller: RabbitVCS extension @param base_dir: The curent working directory @type base_dir: string @param paths: The selected paths @type paths: list @param conditions: The conditions class that determines menu item visibility @kind conditions: ContextMenuConditions @param callbacks: The callbacks class that determines what actions are taken @kind callbacks: ContextMenuCallbacks """ self.caller = caller self.paths = paths self.base_dir = base_dir self.vcs_client = create_vcs_instance() self.conditions = conditions if self.conditions is None: self.conditions = MainContextMenuConditions(self.vcs_client, paths) self.callbacks = callbacks if self.callbacks is None: self.callbacks = MainContextMenuCallbacks( self.caller, self.base_dir, self.vcs_client, paths ) ignore_items = get_ignore_list_items(paths) # The first element of each tuple is a key that matches a # ContextMenuItems item. The second element is either None when there # is no submenu, or a recursive list of tuples for desired submenus. self.structure = [ ( MenuDebug, [ (MenuBugs, None), (MenuPythonConsole, None), (MenuRefreshStatus, None), (MenuDebugRevert, None), (MenuDebugInvalidate, None), (MenuDebugAddEmblem, None), ], ), (MenuUpdate, None), (MenuCommit, None), (MenuPush, None), None if settings.get("HideItem", "svn") else ( MenuRabbitVCSSvn, [ (MenuCheckout, None), ( MenuDiffMenu, [ (MenuDiff, None), (MenuDiffPrevRev, None), (MenuDiffMultiple, None), (MenuCompareTool, None), (MenuCompareToolPrevRev, None), (MenuCompareToolMultiple, None), (MenuShowChanges, None), ], ), (MenuShowLog, None), (MenuRepoBrowser, None), (MenuCheckForModifications, None), (MenuSeparator, None), (MenuAdd, None), (MenuAddToIgnoreList, ignore_items), (MenuSeparator, None), (MenuUpdateToRevision, None), (MenuRename, None), (MenuDelete, None), (MenuRevert, None), (MenuEditConflicts, None), (MenuMarkResolved, None), (MenuRelocate, None), (MenuGetLock, None), (MenuUnlock, None), (MenuCleanup, None), (MenuSeparator, None), (MenuSVNExport, None), (MenuCreateRepository, None), (MenuImport, None), (MenuSeparator, None), (MenuBranchTag, None), (MenuSwitch, None), (MenuMerge, None), (MenuSeparator, None), (MenuAnnotate, None), (MenuSeparator, None), (MenuCreatePatch, None), (MenuApplyPatch, None), (MenuProperties, None), (MenuSeparator, None), (MenuSettings, None), (MenuAbout, None), ], ), None if settings.get("HideItem", "git") else ( MenuRabbitVCSGit, [ (MenuClone, None), (MenuInitializeRepository, None), (MenuSeparator, None), ( MenuDiffMenu, [ (MenuDiff, None), (MenuDiffPrevRev, None), (MenuDiffMultiple, None), (MenuCompareTool, None), (MenuCompareToolPrevRev, None), (MenuCompareToolMultiple, None), (MenuShowChanges, None), ], ), (MenuShowLog, None), (MenuStage, None), (MenuUnstage, None), (MenuAddToIgnoreList, ignore_items), (MenuSeparator, None), (MenuRename, None), (MenuDelete, None), (MenuRevert, None), (MenuClean, None), (MenuReset, None), (MenuCheckout, None), (MenuSeparator, None), (MenuBranches, None), (MenuTags, None), (MenuRemotes, None), (MenuSeparator, None), (MenuGitExport, None), (MenuMerge, None), (MenuSeparator, None), (MenuAnnotate, None), (MenuSeparator, None), (MenuCreatePatch, None), (MenuApplyPatch, None), (MenuSeparator, None), (MenuSettings, None), (MenuAbout, None), ], ), None if settings.get("HideItem", "hg") else (MenuRabbitVCSMercurial, [(MenuSettings, None), (MenuAbout, None)]), ] self.structure = [_f for _f in self.structure if _f] def get_menu(self): pass def TestMenuItemFunctions(): """ This is a test for developers to ensure that they've written all the necessary conditions and callbacks (and haven't made any typos). What it does: - build a list of all the subclasses of MenuItem - build lists of the methods in ContextMenuConditions/ContextMenuCallbacks - checks to see whether all the MenuItems conditions and callbacks have been assigned - if not, a message is printed """ # These are some simple tests: import inspect import types from . import contextmenuitems menu_item_subclasses = [] # Let's create a list of all MenuItem subclasses for name in dir(contextmenuitems): entity = getattr(contextmenuitems, name) if type(entity) == type: mro = inspect.getmro(entity) if ( entity is not contextmenuitems.MenuItem and contextmenuitems.MenuItem in mro ): menu_item_subclasses.append(entity) condition_functions = [] # Now let's create a list of all of the functions in our conditions class for name in dir(ContextMenuConditions): entity = getattr(ContextMenuConditions, name) if type(entity) == types.UnboundMethodType and not name.startswith("__"): condition_functions.append(entity) callback_functions = [] # ...and in our callbacks class for name in dir(ContextMenuCallbacks): entity = getattr(ContextMenuCallbacks, name) if type(entity) == types.UnboundMethodType and not name.startswith("__"): condition_functions.append(entity) for cls in menu_item_subclasses: item = cls( ContextMenuConditions(), ContextMenuCallbacks(None, None, None, None) ) if not item.found_condition: print( "Did not find condition function in ContextMenuConditions " "for %s (type: %s)" % (item.identifier, cls) ) if not item.callback: print( "Did not find callback function in ContextMenuCallbacks " "for %s (type: %s)" % (item.identifier, cls) ) if __name__ == "__main__": TestMenuItemFunctions() rabbitvcs-0.19/rabbitvcs/util/contextmenu4.py000066400000000000000000001344351445560650400214100ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2010 by Jason Heeris # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os import os.path from time import sleep from collections import deque from six.moves import range # Yes, * imports are bad. You write it out then. from .contextmenuitems4 import * from rabbitvcs.util import helper import gi sa = helper.SanitizeArgv() from gi.repository import GLib sa.restore() from rabbitvcs.vcs import ( create_vcs_instance, VCS_SVN, VCS_GIT, VCS_DUMMY, VCS_MERCURIAL, ) from rabbitvcs.util.log import Log from rabbitvcs import gettext from rabbitvcs.util.settings import SettingsManager import rabbitvcs.vcs log = Log("rabbitvcs.util.contextmenu") _ = gettext.gettext settings = SettingsManager() class MenuBuilder(object): """ Generalised menu builder class. Subclasses must provide: connect_to_signal(self, menuitem, callback, callback_args) - connect the menu item to a signal (or do whatever needs to be done) so that the callback is called upon activation. In actual fact, a standard GTK compatible method for this is provided by this class. All a subclass has to do is define the class parameter "signal", and it will be automatically done. make_menu_item(self, item, id_magic) - create the menu item for whatever toolkit (usually this should be just call a convenience method on the MenuItem instance). attach_submenu(self, menu_node, submenu_list) - given a list of whatever make_menu_item(...) returns, create a submenu and attach it to the given node. top_level_menu(self, items) - in some circumstances we need to treat the top level menu differently (eg. Nautilus, because Xenu said so). This processes a list of menu items returned by make_menu_item(...) to create the overall menu. """ def __init__(self, structure, conditions, callbacks): """ @param structure: Menu structure @type structure: list Note on "structure". The menu structure is defined in a list of tuples of two elements each. The first element is a class - the MenuItem subclass that defines the menu interface (see below). The second element is either None (if there is no submenu) or a list of tuples if there is a submenu. The submenus are generated recursively. FYI, this is a list of tuples so that we retain the desired menu item order (dicts do not retain order) Example: [ (MenuClassOne, [ (MenuClassOneSubA, None), (MenuClassOneSubB, None) ]), (MenuClassTwo, None), (MenuClassThree, None) ] """ # The index is mostly for identifier magic index = 0 last_level = -1 last_item = last_menuitem = None stack = [] # ([items], last_item, last_menuitem) flat_structure = helper.walk_tree_depth_first( structure, show_levels=True, preprocess=lambda x: x(conditions, callbacks), filter=lambda x: x.show(), ) # Here's how this works: we walk the tree, which is a series of (level, # MenuItem instance) tuples. We accumulate items in the list in # stack[level][0], and when we go back up a level we put them in a # submenu (as defined by the subclasses). We need to keep track of the # last item on each level, in case they are separators, so that's on the # stack too. for (level, item) in flat_structure: index += 1 # Have we dropped back a level? Restore previous context if level < last_level: # We may have ended up descending several levels (it works, but # please no-one write triply nested menus, it's just dumb). for num in range(last_level - level): # Remove separators at the end of menus if type(last_item) == MenuSeparator: stack[-1][0].remove(last_menuitem) (items, last_item, last_menuitem) = stack.pop() # Every time we back out of a level, we attach the list of # items as a submenu, however the subclass wants to do it. self.attach_submenu(last_menuitem, items) # Have we gone up a level? Save the context and create a submenu if level > last_level: # Skip separators at the start of a menu if type(item) == MenuSeparator: continue stack.append(([], last_item, last_menuitem)) last_item = last_menuitem = None # Skip duplicate separators if type(last_item) == type(item) == MenuSeparator and level == last_level: continue menuitem = self.make_menu_item(item, index) self.connect_signal(menuitem, item.callback, item.callback_args) stack[-1][0].append(menuitem) last_item = item last_menuitem = menuitem last_level = level # Hey, we're out of the loop. Go back up any remaining levels (in case # there were submenus at the end) and finish the job. for (items, last_item2, last_menuitem2) in stack[:0:-1]: if type(last_item) == MenuSeparator: stack[-1][0].remove(last_menuitem) self.attach_submenu(last_menuitem2, items) last_item = last_item2 last_menuitem = last_menuitem2 if stack: self.menu = self.top_level_menu(stack[0][0]) else: log.debug("Empty top level menu!") self.menu = self.top_level_menu([]) def connect_signal(self, menuitem, callback, callback_args): if callback: if callback_args: menuitem.connect(self.signal, callback, callback_args) else: menuitem.connect(self.signal, callback) class ContextMenuCallbacks(object): """ The base class for context menu callbacks. This is inherited by sub-classes. """ def __init__(self, caller, base_dir, vcs_client, paths=[]): """ @param caller: The calling object @type caller: RabbitVCS extension @param base_dir: The curent working directory @type base_dir: string @param vcs_client: The vcs client to be used @type vcs_client: rabbitvcs.vcs.create_vcs_instance() @param paths: The selected paths @type paths: list """ self.caller = caller self.base_dir = base_dir self.vcs_client = vcs_client self.paths = paths def refresh_status(self, widget, data1=None, data2=None): """ Refreshes an item status, which is actually just invalidate. """ self.debug_invalidate(widget) def debug_revert(self, widget, data1=None, data2=None): client = pysvn.Client() for path in self.paths: client.revert(path, recurse=True) def debug_invalidate(self, widget, data1=None, data2=None): rabbitvcs_extension = self.caller VFSFile_table = rabbitvcs_extension.VFSFile_table for path in self.paths: log.debug("callback_debug_invalidate() called for %s" % path) if path in VFSFile_table: VFSFile_table[path].invalidate_extension_info() def debug_add_emblem(self, widget, data1=None, data2=None): def add_emblem_dialog(): from subprocess import Popen, PIPE command = [ "zenity", "--entry", "--title=RabbitVCS", "--text=Emblem to add:", ] emblem = S(Popen(command, stdout=PIPE).communicate()[0]).replace("\n", "") rabbitvcs_extension = self.caller VFSFile_table = rabbitvcs_extension.VFSFile_table for path in self.paths: if path in VFSFile_table: VFSFile_table[path].add_emblem(emblem) return False GLib.idle_add(add_emblem_dialog) # End debugging callbacks def checkout(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("checkout", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def update(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("update", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def commit(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("commit", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def add(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("add", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def check_for_modifications(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("checkmods", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def delete(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("delete", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def revert(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("revert", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def diff(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("diff", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def diff_multiple(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("diff", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def diff_previous_revision(self, widget, data1=None, data2=None): guess = self.vcs_client.guess(self.paths[0]) if guess["vcs"] == rabbitvcs.vcs.VCS_SVN: previous_revision_number = ( self.vcs_client.svn().get_revision(self.paths[0]) - 1 ) pathrev1 = helper.create_path_revision_string( self.vcs_client.svn().get_repo_url(self.paths[0]), previous_revision_number, ) pathrev2 = helper.create_path_revision_string(self.paths[0], "working") proc = helper.launch_ui_window( "diff", ["-s", pathrev1, pathrev2, "--vcs=%s" % rabbitvcs.vcs.VCS_SVN] ) self.caller.rescan_after_process_exit(proc, self.paths) def compare_tool(self, widget, data1=None, data2=None): pathrev1 = helper.create_path_revision_string(self.paths[0], "base") pathrev2 = helper.create_path_revision_string(self.paths[0], "working") proc = helper.launch_ui_window("diff", ["-s", pathrev1, pathrev2]) self.caller.rescan_after_process_exit(proc, self.paths) def compare_tool_multiple(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("diff", ["-s"] + self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def compare_tool_previous_revision(self, widget, data1=None, data2=None): guess = self.vcs_client.guess(self.paths[0]) if guess["vcs"] == rabbitvcs.vcs.VCS_SVN: previous_revision_number = ( self.vcs_client.svn().get_revision(self.paths[0]) - 1 ) pathrev1 = helper.create_path_revision_string( self.vcs_client.svn().get_repo_url(self.paths[0]), previous_revision_number, ) pathrev2 = helper.create_path_revision_string(self.paths[0], "working") proc = helper.launch_ui_window( "diff", ["-s", pathrev1, pathrev2, "--vcs=%s" % rabbitvcs.vcs.VCS_SVN] ) self.caller.rescan_after_process_exit(proc, self.paths) def show_changes(self, widget, data1=None, data2=None): pathrev1 = helper.create_path_revision_string(self.paths[0]) pathrev2 = pathrev1 if len(self.paths) == 2: pathrev2 = helper.create_path_revision_string(self.paths[1]) proc = helper.launch_ui_window("changes", [pathrev1, pathrev2]) self.caller.rescan_after_process_exit(proc, self.paths) def show_log(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("log", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def rename(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("rename", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def create_patch(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("createpatch", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def apply_patch(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("applypatch", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def properties(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("property_editor", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def about(self, widget, data1=None, data2=None): helper.launch_ui_window("about") def settings(self, widget, data1=None, data2=None): base_dir = self.base_dir if len(self.paths) == 1 and os.path.isdir(self.paths[0]): base_dir = self.paths[0] proc = helper.launch_ui_window("settings", [base_dir]) self.caller.reload_settings(proc) def ignore_by_filename(self, widget, data1=None, data2=None): path = self.paths[0] base_dir = os.path.join(self.base_dir, os.path.dirname(path)) proc = helper.launch_ui_window("ignore", [base_dir, os.path.basename(path)]) self.caller.rescan_after_process_exit(proc, self.paths) def ignore_by_file_extension(self, widget, data1=None, data2=None): path = self.paths[0] pattern = "*%s" % helper.get_file_extension(path) base_dir = os.path.join(self.base_dir, os.path.dirname(path)) proc = helper.launch_ui_window("ignore", [base_dir, pattern]) self.caller.rescan_after_process_exit(proc, self.paths) def get_lock(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("lock", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def branch_tag(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("branch", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def switch(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("switch", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def merge(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("merge", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def _import(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("import", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def export(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("export", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def svn_export(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("export", ["--vcs=svn", self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def git_export(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("export", ["--vcs=git", self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def update_to_revision(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("updateto", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def mark_resolved(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("markresolved", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def annotate(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("annotate", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def unlock(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("unlock", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def create_repository(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("create", ["--vcs", "svn", self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def relocate(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("relocate", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def cleanup(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("cleanup", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def restore(self, widget, data1=None, data2=None): guess = self.vcs_client.guess(self.paths[0]) if guess["vcs"] == rabbitvcs.vcs.VCS_SVN: proc = helper.launch_ui_window("update", self.paths) elif guess["vcs"] == rabbitvcs.vcs.VCS_GIT: proc = helper.launch_ui_window( "checkout", ["-q", "--vcs", "git"] + self.paths ) self.caller.rescan_after_process_exit(proc, self.paths) def _open(self, widget, data1=None, data2=None): pass def browse_to(self, widget, data1=None, data2=None): pass def repo_browser(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("browser", [self.paths[0]]) def initialize_repository(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("create", ["--vcs", "git", self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def clone(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("clone", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def push(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("push", self.paths) self.caller.rescan_after_process_exit(proc, self.paths) def branches(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("branches", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def tags(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("tags", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def remotes(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("remotes", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def clean(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("clean", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def reset(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("reset", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def stage(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("stage", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def unstage(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("unstage", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, self.paths) def edit_conflicts(self, widget, data1=None, data2=None): proc = helper.launch_ui_window("editconflicts", [self.paths[0]]) self.caller.rescan_after_process_exit(proc, [self.paths[0]]) class ContextMenuConditions(object): """ Provides a standard interface to checking conditions for menu items. This class should never be instantied directly, rather the narrowly defined FileManagerContextMenuConditions and GtkFilesContextMenuConditions classes should be called. """ def __init__(self): pass def generate_path_dict(self, paths): self.path_dict = {"length": len(paths)} checks = { "is_svn": lambda path: (self.vcs_client.guess(path)["vcs"] == VCS_SVN), "is_git": lambda path: (self.vcs_client.guess(path)["vcs"] == VCS_GIT), "is_mercurial": lambda path: ( self.vcs_client.guess(path)["vcs"] == VCS_MERCURIAL ), "is_dir": os.path.isdir, "is_file": os.path.isfile, "exists": os.path.exists, "is_working_copy": self.vcs_client.is_working_copy, "is_in_a_or_a_working_copy": self.vcs_client.is_in_a_or_a_working_copy, "is_versioned": self.vcs_client.is_versioned, "is_normal": lambda path: self.statuses[path].simple_content_status() == "unchanged" and self.statuses[path].simple_metadata_status() == "normal", "is_added": lambda path: self.statuses[path].simple_content_status() == "added", "is_modified": lambda path: self.statuses[path].simple_content_status() == "modified" or self.statuses[path].simple_metadata_status() == "modified", "is_deleted": lambda path: self.statuses[path].simple_content_status() == "deleted", "is_ignored": lambda path: self.statuses[path].simple_content_status() == "ignored", "is_locked": self.vcs_client.is_locked, "is_missing": lambda path: self.statuses[path].simple_content_status() == "missing", "is_conflicted": lambda path: self.statuses[path].simple_content_status() == "complicated", "is_obstructed": lambda path: self.statuses[path].simple_content_status() == "obstructed", "has_unversioned": lambda path: "unversioned" in self.text_statuses, "has_added": lambda path: "added" in self.text_statuses, "has_modified": lambda path: "modified" in self.text_statuses or "modified" in self.prop_statuses, "has_deleted": lambda path: "deleted" in self.text_statuses, "has_ignored": lambda path: "ignored" in self.text_statuses, "has_missing": lambda path: "missing" in self.text_statuses, "has_conflicted": lambda path: "complicated" in self.text_statuses, "has_obstructed": lambda path: "obstructed" in self.text_statuses, } for key, func in list(checks.items()): self.path_dict[key] = False # Each path gets tested for each check # If a check has returned True for any path, skip it for remaining paths for path in paths: for key, func in list(checks.items()): try: self.path_dict[key] = func(path) except KeyError as e: self.path_dict[key] = False def checkout(self, data=None): if self.path_dict["length"] == 1: if self.path_dict["is_git"]: return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] ) else: return ( self.path_dict["is_dir"] and not self.path_dict["is_working_copy"] ) return False def update(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and not self.path_dict["is_added"] ) def commit(self, data=None): if ( self.path_dict["is_svn"] or self.path_dict["is_git"] or self.path_dict["is_mercurial"] ): if self.path_dict["is_in_a_or_a_working_copy"]: if ( self.path_dict["is_added"] or self.path_dict["is_modified"] or self.path_dict["is_deleted"] or not self.path_dict["is_versioned"] ): return True elif self.path_dict["is_dir"]: return True return False def diff_menu(self, data=None): return self.path_dict["is_in_a_or_a_working_copy"] def diff_multiple(self, data=None): if ( self.path_dict["length"] == 2 and self.path_dict["is_versioned"] and self.path_dict["is_in_a_or_a_working_copy"] ): return True return False def compare_tool_multiple(self, data=None): if ( self.path_dict["length"] == 2 and self.path_dict["is_versioned"] and self.path_dict["is_in_a_or_a_working_copy"] ): return True return False def diff(self, data=None): if ( self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] and ( self.path_dict["is_modified"] or self.path_dict["has_modified"] or self.path_dict["is_conflicted"] or self.path_dict["has_conflicted"] ) ): return True return False def diff_previous_revision(self, data=None): if ( self.path_dict["is_svn"] and self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] ): return True return False def compare_tool(self, data=None): if ( self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] and ( self.path_dict["is_modified"] or self.path_dict["has_modified"] or self.path_dict["is_conflicted"] or self.path_dict["has_conflicted"] ) ): return True return False def compare_tool_previous_revision(self, data=None): if ( self.path_dict["is_svn"] and self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] ): return True return False def show_changes(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and self.path_dict["length"] in (1, 2) ) def show_log(self, data=None): return ( self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and not self.path_dict["is_added"] ) def add(self, data=None): if not self.path_dict["is_svn"]: return False if self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"]: return True elif ( not self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"] and not self.path_dict["is_versioned"] ): return True return False def check_for_modifications(self, data=None): return self.path_dict["is_working_copy"] or self.path_dict["is_versioned"] def rename(self, data=None): return ( self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] and not self.path_dict["is_working_copy"] and self.path_dict["is_versioned"] ) def delete(self, data=None): return ( self.path_dict["exists"] or self.path_dict["is_versioned"] ) and not self.path_dict["is_deleted"] def revert(self, data=None): if self.path_dict["is_in_a_or_a_working_copy"]: if ( self.path_dict["is_added"] or self.path_dict["is_modified"] or self.path_dict["is_deleted"] ): return True else: if self.path_dict["is_dir"] and ( self.path_dict["has_added"] or self.path_dict["has_modified"] or self.path_dict["has_deleted"] or self.path_dict["has_missing"] ): return True return False def annotate(self, data=None): return ( self.path_dict["length"] == 1 and not self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and not self.path_dict["is_added"] ) def properties(self, data=None): return ( self.path_dict["length"] == 1 and self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] ) def create_patch(self, data=None): if self.path_dict["is_in_a_or_a_working_copy"]: if ( self.path_dict["is_added"] or self.path_dict["is_modified"] or self.path_dict["is_deleted"] or not self.path_dict["is_versioned"] ): return True elif self.path_dict["is_dir"] and ( self.path_dict["has_added"] or self.path_dict["has_modified"] or self.path_dict["has_deleted"] or self.path_dict["has_unversioned"] or self.path_dict["has_missing"] ): return True return False def apply_patch(self, data=None): if self.path_dict["is_in_a_or_a_working_copy"]: return True return False def add_to_ignore_list(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and not self.path_dict["is_versioned"] ) def ignore_by_filename(self, *args): return ( self.path_dict["is_in_a_or_a_working_copy"] and not self.path_dict["is_versioned"] ) def ignore_by_file_extension(self, *args): return ( self.path_dict["is_in_a_or_a_working_copy"] and not self.path_dict["is_versioned"] ) def refresh_status(self, data=None): return True def get_lock(self, data=None): return self.path_dict["is_versioned"] def branch_tag(self, data=None): return self.path_dict["is_versioned"] def relocate(self, data=None): return self.path_dict["is_versioned"] def switch(self, data=None): return self.path_dict["is_versioned"] def merge(self, data=None): return self.path_dict["is_versioned"] def _import(self, data=None): return ( self.path_dict["length"] == 1 and not self.path_dict["is_in_a_or_a_working_copy"] ) def export(self, data=None): return self.path_dict["length"] == 1 def svn_export(self, data=None): return self.export(data) def git_export(self, data=None): return self.export(data) def update_to_revision(self, data=None): return ( self.path_dict["length"] == 1 and self.path_dict["is_versioned"] and self.path_dict["is_in_a_or_a_working_copy"] ) def mark_resolved(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and self.path_dict["is_conflicted"] ) def create_repository(self, data=None): return ( self.path_dict["length"] == 1 and not self.path_dict["is_in_a_or_a_working_copy"] ) def unlock(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and (self.path_dict["is_dir"] or self.path_dict["is_locked"]) ) def cleanup(self, data=None): return self.path_dict["is_versioned"] def browse_to(self, data=None): return self.path_dict["exists"] def _open(self, data=None): return self.path_dict["is_file"] def restore(self, data=None): return self.path_dict["has_missing"] def update(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and not self.path_dict["is_added"] ) def repo_browser(self, data=None): return True def rabbitvcs(self, data=None): return False def rabbitvcs_svn(self, data=None): return ( self.path_dict["is_svn"] or not self.path_dict["is_in_a_or_a_working_copy"] ) def rabbitvcs_git(self, data=None): return ( self.path_dict["is_git"] or not self.path_dict["is_in_a_or_a_working_copy"] ) def rabbitvcs_mercurial(self, data=None): return ( self.path_dict["is_mercurial"] or not self.path_dict["is_in_a_or_a_working_copy"] ) def debug(self, data=None): return settings.get("general", "show_debug") def separator(self, data=None): return True def help(self, data=None): return False def settings(self, data=None): return True def about(self, data=None): return True def bugs(self, data=None): return True def initialize_repository(self, data=None): return ( self.path_dict["is_dir"] and not self.path_dict["is_in_a_or_a_working_copy"] ) def clone(self, data=None): return ( self.path_dict["is_dir"] and not self.path_dict["is_in_a_or_a_working_copy"] ) def push(self, data=None): return self.path_dict["is_git"] or self.path_dict["is_mercurial"] def branches(self, data=None): return self.path_dict["is_git"] def tags(self, data=None): return self.path_dict["is_git"] def remotes(self, data=None): return self.path_dict["is_git"] def clean(self, data=None): return self.path_dict["is_git"] def reset(self, data=None): return self.path_dict["is_git"] def stage(self, data=None): if self.path_dict["is_git"]: if self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"]: return True elif ( not self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"] and not self.path_dict["is_versioned"] ): return True return False def unstage(self, data=None): if self.path_dict["is_git"]: if self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"]: return True elif ( not self.path_dict["is_dir"] and self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_added"] ): return True return False def edit_conflicts(self, data=None): return ( self.path_dict["is_in_a_or_a_working_copy"] and self.path_dict["is_versioned"] and self.path_dict["is_conflicted"] ) class MainContextMenuCallbacks(ContextMenuCallbacks): """ The callback class used for the main context menu. This inherits from and overrides the ContextMenuCallbacks class. """ def __init__(self, caller, base_dir, vcs_client, paths=[]): """ @param caller: The calling object @type caller: RabbitVCS extension @param base_dir: The curent working directory @type base_dir: string @param vcs_client: The vcs client to be used @type vcs_client: rabbitvcs.vcs.create_vcs_instance() @param paths: The selected paths @type paths: list """ ContextMenuCallbacks.__init__(self, caller, base_dir, vcs_client, paths) class MainContextMenuConditions(ContextMenuConditions): """ Sub-class for ContextMenuConditions used for file manager extensions. Allows us to override some generic condition methods with condition logic more suitable to the dialogs. """ def __init__(self, vcs_client, paths=[]): """ @param vcs_client: The vcs client to be used @type vcs_client: rabbitvcs.vcs.create_vcs_instance() @param paths: The selected paths @type paths: list """ self.vcs_client = vcs_client self.paths = paths self.statuses = {} self.generate_statuses(paths) self.generate_path_dict(paths) # FIXME: major bottleneck def generate_statuses(self, paths): self.statuses = {} for path in paths: if not path: continue statuses_tmp = self.vcs_client.statuses(path) for status in statuses_tmp: self.statuses[status.path] = status self.text_statuses = [ self.statuses[key].simple_content_status() for key in list(self.statuses.keys()) ] self.prop_statuses = [ self.statuses[key].simple_metadata_status() for key in list(self.statuses.keys()) ] class MainContextMenu(object): """ Defines and composes the main context menu. """ def __init__(self, caller, base_dir, paths=[], conditions=None, callbacks=None): """ @param caller: The calling object @type caller: RabbitVCS extension @param base_dir: The curent working directory @type base_dir: string @param paths: The selected paths @type paths: list @param conditions: The conditions class that determines menu item visibility @kind conditions: ContextMenuConditions @param callbacks: The callbacks class that determines what actions are taken @kind callbacks: ContextMenuCallbacks """ self.caller = caller self.paths = paths self.base_dir = base_dir self.vcs_client = create_vcs_instance() self.conditions = conditions if self.conditions is None: self.conditions = MainContextMenuConditions(self.vcs_client, paths) self.callbacks = callbacks if self.callbacks is None: self.callbacks = MainContextMenuCallbacks( self.caller, self.base_dir, self.vcs_client, paths ) ignore_items = get_ignore_list_items(paths) # The first element of each tuple is a key that matches a # ContextMenuItems item. The second element is either None when there # is no submenu, or a recursive list of tuples for desired submenus. self.structure = [ ( MenuDebug, [ (MenuBugs, None), (MenuPythonConsole, None), (MenuRefreshStatus, None), (MenuDebugRevert, None), (MenuDebugInvalidate, None), (MenuDebugAddEmblem, None), ], ), (MenuUpdate, None), (MenuCommit, None), (MenuPush, None), None if settings.get("HideItem", "svn") else ( MenuRabbitVCSSvn, [ (MenuCheckout, None), ( MenuDiffMenu, [ (MenuDiff, None), (MenuDiffPrevRev, None), (MenuDiffMultiple, None), (MenuCompareTool, None), (MenuCompareToolPrevRev, None), (MenuCompareToolMultiple, None), (MenuShowChanges, None), ], ), (MenuShowLog, None), (MenuRepoBrowser, None), (MenuCheckForModifications, None), (MenuSeparator, None), (MenuAdd, None), (MenuAddToIgnoreList, ignore_items), (MenuSeparator, None), (MenuUpdateToRevision, None), (MenuRename, None), (MenuDelete, None), (MenuRevert, None), (MenuEditConflicts, None), (MenuMarkResolved, None), (MenuRelocate, None), (MenuGetLock, None), (MenuUnlock, None), (MenuCleanup, None), (MenuSeparator, None), (MenuSVNExport, None), (MenuCreateRepository, None), (MenuImport, None), (MenuSeparator, None), (MenuBranchTag, None), (MenuSwitch, None), (MenuMerge, None), (MenuSeparator, None), (MenuAnnotate, None), (MenuSeparator, None), (MenuCreatePatch, None), (MenuApplyPatch, None), (MenuProperties, None), (MenuSeparator, None), (MenuSettings, None), (MenuAbout, None), ], ), None if settings.get("HideItem", "git") else ( MenuRabbitVCSGit, [ (MenuClone, None), (MenuInitializeRepository, None), (MenuSeparator, None), ( MenuDiffMenu, [ (MenuDiff, None), (MenuDiffPrevRev, None), (MenuDiffMultiple, None), (MenuCompareTool, None), (MenuCompareToolPrevRev, None), (MenuCompareToolMultiple, None), (MenuShowChanges, None), ], ), (MenuShowLog, None), (MenuStage, None), (MenuUnstage, None), (MenuAddToIgnoreList, ignore_items), (MenuSeparator, None), (MenuRename, None), (MenuDelete, None), (MenuRevert, None), (MenuClean, None), (MenuReset, None), (MenuCheckout, None), (MenuSeparator, None), (MenuBranches, None), (MenuTags, None), (MenuRemotes, None), (MenuSeparator, None), (MenuGitExport, None), (MenuMerge, None), (MenuSeparator, None), (MenuAnnotate, None), (MenuSeparator, None), (MenuCreatePatch, None), (MenuApplyPatch, None), (MenuSeparator, None), (MenuSettings, None), (MenuAbout, None), ], ), None if settings.get("HideItem", "hg") else (MenuRabbitVCSMercurial, [(MenuSettings, None), (MenuAbout, None)]), ] self.structure = [_f for _f in self.structure if _f] def get_menu(self): pass def TestMenuItemFunctions(): """ This is a test for developers to ensure that they've written all the necessary conditions and callbacks (and haven't made any typos). What it does: - build a list of all the subclasses of MenuItem - build lists of the methods in ContextMenuConditions/ContextMenuCallbacks - checks to see whether all the MenuItems conditions and callbacks have been assigned - if not, a message is printed """ # These are some simple tests: import inspect import types from . import contextmenuitems menu_item_subclasses = [] # Let's create a list of all MenuItem subclasses for name in dir(contextmenuitems): entity = getattr(contextmenuitems, name) if type(entity) == type: mro = inspect.getmro(entity) if ( entity is not contextmenuitems.MenuItem and contextmenuitems.MenuItem in mro ): menu_item_subclasses.append(entity) condition_functions = [] # Now let's create a list of all of the functions in our conditions class for name in dir(ContextMenuConditions): entity = getattr(ContextMenuConditions, name) if type(entity) == types.UnboundMethodType and not name.startswith("__"): condition_functions.append(entity) callback_functions = [] # ...and in our callbacks class for name in dir(ContextMenuCallbacks): entity = getattr(ContextMenuCallbacks, name) if type(entity) == types.UnboundMethodType and not name.startswith("__"): condition_functions.append(entity) for cls in menu_item_subclasses: item = cls( ContextMenuConditions(), ContextMenuCallbacks(None, None, None, None) ) if not item.found_condition: print( "Did not find condition function in ContextMenuConditions " "for %s (type: %s)" % (item.identifier, cls) ) if not item.callback: print( "Did not find callback function in ContextMenuCallbacks " "for %s (type: %s)" % (item.identifier, cls) ) if __name__ == "__main__": TestMenuItemFunctions() rabbitvcs-0.19/rabbitvcs/util/contextmenuitems.py000066400000000000000000000637541445560650400223730ustar00rootroot00000000000000from __future__ import absolute_import # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2010 by Jason Heeris # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path import os import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk from rabbitvcs.util import helper from rabbitvcs.util.strings import S from rabbitvcs import gettext _ = gettext.gettext from rabbitvcs.util.log import Log log = Log("rabbitvcs.ui.contextmenuitems") _ = gettext.gettext SEPARATOR = "\u2015" * 10 class MenuItem(object): """ This is the base class for a definition of a menu item. Consider this "abstract" (in the language of Java) - it makes no sense to instantiate it directly. If you want to define a new kind of menu item, you need to subclass it like so: class MenuPerformMagic(MenuItem): identifier = "RabbitVCS::Perform_Magic" label = _("Perform Magic") tooltip = _("Put on your robe and wizard hat") icon = "rabbitvcs-wand" There is some introspection magic that goes on to associate the items themselves with certain methods of a ContextMenuCondition object or a ContextMenuCallback object. This is done by looking at the identifier - the part of the identifier after "::" is converted to lowercase and the item looks for a method of that name (eg. in the example above, "perform_magic"). It is easy to override this, just define condition_name and callback_name to be what you need. If the item cannot find anything, it defaults to not assigning the callback and having the condition return False. There a few ways to organise this (and maybe it would be better to have the GtkContextMenu class do it), but this is it for the moment. """ @staticmethod def default_condition(*args, **kwargs): return False @staticmethod def make_default_name(identifier): return identifier.split(MenuItem.IDENTIFIER_SEPARATOR)[-1].lower() IDENTIFIER_SEPARATOR = "::" # These are all explicitly defined here to make it obvious what a subclass # needs to set up. # This is relevant for GTK and Nautilus - they require unique identifiers # for all the elements of their menus. Make sure it starts with # "RabbitVCS::" identifier = None # The label that appears on the menu item. It is up to the subclass to # designate it as translatable. label = None # The tooltip for the menu item. It is up to the subclass to designate it as # translatable. tooltip = "" # The icon that will appear on the menu item. This can be, say, # "rabbitvcs-something" icon = None # This is a string that holds the name of the function that is called when # the menu item is activated (it is assigned to # self.signals["activate"]["callback"]) # # The menu item will look for a callable attribute of this name in the # callback object passed in to the constructor. If it is None, it will try # to assign a default callback based on the identifier. If nothing is found # then no callback will be assigned to the "activate" signal. callback_name = None callback_args = () # This is a string that holds the name of the function that is called to # determine whether to show the item. # # The menu item will look for a callable attribute of this name in the # callback object passed in to the constructor. If it is None, or False, or # it cannot find anything, it will set up a function that returns False. condition_name = None condition_args = () def __init__(self, conditions, callbacks): """ Creates a new menu item for constructing the GTK context menu. """ self.signals = {} default_name = MenuItem.make_default_name(self.identifier) # These flags are used for sanity checks that developers can run to # ensure completeness of conditions and callbacks. # See contextmenu.TestMenuItemFunctions() self.found_callback = False self.found_condition = False # If no callback name is set, assign the default if self.callback_name is None: # log.debug("Using default callback name: %s" % default_name) self.callback_name = default_name # Try to get the callback function for this item self.callback = self._get_function(callbacks, self.callback_name) # else: # log.debug("Could not find callback for %s" % self.identifier) self.condition = { "callback": MenuItem.default_condition, "args": self.condition_args, } if self.condition_name is None: self.condition_name = default_name condition = self._get_function(conditions, self.condition_name) if condition: self.condition["callback"] = condition self.found_condition = True # else: # log.debug("Could not find condition for %s" % self.identifier) def show(self): return self.condition["callback"](*self.condition["args"]) def _get_function(self, object, name): function = None if hasattr(object, name): attr = getattr(object, name) if callable(attr): function = attr return function def make_magic_id(self, id_magic=None): identifier = self.identifier if id_magic: identifier = identifier + "-" + str(id_magic) return identifier def make_action(self, id_magic=None): """ Creates the Action for the menu item. To avoid GTK "helpfully" preventing us from adding duplicates (eg. separators), you can pass in a string that will be appended and separated from the actual identifier. """ identifier = self.make_magic_id(id_magic) return Action(identifier, self.make_label(), self.tooltip, self.icon) def make_thunar_action(self, id_magic=None): identifier = self.make_magic_id(id_magic) action = RabbitVCSAction(identifier, self.make_label(), self.tooltip, self.icon) return action def make_gtk_menu_item(self, id_magic=None): action = self.make_action(id_magic) if self.icon: # We use this instead of Gtk.Action.set_icon_name because # that method is not available until pyGtk 2.16 action.set_menu_item_type(Gtk.ImageMenuItem) menuitem = action.create_menu_item() menuitem.set_image( Gtk.image_new_from_icon_name(self.icon, Gtk.IconSize.MENU) ) else: menuitem = action.create_menu_item() return menuitem def make_gtk3_menu_item(self, id_magic=None): action = self.make_action(id_magic) menuitem = action.create_menu_item() if self.icon: menuitem.set_image( Gtk.Image.new_from_icon_name(self.icon, Gtk.IconSize.MENU) ) return menuitem def make_thunarx_menu_item(self, id_magic=None): # WARNING: this import is here because it will fail if it is not done # inside a thunar process and therefore can't be in the module proper. # This should only be used for Thunarx-3 identifier = self.make_magic_id(id_magic) from gi.repository import Thunarx menuitem = Thunarx.MenuItem( name=identifier, label=self.make_label(), tooltip=self.tooltip, icon=self.icon, ) return menuitem def make_nautilus_menu_item(self, id_magic=None): # WARNING: this import is here because it will fail if it is not done # inside a nautilus process and therefore can't be in the module proper. # I'm happy to let the exception propagate the rest of the time, since # this method shouldn't be called outside of nautilus. identifier = self.make_magic_id(id_magic) try: from gi.repository import Nautilus menuitem = Nautilus.MenuItem( name=identifier, label=self.make_label(), tip=self.tooltip, icon=self.icon, ) except ImportError: import nautilus menuitem = nautilus.MenuItem( identifier, self.make_label(), self.tooltip, self.icon ) return menuitem def make_label(self): label = S(self.label).display().replace("_", "__") return label class MenuSeparator(MenuItem): identifier = "RabbitVCS::Separator" label = SEPARATOR def make_insensitive(self, menuitem): menuitem.set_property("sensitive", False) def make_thunar_action(self, id_magic=None): menuitem = super(MenuSeparator, self).make_thunar_action(id_magic) self.make_insensitive(menuitem) return menuitem # FIXME: I thought that this would work to create separators, # but all I get are black "-"s... # I thought # ~ identifier = self.make_magic_id(id_magic) # ~ # This information is not actually used, but is necessary for # ~ # the required subclassing of Action. # ~ action = ThunarSeparator( # ~ identifier, # ~ self.label, # ~ self.tooltip, # ~ self.icon, # ~ ) # ~ return action # Make separators insensitive def make_gtk_menu_item(self, id_magic=None): menuitem = Gtk.SeparatorMenuItem() menuitem.show() return menuitem def make_gtk3_menu_item(self, id_magic=None): menuitem = Gtk.SeparatorMenuItem() menuitem.show() return menuitem def make_nautilus_menu_item(self, id_magic=None): menuitem = super(MenuSeparator, self).make_nautilus_menu_item(id_magic) self.make_insensitive(menuitem) return menuitem class MenuDebug(MenuItem): identifier = "RabbitVCS::Debug" label = _("Debug") icon = "rabbitvcs-monkey" class MenuBugs(MenuItem): identifier = "RabbitVCS::Bugs" label = _("Bugs") icon = "rabbitvcs-bug" class MenuPythonConsole(MenuItem): identifier = "RabbitVCS::Python_Console" label = _("Open Python Console") icon = "gnome-terminal" condition_name = "debug" class MenuRefreshStatus(MenuItem): identifier = "RabbitVCS::Refresh_Status" label = _("Refresh Status") icon = "rabbitvcs-refresh" class MenuDebugRevert(MenuItem): identifier = "RabbitVCS::Debug_Revert" label = _("Debug Revert") tooltip = _("Reverts everything it sees") icon = "rabbitvcs-revert" condition_name = "debug" class MenuDebugInvalidate(MenuItem): identifier = "RabbitVCS::Debug_Invalidate" label = _("Invalidate") tooltip = _("Force an invalidate_extension_info() call") icon = "rabbitvcs-clear" condition_name = "debug" class MenuDebugAddEmblem(MenuItem): identifier = "RabbitVCS::Debug_Add_Emblem" label = _("Add Emblem") tooltip = _("Add an emblem") icon = "rabbitvcs-emblems" condition_name = "debug" class MenuCheckout(MenuItem): identifier = "RabbitVCS::Checkout" label = _("Checkout...") tooltip = _("Check out a working copy") icon = "rabbitvcs-checkout" class MenuUpdate(MenuItem): identifier = "RabbitVCS::Update" label = _("Update") tooltip = _("Update a working copy") icon = "rabbitvcs-update" class MenuCommit(MenuItem): identifier = "RabbitVCS::Commit" label = _("Commit") tooltip = _("Commit modifications to the repository") icon = "rabbitvcs-commit" class MenuRabbitVCS(MenuItem): identifier = "RabbitVCS::RabbitVCS" label = _("RabbitVCS") icon = "rabbitvcs" class MenuRabbitVCSSvn(MenuItem): identifier = "RabbitVCS::RabbitVCS_Svn" label = _("RabbitVCS SVN") icon = "rabbitvcs" class MenuRabbitVCSGit(MenuItem): identifier = "RabbitVCS::RabbitVCS_Git" label = _("RabbitVCS Git") icon = "rabbitvcs" class MenuRabbitVCSMercurial(MenuItem): identifier = "RabbitVCS::RabbitVCS_Mercurial" label = _("RabbitVCS Hg") icon = "rabbitvcs" class MenuRepoBrowser(MenuItem): identifier = "RabbitVCS::Repo_Browser" label = _("Repository Browser") tooltip = _("Browse a repository tree") icon = "edit-find" class MenuCheckForModifications(MenuItem): identifier = "RabbitVCS::Check_For_Modifications" label = _("Check for Modifications...") tooltip = _("Check for modifications made to the repository") icon = "rabbitvcs-checkmods" class MenuDiffMenu(MenuItem): identifier = "RabbitVCS::Diff_Menu" label = _("Diff Menu...") tooltip = _("List of comparison options") icon = "rabbitvcs-diff" class MenuDiff(MenuItem): identifier = "RabbitVCS::Diff" label = _("View diff against base") tooltip = _("View the modifications made to a file") icon = "rabbitvcs-diff" class MenuDiffMultiple(MenuItem): identifier = "RabbitVCS::Diff_Multiple" label = _("View diff between files/folders") tooltip = _("View the differences between two files") icon = "rabbitvcs-diff" class MenuDiffPrevRev(MenuItem): identifier = "RabbitVCS::Diff_Previous_Revision" label = _("View diff against previous revision") tooltip = _("View the modifications made to a file since its last change") icon = "rabbitvcs-diff" class MenuCompareTool(MenuItem): identifier = "RabbitVCS::Compare_Tool" label = _("Compare with base") tooltip = _("Compare with base using side-by-side comparison tool") icon = "rabbitvcs-compare" class MenuCompareToolMultiple(MenuItem): identifier = "RabbitVCS::Compare_Tool_Multiple" label = _("Compare files/folders") tooltip = _("Compare the differences between two items") icon = "rabbitvcs-compare" class MenuCompareToolPrevRev(MenuItem): identifier = "RabbitVCS::Compare_Tool_Previous_Revision" label = _("Compare with previous revision") tooltip = _("Compare with previous revision using side-by-side comparison tool") icon = "rabbitvcs-compare" class MenuShowChanges(MenuItem): identifier = "RabbitVCS::Show_Changes" label = _("Show Changes...") tooltip = _("Show changes between paths and revisions") icon = "rabbitvcs-changes" class MenuShowLog(MenuItem): identifier = "RabbitVCS::Show_Log" label = _("Show Log") tooltip = _("Show a file's log information") icon = "rabbitvcs-show_log" class MenuAdd(MenuItem): identifier = "RabbitVCS::Add" label = _("Add") tooltip = _("Schedule items to be added to the repository") icon = "rabbitvcs-add" class MenuAddToIgnoreList(MenuItem): identifier = "RabbitVCS::Add_To_Ignore_List" label = _("Add to ignore list") icon = None class MenuUpdateToRevision(MenuItem): identifier = "RabbitVCS::Update_To_Revision" label = _("Update to revision...") tooltip = _("Update a file to a specific revision") icon = "rabbitvcs-update" class MenuRename(MenuItem): identifier = "RabbitVCS::Rename" label = _("Rename...") tooltip = _("Schedule an item to be renamed on the repository") icon = "rabbitvcs-rename" class MenuDelete(MenuItem): identifier = "RabbitVCS::Delete" label = _("Delete") tooltip = _("Schedule an item to be deleted from the repository") icon = "rabbitvcs-delete" class MenuRevert(MenuItem): identifier = "RabbitVCS::Revert" label = _("Revert") tooltip = _("Revert an item to its unmodified state") icon = "rabbitvcs-revert" class MenuMarkResolved(MenuItem): identifier = "RabbitVCS::Mark_Resolved" label = _("Mark as Resolved") tooltip = _("Mark a conflicted item as resolved") icon = "rabbitvcs-resolve" class MenuRestore(MenuItem): identifier = "RabbitVCS::Restore" label = _("Restore") tooltip = _("Restore a missing item") class MenuRelocate(MenuItem): identifier = "RabbitVCS::Relocate" label = _("Relocate...") tooltip = _("Relocate your working copy") icon = "rabbitvcs-relocate" class MenuGetLock(MenuItem): identifier = "RabbitVCS::Get_Lock" label = _("Get Lock...") tooltip = _("Locally lock items") icon = "rabbitvcs-lock" class MenuUnlock(MenuItem): identifier = "RabbitVCS::Unlock" label = _("Release Lock...") tooltip = _("Release lock on an item") icon = "rabbitvcs-unlock" class MenuCleanup(MenuItem): identifier = "RabbitVCS::Cleanup" label = _("Cleanup") tooltip = _("Clean up working copy") icon = "rabbitvcs-cleanup" class MenuExport(MenuItem): identifier = "RabbitVCS::Export" label = _("Export...") tooltip = _("Export a working copy or repository with no versioning information") icon = "rabbitvcs-export" class MenuSVNExport(MenuExport): identifier = "RabbitVCS::SVN_Export" pass class MenuGitExport(MenuExport): identifier = "RabbitVCS::Git_Export" pass class MenuCreateRepository(MenuItem): identifier = "RabbitVCS::Create_Repository" label = _("Create Repository here") tooltip = _("Create a repository in a folder") icon = "rabbitvcs-run" class MenuImport(MenuItem): identifier = "RabbitVCS::Import" label = _("Import") tooltip = _("Import an item into a repository") icon = "rabbitvcs-import" # "import" is reserved condition_name = "_import" callback_name = "_import" class MenuBranchTag(MenuItem): identifier = "RabbitVCS::Branch_Tag" label = _("Branch/tag...") tooltip = _("Copy an item to another location in the repository") icon = "rabbitvcs-branch" class MenuSwitch(MenuItem): identifier = "RabbitVCS::Switch" label = _("Switch...") tooltip = _("Change the repository location of a working copy") icon = "rabbitvcs-switch" class MenuMerge(MenuItem): identifier = "RabbitVCS::Merge" label = _("Merge...") tooltip = _("A wizard with steps for merging") icon = "rabbitvcs-merge" class MenuAnnotate(MenuItem): identifier = "RabbitVCS::Annotate" label = _("Annotate...") tooltip = _("Annotate a file") icon = "rabbitvcs-annotate" class MenuCreatePatch(MenuItem): identifier = "RabbitVCS::Create_Patch" label = _("Create Patch...") tooltip = _("Creates a unified diff file with all changes you made") icon = "rabbitvcs-createpatch" class MenuApplyPatch(MenuItem): identifier = "RabbitVCS::Apply_Patch" label = _("Apply Patch...") tooltip = _("Applies a unified diff file to the working copy") icon = "rabbitvcs-applypatch" class MenuProperties(MenuItem): identifier = "RabbitVCS::Properties" label = _("Properties") tooltip = _("View the properties of an item") icon = "rabbitvcs-properties" class MenuHelp(MenuItem): identifier = "RabbitVCS::Help" label = _("Help") tooltip = _("View help") icon = "rabbitvcs-help" class MenuSettings(MenuItem): identifier = "RabbitVCS::Settings" label = _("Settings") tooltip = _("View or change RabbitVCS settings") icon = "rabbitvcs-settings" class MenuAbout(MenuItem): identifier = "RabbitVCS::About" label = _("About") tooltip = _("About RabbitVCS") icon = "rabbitvcs-about" class MenuOpen(MenuItem): identifier = "RabbitVCS::Open" label = _("Open") tooltip = _("Open a file") icon = "document-open" # Not sure why, but it was like this before... condition_name = "_open" callback_name = "_open" class MenuBrowseTo(MenuItem): identifier = "RabbitVCS::Browse_To" label = _("Browse to") tooltip = _("Browse to a file or folder") icon = "drive-harddisk" class PropMenuRevert(MenuItem): identifier = "RabbitVCS::Property_Revert" label = _("Revert property") icon = "rabbitvcs-revert" tooltip = _("Revert this property to its original state") class PropMenuRevertRecursive(MenuItem): identifier = "RabbitVCS::Property_Revert_Recursive" label = _("Revert property (recursive)") icon = "rabbitvcs-revert" tooltip = _("Revert this property to its original state (recursive)") condition_name = "property_revert" class PropMenuDelete(MenuItem): identifier = "RabbitVCS::Property_Delete" label = _("Delete property") icon = "rabbitvcs-delete" tooltip = _("Delete this property") class PropMenuDeleteRecursive(MenuItem): identifier = "RabbitVCS::Property_Delete_Recursive" label = _("Delete property (recursive)") icon = "rabbitvcs-delete" tooltip = _("Delete this property (recursive)") condition_name = "property_delete" class PropMenuEdit(MenuItem): identifier = "RabbitVCS::Property_Edit" label = _("Edit details") icon = "rabbitvcs-editprops" tooltip = _("Show and edit property details") class MenuInitializeRepository(MenuItem): identifier = "RabbitVCS::Initialize_Repository" label = _("Initialize Repository") icon = "rabbitvcs-run" class MenuClone(MenuItem): identifier = "RabbitVCS::Clone" label = _("Clone") icon = "rabbitvcs-checkout" class MenuFetchPull(MenuItem): identifier = "RabbitVCS::Fetch_Pull" label = _("Fetch/Pull") icon = "rabbitvcs-update" class MenuPush(MenuItem): identifier = "RabbitVCS::Push" label = _("Push") icon = "rabbitvcs-push" class MenuBranches(MenuItem): identifier = "RabbitVCS::Branches" label = _("Branches") icon = "rabbitvcs-branch" class MenuTags(MenuItem): identifier = "RabbitVCS::Tags" label = _("Tags") icon = "rabbitvcs-branch" class MenuRemotes(MenuItem): identifier = "RabbitVCS::Remotes" label = _("Remotes") icon = "rabbitvcs-checkmods" class MenuClean(MenuCleanup): identifier = "RabbitVCS::Clean" label = _("Clean") class MenuReset(MenuItem): identifier = "RabbitVCS::Reset" label = _("Reset") icon = "rabbitvcs-reset" class MenuStage(MenuItem): identifier = "RabbitVCS::Stage" label = _("Stage") icon = "rabbitvcs-add" class MenuUnstage(MenuItem): identifier = "RabbitVCS::Unstage" label = _("Unstage") icon = "rabbitvcs-unstage" class MenuEditConflicts(MenuItem): identifier = "RabbitVCS::Edit_Conflicts" label = _("Edit conflicts") icon = "rabbitvcs-editconflicts" def get_ignore_list_items(paths): """ Build up a list of items to ignore based on the selected paths @param paths: The selected paths @type paths: list """ ignore_items = [] # Used to weed out duplicate menu items added_ignore_labels = [] # These are ignore-by-filename items ignorebyfilename_index = 0 for path in paths: basename = os.path.basename(path) if basename not in added_ignore_labels: key = "IgnoreByFileName%s" % str(ignorebyfilename_index) class MenuIgnoreFilenameClass(MenuItem): identifier = "RabbitVCS::%s" % key label = basename tooltip = _("Ignore item by filename") callback_name = "ignore_by_filename" callback_args = path condition_name = "ignore_by_filename" condition_args = path ignore_items.append((MenuIgnoreFilenameClass, None)) # These are ignore-by-extension items ignorebyfileext_index = 0 for path in paths: extension = helper.get_file_extension(path) ext_str = "*%s" % extension if ext_str not in added_ignore_labels: class MenuIgnoreFileExtClass(MenuItem): identifier = "RabbitVCS::%s" % key label = ext_str tooltip = _("Ignore item by file extension") callback_name = "ignore_by_file_extension" callback_args = (path, extension) condition_name = "ignore_by_file_extension" condition_args = (path, extension) ignore_items.append((MenuIgnoreFileExtClass, None)) return ignore_items class Action(object): def __init__(self, name, label, tooltip, icon_name): self.name = name self.label = label self.tooltip = tooltip self.icon_name = icon_name def __repr__(self): return self.get_name() def create_menu_item(self): item = Gtk.ImageMenuItem() if self.label: item.set_label(self.label) if self.tooltip: item.set_tooltip_text(self.tooltip) if self.icon_name: item.set_image( Gtk.Image.new_from_icon_name(self.icon_name, Gtk.IconSize.MENU) ) return item class RabbitVCSAction(Action): """ Sub-classes Action so that we can have submenus. This is needed for context menus that use Gtk actions """ __gtype_name__ = "RabbitVCSAction" def __init__(self, name, label, tooltip, icon_name): Action.__init__(self, name, label, tooltip, icon_name) self.sub_actions = None def set_sub_actions(self, sub_actions): self.sub_actions = sub_actions def create_menu_item(self): menu_item = super(RabbitVCSAction, self).create_menu_item() if self.sub_actions is not None: menu = Gtk.Menu() menu_item.set_submenu(menu) for sub_action in self.sub_actions: subitem = sub_action.create_menu_item() menu.append(subitem) subitem.show() return menu_item # FIXME: apparently it's possible to get real GtkSeparators in a Thunar # menu, but this doesn't seem to work. class ThunarSeparator(RabbitVCSAction): def create_menu_item(self): return Gtk.SeparatorMenuItem() rabbitvcs-0.19/rabbitvcs/util/contextmenuitems4.py000066400000000000000000000571031445560650400224460ustar00rootroot00000000000000from __future__ import absolute_import # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2010 by Jason Heeris # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path import os import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk from rabbitvcs.util import helper from rabbitvcs.util.strings import S from rabbitvcs import gettext _ = gettext.gettext from rabbitvcs.util.log import Log log = Log("rabbitvcs.ui.contextmenuitems") _ = gettext.gettext SEPARATOR = "\u2015" * 10 class MenuItem(object): """ This is the base class for a definition of a menu item. Consider this "abstract" (in the language of Java) - it makes no sense to instantiate it directly. If you want to define a new kind of menu item, you need to subclass it like so: class MenuPerformMagic(MenuItem): identifier = "RabbitVCS::Perform_Magic" label = _("Perform Magic") tooltip = _("Put on your robe and wizard hat") icon = "rabbitvcs-wand" There is some introspection magic that goes on to associate the items themselves with certain methods of a ContextMenuCondition object or a ContextMenuCallback object. This is done by looking at the identifier - the part of the identifier after "::" is converted to lowercase and the item looks for a method of that name (eg. in the example above, "perform_magic"). It is easy to override this, just define condition_name and callback_name to be what you need. If the item cannot find anything, it defaults to not assigning the callback and having the condition return False. There a few ways to organise this (and maybe it would be better to have the GtkContextMenu class do it), but this is it for the moment. """ @staticmethod def default_condition(*args, **kwargs): return False @staticmethod def make_default_name(identifier): return identifier.split(MenuItem.IDENTIFIER_SEPARATOR)[-1].lower() IDENTIFIER_SEPARATOR = "::" # These are all explicitly defined here to make it obvious what a subclass # needs to set up. # This is relevant for GTK and Nautilus - they require unique identifiers # for all the elements of their menus. Make sure it starts with # "RabbitVCS::" identifier = None # The label that appears on the menu item. It is up to the subclass to # designate it as translatable. label = None # The tooltip for the menu item. It is up to the subclass to designate it as # translatable. tooltip = "" # The icon that will appear on the menu item. This can be, say, # "rabbitvcs-something" icon = None # This is a string that holds the name of the function that is called when # the menu item is activated (it is assigned to # self.signals["activate"]["callback"]) # # The menu item will look for a callable attribute of this name in the # callback object passed in to the constructor. If it is None, it will try # to assign a default callback based on the identifier. If nothing is found # then no callback will be assigned to the "activate" signal. callback_name = None callback_args = () # This is a string that holds the name of the function that is called to # determine whether to show the item. # # The menu item will look for a callable attribute of this name in the # callback object passed in to the constructor. If it is None, or False, or # it cannot find anything, it will set up a function that returns False. condition_name = None condition_args = () def __init__(self, conditions, callbacks): """ Creates a new menu item for constructing the GTK context menu. """ self.signals = {} default_name = MenuItem.make_default_name(self.identifier) # These flags are used for sanity checks that developers can run to # ensure completeness of conditions and callbacks. # See contextmenu.TestMenuItemFunctions() self.found_callback = False self.found_condition = False # If no callback name is set, assign the default if self.callback_name is None: # log.debug("Using default callback name: %s" % default_name) self.callback_name = default_name # Try to get the callback function for this item self.callback = self._get_function(callbacks, self.callback_name) # else: # log.debug("Could not find callback for %s" % self.identifier) self.condition = { "callback": MenuItem.default_condition, "args": self.condition_args, } if self.condition_name is None: self.condition_name = default_name condition = self._get_function(conditions, self.condition_name) if condition: self.condition["callback"] = condition self.found_condition = True # else: # log.debug("Could not find condition for %s" % self.identifier) def show(self): return self.condition["callback"](*self.condition["args"]) def _get_function(self, object, name): function = None if hasattr(object, name): attr = getattr(object, name) if callable(attr): function = attr return function def make_magic_id(self, id_magic=None): identifier = self.identifier if id_magic: identifier = identifier + "-" + str(id_magic) return identifier def make_action(self, id_magic=None): """ Creates the Action for the menu item. To avoid GTK "helpfully" preventing us from adding duplicates (eg. separators), you can pass in a string that will be appended and separated from the actual identifier. """ identifier = self.make_magic_id(id_magic) return Action(identifier, self.make_label(), self.tooltip, self.icon) def make_thunarx_menu_item(self, id_magic=None): # WARNING: this import is here because it will fail if it is not done # inside a thunar process and therefore can't be in the module proper. # This should only be used for Thunarx-3 identifier = self.make_magic_id(id_magic) from gi.repository import Thunarx menuitem = Thunarx.MenuItem( name=identifier, label=self.make_label(), tooltip=self.tooltip, icon=self.icon, ) return menuitem def make_nautilus_menu_item(self, id_magic=None): # WARNING: this import is here because it will fail if it is not done # inside a nautilus process and therefore can't be in the module proper. # I'm happy to let the exception propagate the rest of the time, since # this method shouldn't be called outside of nautilus. identifier = self.make_magic_id(id_magic) try: from gi.repository import Nautilus menuitem = Nautilus.MenuItem( name=identifier, label=self.make_label(), tip=self.tooltip, icon=self.icon, ) except ImportError: import nautilus menuitem = nautilus.MenuItem( identifier, self.make_label(), self.tooltip, self.icon ) return menuitem def make_label(self): label = S(self.label).display().replace("_", "__") return label class MenuSeparator(MenuItem): identifier = "RabbitVCS::Separator" label = SEPARATOR def make_insensitive(self, menuitem): menuitem.set_property("sensitive", False) def make_thunar_action(self, id_magic=None): menuitem = super(MenuSeparator, self).make_thunar_action(id_magic) self.make_insensitive(menuitem) return menuitem # FIXME: I thought that this would work to create separators, # but all I get are black "-"s... # I thought # ~ identifier = self.make_magic_id(id_magic) # ~ # This information is not actually used, but is necessary for # ~ # the required subclassing of Action. # ~ action = ThunarSeparator( # ~ identifier, # ~ self.label, # ~ self.tooltip, # ~ self.icon, # ~ ) # ~ return action def make_nautilus_menu_item(self, id_magic=None): menuitem = super(MenuSeparator, self).make_nautilus_menu_item(id_magic) self.make_insensitive(menuitem) return menuitem class MenuDebug(MenuItem): identifier = "RabbitVCS::Debug" label = _("Debug") icon = "rabbitvcs-monkey" class MenuBugs(MenuItem): identifier = "RabbitVCS::Bugs" label = _("Bugs") icon = "rabbitvcs-bug" class MenuPythonConsole(MenuItem): identifier = "RabbitVCS::Python_Console" label = _("Open Python Console") icon = "gnome-terminal" condition_name = "debug" class MenuRefreshStatus(MenuItem): identifier = "RabbitVCS::Refresh_Status" label = _("Refresh Status") icon = "rabbitvcs-refresh" class MenuDebugRevert(MenuItem): identifier = "RabbitVCS::Debug_Revert" label = _("Debug Revert") tooltip = _("Reverts everything it sees") icon = "rabbitvcs-revert" condition_name = "debug" class MenuDebugInvalidate(MenuItem): identifier = "RabbitVCS::Debug_Invalidate" label = _("Invalidate") tooltip = _("Force an invalidate_extension_info() call") icon = "rabbitvcs-clear" condition_name = "debug" class MenuDebugAddEmblem(MenuItem): identifier = "RabbitVCS::Debug_Add_Emblem" label = _("Add Emblem") tooltip = _("Add an emblem") icon = "rabbitvcs-emblems" condition_name = "debug" class MenuCheckout(MenuItem): identifier = "RabbitVCS::Checkout" label = _("Checkout...") tooltip = _("Check out a working copy") icon = "rabbitvcs-checkout" class MenuUpdate(MenuItem): identifier = "RabbitVCS::Update" label = _("Update") tooltip = _("Update a working copy") icon = "rabbitvcs-update" class MenuCommit(MenuItem): identifier = "RabbitVCS::Commit" label = _("Commit") tooltip = _("Commit modifications to the repository") icon = "rabbitvcs-commit" class MenuRabbitVCS(MenuItem): identifier = "RabbitVCS::RabbitVCS" label = _("RabbitVCS") icon = "rabbitvcs" class MenuRabbitVCSSvn(MenuItem): identifier = "RabbitVCS::RabbitVCS_Svn" label = _("RabbitVCS SVN") icon = "rabbitvcs" class MenuRabbitVCSGit(MenuItem): identifier = "RabbitVCS::RabbitVCS_Git" label = _("RabbitVCS Git") icon = "rabbitvcs" class MenuRabbitVCSMercurial(MenuItem): identifier = "RabbitVCS::RabbitVCS_Mercurial" label = _("RabbitVCS Hg") icon = "rabbitvcs" class MenuRepoBrowser(MenuItem): identifier = "RabbitVCS::Repo_Browser" label = _("Repository Browser") tooltip = _("Browse a repository tree") icon = "edit-find" class MenuCheckForModifications(MenuItem): identifier = "RabbitVCS::Check_For_Modifications" label = _("Check for Modifications...") tooltip = _("Check for modifications made to the repository") icon = "rabbitvcs-checkmods" class MenuDiffMenu(MenuItem): identifier = "RabbitVCS::Diff_Menu" label = _("Diff Menu...") tooltip = _("List of comparison options") icon = "rabbitvcs-diff" class MenuDiff(MenuItem): identifier = "RabbitVCS::Diff" label = _("View diff against base") tooltip = _("View the modifications made to a file") icon = "rabbitvcs-diff" class MenuDiffMultiple(MenuItem): identifier = "RabbitVCS::Diff_Multiple" label = _("View diff between files/folders") tooltip = _("View the differences between two files") icon = "rabbitvcs-diff" class MenuDiffPrevRev(MenuItem): identifier = "RabbitVCS::Diff_Previous_Revision" label = _("View diff against previous revision") tooltip = _("View the modifications made to a file since its last change") icon = "rabbitvcs-diff" class MenuCompareTool(MenuItem): identifier = "RabbitVCS::Compare_Tool" label = _("Compare with base") tooltip = _("Compare with base using side-by-side comparison tool") icon = "rabbitvcs-compare" class MenuCompareToolMultiple(MenuItem): identifier = "RabbitVCS::Compare_Tool_Multiple" label = _("Compare files/folders") tooltip = _("Compare the differences between two items") icon = "rabbitvcs-compare" class MenuCompareToolPrevRev(MenuItem): identifier = "RabbitVCS::Compare_Tool_Previous_Revision" label = _("Compare with previous revision") tooltip = _("Compare with previous revision using side-by-side comparison tool") icon = "rabbitvcs-compare" class MenuShowChanges(MenuItem): identifier = "RabbitVCS::Show_Changes" label = _("Show Changes...") tooltip = _("Show changes between paths and revisions") icon = "rabbitvcs-changes" class MenuShowLog(MenuItem): identifier = "RabbitVCS::Show_Log" label = _("Show Log") tooltip = _("Show a file's log information") icon = "rabbitvcs-show_log" class MenuAdd(MenuItem): identifier = "RabbitVCS::Add" label = _("Add") tooltip = _("Schedule items to be added to the repository") icon = "rabbitvcs-add" class MenuAddToIgnoreList(MenuItem): identifier = "RabbitVCS::Add_To_Ignore_List" label = _("Add to ignore list") icon = None class MenuUpdateToRevision(MenuItem): identifier = "RabbitVCS::Update_To_Revision" label = _("Update to revision...") tooltip = _("Update a file to a specific revision") icon = "rabbitvcs-update" class MenuRename(MenuItem): identifier = "RabbitVCS::Rename" label = _("Rename...") tooltip = _("Schedule an item to be renamed on the repository") icon = "rabbitvcs-rename" class MenuDelete(MenuItem): identifier = "RabbitVCS::Delete" label = _("Delete") tooltip = _("Schedule an item to be deleted from the repository") icon = "rabbitvcs-delete" class MenuRevert(MenuItem): identifier = "RabbitVCS::Revert" label = _("Revert") tooltip = _("Revert an item to its unmodified state") icon = "rabbitvcs-revert" class MenuMarkResolved(MenuItem): identifier = "RabbitVCS::Mark_Resolved" label = _("Mark as Resolved") tooltip = _("Mark a conflicted item as resolved") icon = "rabbitvcs-resolve" class MenuRestore(MenuItem): identifier = "RabbitVCS::Restore" label = _("Restore") tooltip = _("Restore a missing item") class MenuRelocate(MenuItem): identifier = "RabbitVCS::Relocate" label = _("Relocate...") tooltip = _("Relocate your working copy") icon = "rabbitvcs-relocate" class MenuGetLock(MenuItem): identifier = "RabbitVCS::Get_Lock" label = _("Get Lock...") tooltip = _("Locally lock items") icon = "rabbitvcs-lock" class MenuUnlock(MenuItem): identifier = "RabbitVCS::Unlock" label = _("Release Lock...") tooltip = _("Release lock on an item") icon = "rabbitvcs-unlock" class MenuCleanup(MenuItem): identifier = "RabbitVCS::Cleanup" label = _("Cleanup") tooltip = _("Clean up working copy") icon = "rabbitvcs-cleanup" class MenuExport(MenuItem): identifier = "RabbitVCS::Export" label = _("Export...") tooltip = _("Export a working copy or repository with no versioning information") icon = "rabbitvcs-export" class MenuSVNExport(MenuExport): identifier = "RabbitVCS::SVN_Export" pass class MenuGitExport(MenuExport): identifier = "RabbitVCS::Git_Export" pass class MenuCreateRepository(MenuItem): identifier = "RabbitVCS::Create_Repository" label = _("Create Repository here") tooltip = _("Create a repository in a folder") icon = "rabbitvcs-run" class MenuImport(MenuItem): identifier = "RabbitVCS::Import" label = _("Import") tooltip = _("Import an item into a repository") icon = "rabbitvcs-import" # "import" is reserved condition_name = "_import" callback_name = "_import" class MenuBranchTag(MenuItem): identifier = "RabbitVCS::Branch_Tag" label = _("Branch/tag...") tooltip = _("Copy an item to another location in the repository") icon = "rabbitvcs-branch" class MenuSwitch(MenuItem): identifier = "RabbitVCS::Switch" label = _("Switch...") tooltip = _("Change the repository location of a working copy") icon = "rabbitvcs-switch" class MenuMerge(MenuItem): identifier = "RabbitVCS::Merge" label = _("Merge...") tooltip = _("A wizard with steps for merging") icon = "rabbitvcs-merge" class MenuAnnotate(MenuItem): identifier = "RabbitVCS::Annotate" label = _("Annotate...") tooltip = _("Annotate a file") icon = "rabbitvcs-annotate" class MenuCreatePatch(MenuItem): identifier = "RabbitVCS::Create_Patch" label = _("Create Patch...") tooltip = _("Creates a unified diff file with all changes you made") icon = "rabbitvcs-createpatch" class MenuApplyPatch(MenuItem): identifier = "RabbitVCS::Apply_Patch" label = _("Apply Patch...") tooltip = _("Applies a unified diff file to the working copy") icon = "rabbitvcs-applypatch" class MenuProperties(MenuItem): identifier = "RabbitVCS::Properties" label = _("Properties") tooltip = _("View the properties of an item") icon = "rabbitvcs-properties" class MenuHelp(MenuItem): identifier = "RabbitVCS::Help" label = _("Help") tooltip = _("View help") icon = "rabbitvcs-help" class MenuSettings(MenuItem): identifier = "RabbitVCS::Settings" label = _("Settings") tooltip = _("View or change RabbitVCS settings") icon = "rabbitvcs-settings" class MenuAbout(MenuItem): identifier = "RabbitVCS::About" label = _("About") tooltip = _("About RabbitVCS") icon = "rabbitvcs-about" class MenuOpen(MenuItem): identifier = "RabbitVCS::Open" label = _("Open") tooltip = _("Open a file") icon = "document-open" # Not sure why, but it was like this before... condition_name = "_open" callback_name = "_open" class MenuBrowseTo(MenuItem): identifier = "RabbitVCS::Browse_To" label = _("Browse to") tooltip = _("Browse to a file or folder") icon = "drive-harddisk" class PropMenuRevert(MenuItem): identifier = "RabbitVCS::Property_Revert" label = _("Revert property") icon = "rabbitvcs-revert" tooltip = _("Revert this property to its original state") class PropMenuRevertRecursive(MenuItem): identifier = "RabbitVCS::Property_Revert_Recursive" label = _("Revert property (recursive)") icon = "rabbitvcs-revert" tooltip = _("Revert this property to its original state (recursive)") condition_name = "property_revert" class PropMenuDelete(MenuItem): identifier = "RabbitVCS::Property_Delete" label = _("Delete property") icon = "rabbitvcs-delete" tooltip = _("Delete this property") class PropMenuDeleteRecursive(MenuItem): identifier = "RabbitVCS::Property_Delete_Recursive" label = _("Delete property (recursive)") icon = "rabbitvcs-delete" tooltip = _("Delete this property (recursive)") condition_name = "property_delete" class PropMenuEdit(MenuItem): identifier = "RabbitVCS::Property_Edit" label = _("Edit details") icon = "rabbitvcs-editprops" tooltip = _("Show and edit property details") class MenuInitializeRepository(MenuItem): identifier = "RabbitVCS::Initialize_Repository" label = _("Initialize Repository") icon = "rabbitvcs-run" class MenuClone(MenuItem): identifier = "RabbitVCS::Clone" label = _("Clone") icon = "rabbitvcs-checkout" class MenuFetchPull(MenuItem): identifier = "RabbitVCS::Fetch_Pull" label = _("Fetch/Pull") icon = "rabbitvcs-update" class MenuPush(MenuItem): identifier = "RabbitVCS::Push" label = _("Push") icon = "rabbitvcs-push" class MenuBranches(MenuItem): identifier = "RabbitVCS::Branches" label = _("Branches") icon = "rabbitvcs-branch" class MenuTags(MenuItem): identifier = "RabbitVCS::Tags" label = _("Tags") icon = "rabbitvcs-branch" class MenuRemotes(MenuItem): identifier = "RabbitVCS::Remotes" label = _("Remotes") icon = "rabbitvcs-checkmods" class MenuClean(MenuCleanup): identifier = "RabbitVCS::Clean" label = _("Clean") class MenuReset(MenuItem): identifier = "RabbitVCS::Reset" label = _("Reset") icon = "rabbitvcs-reset" class MenuStage(MenuItem): identifier = "RabbitVCS::Stage" label = _("Stage") icon = "rabbitvcs-add" class MenuUnstage(MenuItem): identifier = "RabbitVCS::Unstage" label = _("Unstage") icon = "rabbitvcs-unstage" class MenuEditConflicts(MenuItem): identifier = "RabbitVCS::Edit_Conflicts" label = _("Edit conflicts") icon = "rabbitvcs-editconflicts" def get_ignore_list_items(paths): """ Build up a list of items to ignore based on the selected paths @param paths: The selected paths @type paths: list """ ignore_items = [] # Used to weed out duplicate menu items added_ignore_labels = [] # These are ignore-by-filename items ignorebyfilename_index = 0 for path in paths: basename = os.path.basename(path) if basename not in added_ignore_labels: key = "IgnoreByFileName%s" % str(ignorebyfilename_index) class MenuIgnoreFilenameClass(MenuItem): identifier = "RabbitVCS::%s" % key label = basename tooltip = _("Ignore item by filename") callback_name = "ignore_by_filename" callback_args = path condition_name = "ignore_by_filename" condition_args = path ignore_items.append((MenuIgnoreFilenameClass, None)) # These are ignore-by-extension items ignorebyfileext_index = 0 for path in paths: extension = helper.get_file_extension(path) ext_str = "*%s" % extension if ext_str not in added_ignore_labels: class MenuIgnoreFileExtClass(MenuItem): identifier = "RabbitVCS::%s" % key label = ext_str tooltip = _("Ignore item by file extension") callback_name = "ignore_by_file_extension" callback_args = (path, extension) condition_name = "ignore_by_file_extension" condition_args = (path, extension) ignore_items.append((MenuIgnoreFileExtClass, None)) return ignore_items class Action(object): def __init__(self, name, label, tooltip, icon_name): self.name = name self.label = label self.tooltip = tooltip self.icon_name = icon_name def __repr__(self): return self.get_name() def create_menu_item(self): item = Gtk.ImageMenuItem() if self.label: item.set_label(self.label) if self.tooltip: item.set_tooltip_text(self.tooltip) if self.icon_name: item.set_image( Gtk.Image.new_from_icon_name(self.icon_name, Gtk.IconSize.MENU) ) return item rabbitvcs-0.19/rabbitvcs/util/decorators.py000066400000000000000000000124401445560650400211070ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Simple decorators (usable in Python >= 2.4). Decorators should be named as verbs (present or paste tense). See: - https://linkchecker.svn.sourceforge.net/svnroot/linkchecker/trunk/linkchecker/linkcheck/decorators.py - http://wiki.python.org/moin/PythonDecoratorLibrary """ from __future__ import absolute_import import os from gi.repository import GLib import time import warnings import threading from rabbitvcs.util.log import Log log = Log("rabbitvcs.util.decorators") def update_func_meta(fake_func, real_func): """ Set meta information (eg. __doc__) of fake function to that of the real function. @rtype: function @return Fake function with metadata of the real function. """ fake_func.__module__ = real_func.__module__ fake_func.__name__ = real_func.__name__ fake_func.__doc__ = real_func.__doc__ fake_func.__dict__.update(real_func.__dict__) return fake_func def deprecated(func): """ A decorator which can be used to mark functions as deprecated. It emits a warning when the function is called. @type func: function @param func: The function to be designated as deprecated. """ def newfunc(*args, **kwargs): """ Print deprecated warning and execute original function. """ warnings.warn( "Call to deprecated function %s." % func.__name__, category=DeprecationWarning, ) return func(*args, **kwargs) return update_func_meta(newfunc, func) def timeit(func): """ This is a decorator which times a function and prints the time it took in milliseconds to stdout. Based on the timeit function from LinkChecker. @type func: function @param func: The function to be timed. """ def newfunc(*args, **kwargs): """Execute function and print execution time.""" start_time = time.time() result = func(*args, **kwargs) duration = (time.time() - start_time) * 1000.0 log.info("%s() took %0.4f milliseconds" % (func.__name__, duration)) return result return update_func_meta(newfunc, func) def disable(func): """ Disable a function. @type func: function @param func: The function to be disabled. """ def newfunc(*args, **kwargs): return return update_func_meta(newfunc, func) def gtk_unsafe(func): """ Used to wrap a function that makes calls to GTK from a thread in the main thread's idle loop. """ from rabbitvcs.util import helper def newfunc(*args, **kwargs): return helper.run_in_main_thread(func, *args, **kwargs) return update_func_meta(newfunc, func) def debug_calls(caller_log, show_caller=False): """ Given a log to write messages to, wrap a function and log its invocation and return. Use like: @debug_calls(my_modules_log) def actual_function(...): ... Warning: do not use with DBUS decorated methods, as this will play havoc with introspection. """ # We need a function within a function to be able to use the log argument. def real_debug(func): def newfunc(*args, **kwargs): caller_log.debug( "Calling: %s (%s)" % (func.__name__, threading.currentThread().getName()) ) result = func(*args, **kwargs) caller_log.debug( "Returned: %s (%s)" % (func.__name__, threading.currentThread().getName()) ) return result return update_func_meta(newfunc, func) return real_debug def structure_map(func): """ Descend recursively into object if it is a list, a tuple, a set or a dict and build the equivalent structure with func results. Do not apply function to None. """ def newfunc(obj, *args, **kwargs): if obj is None: return obj if isinstance(obj, list): return [newfunc(item, *args, **kwargs) for item in obj] if isinstance(obj, tuple): return tuple(newfunc(item, *args, **kwargs) for item in obj) if isinstance(obj, set): return {newfunc(item, *args, **kwargs) for item in obj} if isinstance(obj, dict): return {key: newfunc(obj[key], *args, **kwargs) for key in obj} return func(obj, *args, **kwargs) return update_func_meta(newfunc, func) rabbitvcs-0.19/rabbitvcs/util/helper.py000066400000000000000000001044041445560650400202230ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ All sorts of helper functions. """ from __future__ import absolute_import from collections import deque import locale import os import os.path import sys import subprocess import re import datetime import time import shutil import hashlib import threading import codecs from gi.repository import GLib import six from six.moves import filter from six.moves import range import six.moves.urllib.parse import rabbitvcs.util.settings from rabbitvcs.util.decorators import structure_map from rabbitvcs.util.strings import * from rabbitvcs.util.log import Log log = Log("rabbitvcs.util.helper") from rabbitvcs import gettext ngettext = gettext.ngettext try: from html import escape as html_escape except ImportError: from cgi import escape as html_escape import gi from gi.repository import GObject from rabbitvcs import gettext _ = gettext.gettext LOG_DATETIME_FORMAT = "%Y-%m-%d %H:%M" # for log files DT_FORMAT_TIME = _("%I:%M%P") DT_FORMAT_THISWEEK = _("%a %I:%M%p") DT_FORMAT_THISYEAR = _("%b %d") DT_FORMAT_ALL = _("%b %d %Y") LINE_BREAK_CHAR = six.unichr(0x23CE) def compare_version(version1, version2, length=None): if not length: length = max(len(version1), len(version2)) for i in range(length): x = int(version1[i]) if i in version1 else 0 y = int(version2[i]) if i in version2 else 0 r = x - y if r: return r return 0 def gobject_threads_init(): """ Call GObject.threads_init() only if not deprecated. """ if compare_version(GObject.pygobject_version, [3, 10, 2]) < 0: GObject.threads_init() @structure_map def to_bytes(s, encoding=UTF8_ENCODING): """ Convert string (whatever type it is) to bytes in the given encoding. """ if isinstance(s, six.text_type): return S(s).bytes(encoding) if isinstance(s, bytearray): if encoding.lower() == UTF8_ENCODING: return s return bytearray(S(s).bytes(encoding)) if isinstance(s, bytes) and encoding.lower() != UTF8_ENCODING: return S(s).bytes(encoding) return s def run_in_main_thread(func, *args, **kwargs): """ Execute function in main thread's idle loop. """ def dofunc(event, func, args, kwargs): try: event.result = func(*args, **kwargs) except Exception as e: event.exception = e event.set() if isinstance(threading.current_thread(), threading._MainThread): return func(*args, **kwargs) event = threading.Event() event.result = None event.exception = None GLib.idle_add(dofunc, event, func, args, kwargs) event.wait() if event.exception: raise event.exception return event.result def get_tmp_path(filename): day = datetime.datetime.now().day day_string = S(str(day) + str(os.geteuid())).bytes() m = hashlib.md5(day_string).hexdigest()[0:10] tmpdir = "/tmp/rabbitvcs-%s" % m if not os.path.isdir(tmpdir): os.mkdir(tmpdir) return "%s/%s" % (tmpdir, filename) def process_memory(pid): # ps -p 5205 -w -w -o rss --no-headers psproc = subprocess.Popen( [ "ps", "-p", str(pid), "-w", "-w", # Extra-wide format "-o", "size", # "Size" is probably the best all round # memory measure. "--no-headers", ], stdout=subprocess.PIPE, ) (output, stdin) = psproc.communicate() mem_in_kb = 0 try: mem_in_kb = int(output) except ValueError: pass # log.debug("Memory for %i: %i" % (pid, mem_in_kb)) return mem_in_kb def format_long_text(text, cols=None, line1only=False): """Nicely formats text containing linebreaks to display in a single line by replacing newlines with U+23CE, or keeping only the first non-empty line. If the param "cols" is given, the text beyond cols is replaced by "...". """ text = S(text.strip()).unicode().replace(six.u("\n"), LINE_BREAK_CHAR) if line1only: i = text.find(LINE_BREAK_CHAR) if i >= 0: text = text[:i] if cols and len(text) > cols: text = six.u("%s...") % text[0:cols] return text def format_datetime(dt, format=None): if format: return S(dt.strftime(format), None).unicode() now = datetime.datetime.now() delta = now - dt returner = "" if dt.year == 1900: returner = _("(no date)") else: if delta.days == 0: if delta.seconds < 60: returner = _("just now") elif delta.seconds >= 60 and delta.seconds < 600: returner = _("%d minute(s) ago") % (delta.seconds / 60) elif delta.seconds >= 600 and delta.seconds < 43200: returner = dt.strftime(DT_FORMAT_TIME) else: returner = dt.strftime(DT_FORMAT_THISWEEK) elif delta.days > 0 and delta.days < 7: returner = dt.strftime(DT_FORMAT_THISWEEK) elif delta.days >= 7 and delta.days < 365: returner = dt.strftime(DT_FORMAT_THISYEAR) else: returner = dt.strftime(DT_FORMAT_ALL) return S(returner).unicode() def in_rich_compare(item, list): """Tests whether the item is in the given list. This is mainly to work around the rich-compare bug in pysvn. This is not identical to the "in" operator when used for substring testing. """ in_list = False if list is not None: for thing in list: try: in_list = item == thing except AttributeError as e: pass return in_list # FIXME: this function is duplicated in settings.py def get_home_folder(): """ Returns the location of the hidden folder we use in the home dir. This is used for storing things like previous commit messages and peviously used repositories. @rtype: string @return: The location of our main user storage folder. """ # Make sure we adher to the freedesktop.org XDG Base Directory # Specifications. $XDG_CONFIG_HOME if set, by default ~/.config xdg_config_home = os.environ.get( "XDG_CONFIG_HOME", os.path.join(os.path.expanduser("~"), ".config") ) config_home = os.path.join(xdg_config_home, "rabbitvcs") # Make sure the directories are there if not os.path.isdir(config_home): # FIXME: what if somebody places a file in there? os.makedirs(config_home, 0o700) return config_home def get_user_path(): """ Returns the location of the user's home directory. /home/$USER @rtype: string @return: The location of the user's home directory. """ return os.path.abspath(os.path.expanduser("~")) def get_repository_paths_path(): """ Returns a valid URI for the repository paths file @rtype: string @return: The location of the repository paths file. """ return os.path.join(get_home_folder(), "repos_paths") def get_repository_paths(): """ Gets all previous repository paths stored in the user's home folder @rtype: list @return: A list of previously used repository paths. """ returner = [] paths_file = get_repository_paths_path() if os.path.exists(paths_file): returner = [x.strip() for x in open(paths_file, "r").readlines()] return returner def get_previous_messages_path(): """ Returns a valid URI for the previous messages file @rtype: string @return: The location of the previous messages file. """ return os.path.join(get_home_folder(), "previous_log_messages") def get_previous_messages(): """ Gets all previous messages stored in the user's home folder @rtype: list @return: A list of previous used messages. """ path = get_previous_messages_path() if not os.path.exists(path): return lines = open(path, "r").readlines() cur_entry = "" returner = [] date = None msg = "" regex = re.compile(r"-- ([\d\-]+ [\d\:]+) --") for line in lines: m = regex.match(line) if m: cur_entry = m.groups()[0] if date: returner.append((date, msg.rstrip())) msg = "" date = cur_entry else: msg += line if date and msg: returner.append((date, msg.rstrip())) returner.reverse() return returner def get_exclude_paths_path(): return os.path.join(get_home_folder(), "exclude_paths") def get_exclude_paths(): path = get_exclude_paths_path() if not os.path.exists(path): return [] f = open(path, "r") paths = [] for l in f: paths.append(l.strip()) f.close() return paths def encode_revisions(revision_array): """ Takes a list of integer revision numbers and converts to a TortoiseSVN-like format. This means we have to determine what numbers are consecutives and collapse them into a single element (see doctest below for an example). @type revision_array: list of integers @param revision_array: A list of revision numbers. @rtype: string @return A string of revision numbers in TortoiseSVN-like format. >>> encode_revisions([4,5,7,9,10,11,12]) '4-5,7,9-12' >>> encode_revisions([]) '' >>> encode_revisions([1]) '1' """ # Let's get a couple of cases out of the way if len(revision_array) == 0: return "" if len(revision_array) == 1: return str(revision_array[0]) # Instead of repeating a set of statements we'll just define them as an # inner function. def append(start, last, list): if start == last: result = "%s" % start else: result = "%s-%s" % (start, last) list.append(result) # We need a couple of variables outside of the loop start = revision_array[0] last = revision_array[0] current_position = 0 returner = [] while True: if current_position + 1 >= len(revision_array): append(start, last, returner) break current = revision_array[current_position] next = revision_array[current_position + 1] if not current + 1 == next: append(start, last, returner) start = next last = next last = next current_position += 1 return ",".join(returner) def decode_revisions(string, head): """ Takes a TortoiseSVN-like revision string and returns a list of integers. EX. 4-5,7,9-12 -> [4,5,7,9,10,11,12] TODO: This function is a first draft. It may not be production-worthy. """ returner = [] arr = string.split(",") for el in arr: if el.find("-") != -1: subarr = el.split("-") if subarr[1] == "HEAD": subarr[1] = head for subel in range(int(subarr[0]), int(subarr[1]) + 1): returner.append(subel) else: returner.append(int(el)) return returner def get_diff_tool(): """ Gets the path to the diff_tool, and whether or not to swap lhs/rhs. @rtype: dictionary @return: A dictionary with the diff tool path and swap boolean value. """ sm = rabbitvcs.util.settings.SettingsManager() diff_tool = sm.get("external", "diff_tool") diff_tool_swap = sm.get("external", "diff_tool_swap") return {"path": diff_tool, "swap": diff_tool_swap} def get_merge_tool(): """ Gets the path to the merge_tool. @rtype: string @return: A string with the path and arguments to launch the merge tool. """ sm = rabbitvcs.util.settings.SettingsManager() return sm.get("external", "merge_tool") def launch_diff_tool(path1, path2=None): """ Launches the diff tool of choice. 1. Generate a standard diff between the path and the latest revision. 2. Write the diff text to a tmp file 3. Copy the given file (path) to the tmp directory 4. Do a reverse patch to get a version of the file that is in the repo. 5. Now you have two files and you can send them to the diff tool. @type paths: list @param paths: Paths to the given files """ diff = get_diff_tool() if diff["path"] == "": return if not os.path.exists(diff["path"]): return # If path2 is set, that means we are comparing one file/folder to another if path2 is not None: (lhs, rhs) = (path1, path2) else: tmp_path = get_tmp_path(os.path.split(path1)[-1]) os.popen( "svn export --force -r BASE '%s' '%s'" % (path1, os.path.dirname(tmp_path)) ) (lhs, rhs) = (tmp_path, path1) if diff["swap"]: (lhs, rhs) = (rhs, lhs) os.spawnl(os.P_NOWAIT, diff["path"], diff["path"], lhs, rhs) def launch_merge_tool(base="", mine="", theirs="", merged=""): merge_tool = get_merge_tool() if ( mine == None or mine == "" or not os.path.exists(mine) or theirs == None or theirs == "" or not os.path.exists(theirs) ): return if "%base" in merge_tool: merge_tool = merge_tool.replace("%base", base) if "%mine" in merge_tool: merge_tool = merge_tool.replace("%mine", mine) if "%theirs" in merge_tool: merge_tool = merge_tool.replace("%theirs", theirs) if "%merged" in merge_tool: merge_tool = merge_tool.replace("%merged", merged) log.debug("merge_tool: %s" % merge_tool) os.popen(merge_tool) def get_file_extension(path): """ Wrapper that retrieves a file path's extension. @type path: string @param path: A filename or path. @rtype: string @return: A file extension. """ return os.path.splitext(path)[1] def open_item(path): """ Use GNOME default opener to handle file opening. @type path: string @param path: A file path. """ if path == "" or path is None: return openers = [] import platform if platform.system() == "Darwin": openers.append("open") subprocess.Popen(["open", os.path.abspath(path)]) else: openers.append("gio") openers.append("gvfs-open") openers.append("xdg-open") for o in openers: for p in set(os.environ["PATH"].split(":")): if os.path.exists("%s/%s" % (p, o)): command = [o] if o == "gio": command.append("open") command.append(os.path.abspath(path)) subprocess.Popen(command) return def browse_to_item(path): """ Browse to the specified path in the file manager @type path: string @param path: A file path. """ import platform if platform.system() == "Darwin": subprocess.Popen(["open", "--reveal", os.path.dirname(os.path.abspath(path))]) else: subprocess.Popen( [ "nautilus", "--no-desktop", "--browser", os.path.dirname(os.path.abspath(path)), ] ) def delete_item(path): """ Send an item to the trash. @type path: string @param path: A file path. """ abspath = os.path.abspath(path) permanent_delete = False try: import platform if platform.system() == "Darwin": retcode = subprocess.call(["mv", abspath, os.getenv("HOME") + "/.Trash"]) if retcode: permanent_delete = True else: # If the gvfs-trash program is not found, an OSError exception will # be thrown, and rm will be used instead retcode = subprocess.call(["gio trash", abspath]) if retcode: permanent_delete = True except OSError: permanent_delete = True if permanent_delete: if os.path.isdir(abspath): shutil.rmtree(abspath, True) else: os.remove(abspath) def save_log_message(message): """ Saves a log message to the user's home folder for later usage @type message: string @param message: A log message. """ messages = [] path = get_previous_messages_path() if os.path.exists(path): limit = get_log_messages_limit() messages = get_previous_messages() # If the current message already exists, delete the old one # The new one will take it's place at the top tmp = [] for i, m in enumerate(messages): if message != m[1]: tmp.append(m) messages = tmp # Don't allow the number of messages to pile up past the limit while len(messages) > limit: messages.pop() t = time.strftime(LOG_DATETIME_FORMAT) messages.insert(0, (t, message)) f = open(get_previous_messages_path(), "w") s = "" for m in messages: s = """\ -- %s -- %s %s """ % ( m[0], m[1], s, ) f.write(s) f.close() def save_repository_path(path): """ Saves a repository path to the user's home folder for later usage If the given path has already been saved, remove the old one from the list and append the new one to the end. @type path: string @param path: A repository path. """ paths = get_repository_paths() if path in paths: paths.pop(paths.index(path)) paths.insert(0, path) limit = get_repository_paths_limit() while len(paths) > limit: paths.pop() f = open(get_repository_paths_path(), "w") f.write(S("\n".join(paths))) f.close() def launch_ui_window(filename, args=[], block=False): """ Launches a UI window in a new process, so that we don't have to worry about nautilus and threading. @type filename: string @param filename: The filename of the window, without the extension @type args: list @param args: A list of arguments to be passed to the window. @rtype: integer @return: The pid of the process (if launched) """ # Hackish. Get's the helper module's path, then assumes it is in # the lib folder. Removes the /lib part of the path. basedir, head = os.path.split(os.path.dirname(os.path.realpath(__file__))) if not head == "util": log.warning('Helper module (%s) not in "util" dir' % __file__) # Puts the whole path together. # path = "%s/ui/%s.py" % (basedir, filename) path = os.path.join(basedir, "ui", filename + ".py") if os.path.exists(path): executable = sys.executable if "PYTHON" in list(os.environ.keys()): executable = os.environ["PYTHON"] # Give all subprocesses the name 'RabbitVCS' to give Ubuntu desktop files the possibility # to group those windows in the launcher on WM_CLASS. proc = subprocess.Popen([executable, path] + ["--name", "RabbitVCS"] + args) if block: proc.wait() return proc else: return None def get_log_messages_limit(): sm = rabbitvcs.util.settings.SettingsManager() return int(sm.get("cache", "number_messages")) def get_repository_paths_limit(): sm = rabbitvcs.util.settings.SettingsManager() return int(sm.get("cache", "number_repositories")) def get_common_directory(paths): common = os.path.commonprefix(abspaths(paths)) while not os.path.exists(common) or os.path.isfile(common): common = os.path.split(common)[0] if common == "": break return common def abspaths(paths): index = 0 for path in paths: paths[index] = os.path.realpath(os.path.abspath(path)) index += 1 return paths def pretty_timedelta(time1, time2, resolution=None): """ Calculate time delta between two C{datetime} objects. (the result is somewhat imprecise, only use for prettyprinting). Was originally based on the function pretty_timedelta from: http://trac.edgewall.org/browser/trunk/trac/util/datefmt.py """ if time1 > time2: time2, time1 = time1, time2 diff = time2 - time1 age_s = int(diff.days * 86400 + diff.seconds) if resolution and age_s < resolution: return "" # I do not see a way to make this less repetitive - to make the # strings fully translatable (i.e. also for languages that have more # or less than two plural forms) we have to state all the strings # explicitely within an ngettext call if age_s <= 60 * 1.9: return ngettext("%i second", "%i seconds", age_s) % age_s elif age_s <= 3600 * 1.9: r = age_s / 60 return ngettext("%i minute", "%i minutes", r) % r elif age_s <= 3600 * 24 * 1.9: r = age_s / 3600 return ngettext("%i hour", "%i hours", r) % r elif age_s <= 3600 * 24 * 7 * 1.9: r = age_s / (3600 * 24) return ngettext("%i day", "%i days", r) % r elif age_s <= 3600 * 24 * 30 * 1.9: r = age_s / (3600 * 24 * 7) return ngettext("%i week", "%i weeks", r) % r elif age_s <= 3600 * 24 * 365 * 1.9: r = age_s / (3600 * 24 * 30) return ngettext("%i month", "%i months", r) % r else: r = age_s / (3600 * 24 * 365) return ngettext("%i year", "%i years", r) % r def utc_offset(timestamp=None): """ Compute the UTC offset of current locale for a timestamp in a portable way, taking care of daylight saving. Positive is east of Greenwich. Result in seconds. If no timestamp is given, the current time is used. """ if timestamp is None: timestamp = time.time() timestamp = int(timestamp) utc = datetime.datetime.utcfromtimestamp(timestamp) local = datetime.datetime.fromtimestamp(timestamp) return int((local - utc).total_seconds()) def _commonpath(l1, l2, common=[]): """ Helper method for the get_relative_path method """ if len(l1) < 1: return (common, l1, l2) if len(l2) < 1: return (common, l1, l2) if l1[0] != l2[0]: return (common, l1, l2) return _commonpath(l1[1:], l2[1:], common + [l1[0]]) def get_relative_path(from_path, to_path): """ Method that returns the relative path between the specified paths """ nice_path1 = from_path.rstrip(os.path.sep).split(os.path.sep) nice_path2 = to_path.rstrip(os.path.sep).split(os.path.sep) (common, l1, l2) = _commonpath(nice_path1, nice_path2) p = [] if len(l1) > 0: p = [".."] * len(l1) p = p + l2 return os.sep.join(p) def launch_repo_browser(uri): sm = rabbitvcs.util.settings.SettingsManager() repo_browser = sm.get("external", "repo_browser") if repo_browser is not None: subprocess.Popen([repo_browser, uri]) def launch_url_in_webbrowser(url): import webbrowser webbrowser.open(url) def parse_path_revision_string(pathrev): index = pathrev.rfind("@") if index == -1: return (pathrev, None) else: return (pathrev[0:index], pathrev[index + 1 :]) def create_path_revision_string(path, revision=None): if revision: return path + "@" + str(revision) else: return path def url_join(path, *args): return "/".join([path.rstrip("/")] + list(args)) def _quote(text): return six.moves.urllib.parse.quote( text, encoding=UTF8_ENCODING, errors=SURROGATE_ESCAPE ) def _quote_plus(text): return six.moves.urllib.parse.quote_plus( text, encoding=UTF8_ENCODING, errors=SURROGATE_ESCAPE ) def _unquote(text): return six.moves.urllib.parse.unquote( text, encoding=UTF8_ENCODING, errors=SURROGATE_ESCAPE ) def _unquote_plus(text): return six.moves.urllib.parse.unquote_plus( text, encoding=UTF8_ENCODING, errors=SURROGATE_ESCAPE ) quote = _quote quote_plus = _quote_plus unquote = _unquote unquote_plus = _unquote_plus try: unquote("") except TypeError: quote = six.moves.urllib.parse.quote quote_plus = six.moves.urllib.parse.quote_plus unquote = six.moves.urllib.parse.unquote unquote_plus = six.moves.urllib.parse.unquote_plus def quote_url(url_text): (scheme, netloc, path, params, query, fragment) = six.moves.urllib.parse.urlparse( url_text ) # netloc_quoted = quote(netloc) path_quoted = quote(path) params_quoted = quote(query) query_quoted = quote_plus(query) fragment_quoted = quote(fragment) url_quoted = six.moves.urllib.parse.urlunparse( (scheme, netloc, path_quoted, params_quoted, query_quoted, fragment_quoted) ) return url_quoted def unquote_url(url_text): (scheme, netloc, path, params, query, fragment) = six.moves.urllib.parse.urlparse( url_text ) # netloc_unquoted = unquote(netloc) path_unquoted = unquote(path) params_unquoted = unquote(query) query_unquoted = unquote_plus(query) fragment_unquoted = unquote(fragment) url_unquoted = six.moves.urllib.parse.urlunparse( ( scheme, netloc, path_unquoted, params_unquoted, query_unquoted, fragment_unquoted, ) ) return url_unquoted def pretty_filesize(bytes): if bytes >= 1073741824: return str(int(bytes / 1073741824)) + " GB" elif bytes >= 1048576: return str(int(bytes / 1048576)) + " MB" elif bytes >= 1024: return str(int(bytes / 1024)) + " KB" elif bytes < 1024: return str(bytes) + " bytes" def get_node_kind(path): if os.path.exists(path): if os.path.isfile(path): return "file" else: return "dir" return "none" def walk_tree_depth_first( tree, show_levels=False, preprocess=None, filter=None, start=None ): """ A non-recursive generator function that walks through a tree (and all children) yielding results. The tree should be of the form: [(NodeOne, None), (NodeTwo, [(Node2A, None), (Node2B, None), (Node2C, [(Node2C1, None), etc] ] (NodeThree, None), etc...] If show_levels is True, the values returned are (level, value) where level is zero for the top level items in the tree. Otherwise, just "value" is returned. If a callable "preprocess" is supplied, it is applied BEFORE the filter, as each element is encountered. If a callable "filter" is supplied, it is applied to whatever "preprocess" returned, and if it returns False for an item, the item and its children will be skipped. If "start" is given, the walk will be applied only to that node and its children. No preprocessing or filtering will be applied to other elements. """ annotated_tree = [(0, element) for element in tree] to_process = deque(annotated_tree) # If we're not given a starting point, the top is the start found_starting_point = not start while to_process: (level, (node, children)) = to_process.popleft() if not found_starting_point and (node == start): # If we're given a starting point and we've found it, clear the list # and start from here found_starting_point = True level = 0 to_process.clear() # This should NOT be an else case, since we may have just set this flag # to "True" above. if found_starting_point: if preprocess: value = preprocess(node) else: value = node if filter and not filter(value): continue if show_levels: yield (level, value) else: yield value if children: annotated_children = [(level + 1, child) for child in children] annotated_children.reverse() to_process.extendleft(annotated_children) def urlize(path): if path.startswith("/"): return "file://%s" % path return path def parse_patch_output(patch_file, base_dir, strip=0): """Runs the GNU 'patch' utility, parsing the output. This is actually a generator which yields values as each section of the patch is applied. @param patch_file: the location of the patch file @type patch_file: string @param base_dir: the directory in which to apply the patch @type base_dir: string @return: a generator yielding tuples (filename, success, reject_file). "filename" is never None, and should always exist. "success" is True iff the patch executed without any error messages. "reject_file" may be None, but if it exists is the location of rejected "hunks". It's like a bad reality TV dating show. """ PATCHING_RE = re.compile(r"patching file (.*)") REJECT_RE = re.compile(r".*saving rejects to file (.*)") # PATCH flags... # -N: always assume forward diff # -t: batch mode: # skip patches whose headers do not contain file # names (the same as -f); skip patches for which # the file has the wrong version for the Prereq: # line in the patch; and assume that patches are # reversed if they look like they are. env = os.environ.copy().update({"LC_ALL": "C"}) p = "-p%s" % strip patch_proc = subprocess.Popen( ["patch", "-N", "-t", p, "-i", str(patch_file), "--directory", base_dir], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env, ) # Intialise things... out = codecs.getreader(UTF8_ENCODING)(patch_proc.stdout, SURROGATE_ESCAPE) line = out.readline() patch_match = PATCHING_RE.match(line) current_file = None if patch_match: current_file = patch_match.group(1) elif line: # and not patch_match # There was output, but unexpected. Almost certainly an error of some # sort. patch_proc.wait() output = line + out.read() raise rabbitvcs.vcs.ExternalUtilError("patch", output) # Note the excluded case: empty line. This falls through, skips the loop # and returns. any_errors = False reject_file = None while current_file: line = out.readline().rstrip(" \t\r\n") while not line and patch_proc.poll() is None: line = out.readline().rstrip(" \t\r\n") # Does patch tell us we're starting a new file? patch_match = PATCHING_RE.match(line) # Starting a new file => that's it for the last one, so return the value # No line => End of patch output => ditto if patch_match or not line: yield (current_file, not any_errors, reject_file) if not line: # That's it from patch, so end the generator break # Starting a new file... current_file = patch_match.group(1) any_errors = False reject_file = None else: # Doesn't matter why we're here, anything else means ERROR any_errors = True reject_match = REJECT_RE.match(line) if reject_match: # Have current file, getting reject file info reject_file = reject_match.group(1) # else: we have an unknown error patch_proc.wait() # Don't leave process running... return def HSLtoRGB(h, s, l): """ Convert a color from the HSL space to RGB. @type h: (int, float) @param h: Hue in degrees. @type s: float @param s: Saturation in range 0.0 to 1.0 @type l: float @param l: Luminance in range 0.0 to 1.0 """ if not 0.0 <= s <= 1.0: raise ValueError("Saturation should be >= 0.0 and <= 1.0") if not 0.0 <= l <= 1.0: raise ValueError("Luminance should be >= 0.0 and <= 1.0") if s == 0.0: return (0, 0, 0) sextant = h % 360.0 / 60.0 c = (1.0 - abs(2.0 * l - 1.0)) * s x = (1.0 - abs(sextant % 2.0 - 1.0)) * c m = l - c / 2.0 i = int(sextant) r = [c, x, 0.0, 0.0, x, c][i] g = [x, c, c, x, 0.0, 0.0][i] b = [0.0, 0.0, x, c, c, x][i] return (int((v + m) * 255.0) for v in (r, g, b)) def html_color(r, g, b, a=None): fmt = "%02X" alpha = a or 0 if r < 0x10 and g < 0x10 and b < 0x10 and alpha < 0x10: fmt = "%01X" color = (fmt * 3) % (r, g, b) if not a is None: color += fmt % a return "#" + color """ In Python 3, Gdk.init_check() encodes sys.argv without handling surrogates, causing an UnicodeEncodeError exception while importing Gdk. The following class implements a mechanism to avoid that: - The first Gdk import performed by a program should be preceded by a SanitizeArgv object creation. - After Gdk import, call this object's method restore(). For this reason, the current module MAY NOT import Gdk, directly or indirectly. """ class SanitizeArgv(object): def __init__(self): self.argmap = None if len(sys.argv) and isinstance(sys.argv[0], six.text_type): argmap = [] newargv = [] for arg in sys.argv: newarg = S(arg).display() newargv.append(newarg) argmap.append((newarg, arg)) if arg != newarg: self.argmap = argmap if self.argmap: sys.argv = newargv def restore(self): if self.argmap: newargv = [] i = 0 for arg in sys.argv: while arg != self.argmap[i][0]: i += 1 newargv.append(self.argmap[i][1]) i += 1 sys.argv = newargv rabbitvcs-0.19/rabbitvcs/util/highlighter.py000066400000000000000000000123401445560650400212370ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Syntax highlighter based on the pygments module. """ import six from rabbitvcs.util.strings import S from rabbitvcs.util.helper import html_escape from rabbitvcs.util.settings import SettingsManager from rabbitvcs.util.log import Log logger = Log("rabbitvcs.util.highlighter") HAS_PYGMENTS = True try: import pygments import pygments.formatters import pygments.formatter import pygments.lexers import pygments.util except: HAS_PYGMENTS = False def mklist(arg): if not isinstance(arg, list): arg = [arg] return arg def no_highlight(lines): return [html_escape(S(l), True) for l in mklist(lines)] if not HAS_PYGMENTS: def highlight(filename, sourcelines): return no_highlight(sourcelines) else: # Pygments custom formatter generating Pango makup language. class PangoMarkupFormatter(pygments.formatter.Formatter): def __init__(self, bylines=False, **options): pygments.formatter.Formatter.__init__(self, **options) self.bylines = bylines self.styles = {} for token, style in self.style: start = end = "" if style["color"]: start += ' foreground="#%s"' % style["color"] if style["bgcolor"]: start += ' background="#%s"' % style["bgcolor"] if style["bold"]: start += ' weight="bold"' if style["italic"]: start += ' style="italic"' if style["underline"]: start += ' underline="single"' if style["sans"]: start += ' face="sans"' if style["roman"]: start += ' face="serif"' elif style["mono"]: start += ' face="monospace"' if start == ' weight="bold"': start, end = "", "" elif start == ' style="italic"': start, end = "", "" elif start == ' underline="single"': start, end = "", "" elif start == ' face="monospace"': start, end = "", "" elif start: start = "" % start end = "" self.styles[token] = (start, end) def format(self, tokensource, outfile): self.lastval = "" self.lasttype = None def flush(self): if self.lastval: stylebegin, styleend = self.styles[self.lasttype] outfile.write(stylebegin + self.lastval + styleend) self.lastval = "" def format_single(self, ttype, value): value = html_escape(value, True) if ttype != self.lasttype: flush(self) self.lasttype = ttype self.lastval += value for ttype, value in tokensource: lines = [value] if self.bylines: lines = value.splitlines() if S(value[-1:]) in ["\r", "\n"]: lines.append(value[0:0]) while not ttype in self.styles: ttype = ttype.parent if lines: format_single(self, ttype, lines[0]) for line in lines[1:]: flush(self) outfile.write(six.u("\n")) format_single(self, ttype, line) flush(self) def highlight(filename, sourcelines): if not SettingsManager().get("general", "enable_highlighting"): return no_highlight(sourcelines) sourcelines = mklist(sourcelines) source = "\n".join(sourcelines) try: lexer = pygments.lexers.guess_lexer_for_filename(filename, source) except pygments.util.ClassNotFound: return no_highlight(sourcelines) formatter = PangoMarkupFormatter(bylines=True) lines = pygments.highlight(source, lexer, formatter).splitlines() # Trailing empty lines may have been lost. n = len(sourcelines) - len(lines) if n > 0: lines += [""] * n return lines rabbitvcs-0.19/rabbitvcs/util/log.py000066400000000000000000000222261445560650400175260ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Provides a simple wrapper around the python logger. Right now there is the base Log class, and three specialized classes that inherit from the Log class: ConsoleLog, FileLog, and DualLog. ConsoleLog logs messages to the standard output (command line), FileLog outputs to a log file, and DualLog outputs to both. The programmer does not need to think about the logger types because this will be specified in the user's settings. So to set up your module to log do the following: Usage: from rabbitvcs.util.log import Log log = Log("my.module") log.debug("a debug message") """ from __future__ import absolute_import import os from os.path import expanduser import logging import logging.handlers from rabbitvcs.util.settings import SettingsManager, get_home_folder from rabbitvcs.util.strings import * LEVELS = { "debug": logging.DEBUG, "info": logging.INFO, "warning": logging.WARNING, "error": logging.ERROR, "critical": logging.CRITICAL, } settings = SettingsManager() DEFAULT_LEVEL = settings.get("logging", "level").lower() DEFAULT_LOG_TYPE = settings.get("logging", "type") # The following merely sets the log type/level if it hasn't already been set changed = False if DEFAULT_LEVEL not in LEVELS: DEFAULT_LEVEL = "debug" settings.set("logging", "level", DEFAULT_LEVEL.title()) changed = True if not DEFAULT_LOG_TYPE: DEFAULT_LOG_TYPE = "Console" settings.set("logging", "type", DEFAULT_LOG_TYPE) changed = True if changed: settings.write() LOG_PATH = os.path.join(get_home_folder(), "RabbitVCS.log") if not os.path.exists(LOG_PATH): open(LOG_PATH, "a").close() DEFAULT_FORMAT = "%(message)s" FILE_FORMAT = "%(asctime)s %(levelname)s\t%(name)s\t%(message)s" CONSOLE_FORMAT = "%(levelname)s\t%(name)s\t%(message)s" class BaseLog(object): """ Provides a wrapper around the logging module to simplify some logging tasks. This base class should generally not be called. """ def __init__(self, logger="", level=DEFAULT_LEVEL): self.logger = logging.getLogger(logger) self.level = level self.logger.setLevel(LEVELS[level]) self.handler = None def set_level(self, level=DEFAULT_LEVEL): """ Set the mimimum level to be logged. @type level: string @param level: The minimum level to log. (debug, info, warning, error, critical) """ self.level = level self.logger.setLevel(LEVELS[level]) def debug(self, msg=""): """ Pass a debug level log message (Numeric value: 10) @type msg: string @param msg: The message to pass """ self.logger.debug(msg) def info(self, msg=""): """ Pass an info level log message (Numeric value: 20) @type msg: string @param msg: The message to pass """ self.logger.info(msg) def warning(self, msg=""): """ Pass a warning level log message (Numeric value: 30) @type msg: string @param msg: The message to pass """ self.logger.warning(msg) def error(self, msg=""): """ Pass an error level log message (Numeric value: 40) @type msg: string @param msg: The message to pass """ self.logger.error(msg) def critical(self, msg=""): """ Pass a critical level log message (Numeric value: 50) @type msg: string @param msg: The message to pass """ self.logger.critical(msg) def exception(self, msg=""): """ Pass a exception level log message (Numeric value: 50) @type msg: string @param msg: The message to pass """ self.logger.exception(msg) def exception_info(self, msg, exc_info): """ Pass an exception info tuple (as per sys.exc_info() format, (type, value, traceback). @type exc_info: (type, value, traceback) @param exc_info: exception info """ self.logger.debug(msg, exc_info=exc_info) def set_handler(self, handler, format=DEFAULT_FORMAT): """ Set how the logging module should handle log messages. @type handler: logging.Handler @param handler: The class that handles log messages @type format: string @param format: The formatting to be used when displaying messages """ self.handler = handler self.handler.setLevel(LEVELS[self.level]) self.handler.setFormatter(logging.Formatter(format)) self.logger.addHandler(self.handler) class ConsoleLog(BaseLog): """ Inherits from BaseLog and provides a simple interface to log calls to the command line/standard output. Usage: clog = ConsoleLog("rabbitvcs.ui.commit") clog.debug("This function needs refactoring") clog.error("You just screwed the pooch!") """ def __init__(self, logger="", level=DEFAULT_LEVEL): """ @type logger: string @param logger: A keyword describing the source of the log messages @type level: string @param level: The minimum level to log. (debug, info, warning, error, critical) """ BaseLog.__init__(self, logger, level) self.set_handler(logging.StreamHandler(), CONSOLE_FORMAT) class FileLog(BaseLog): """ Inherits from BaseLog and provides a simple interface to log calls to file which is automatically rotated every day and keeps seven days worth of data. Usage: flog = FileLog("rabbitvcs.ui.commit") flog.debug("This function needs refactoring") flog.error("You just screwed the pooch!") """ def __init__(self, logger="", level=DEFAULT_LEVEL): """ @type logger: string @param logger: A keyword describing the source of the log messages @type level: string @param level: The minimum level to log. (debug, info, warning, error, critical) """ BaseLog.__init__(self, logger, level) self.set_handler( logging.handlers.TimedRotatingFileHandler( LOG_PATH, "D", 1, 7, UTF8_ENCODING ), FILE_FORMAT, ) class DualLog(BaseLog): """ Inherits from BaseLog and provides a simple interface to log calls to both the command line/standard output and a file which is automatically rotated every day. Usage: dlog = DualLog("rabbitvcs.ui.commit") dlog.debug("This function needs refactoring") dlog.error("You just screwed the pooch!") """ def __init__(self, logger="", level=DEFAULT_LEVEL): """ @type logger: string @param logger: A keyword describing the source of the log messages @type level: string @param level: The minimum level to log. (debug, info, warning, error, critical) """ BaseLog.__init__(self, logger, level) self.set_handler( logging.handlers.TimedRotatingFileHandler( LOG_PATH, "D", 1, 7, UTF8_ENCODING ), FILE_FORMAT, ) self.set_handler(logging.StreamHandler(), CONSOLE_FORMAT) class NullHandler(logging.Handler): """ Handles log messages and doesn't do anything with them """ def emit(self, record): pass class NullLog(BaseLog): """ If the user does not want to generate a log file, use the NullLog. It calls the NullHandler class as its handler. """ def __init__(self, *args, **kwargs): BaseLog.__init__(self, *args, **kwargs) self.set_handler(NullHandler()) Log = NullLog if DEFAULT_LOG_TYPE == "File": Log = FileLog elif DEFAULT_LOG_TYPE == "Console": Log = ConsoleLog elif DEFAULT_LOG_TYPE == "Both": Log = DualLog def reload_log_settings(): """ Refreshes the settings manager and returns a new log instance """ settings = SettingsManager() DEFAULT_LEVEL = settings.get("logging", "level").lower() DEFAULT_LOG_TYPE = settings.get("logging", "type") Log = NullLog if DEFAULT_LOG_TYPE == "File": Log = FileLog elif DEFAULT_LOG_TYPE == "Console": Log = ConsoleLog elif DEFAULT_LOG_TYPE == "Both": Log = DualLog return Log rabbitvcs-0.19/rabbitvcs/util/settings.py000066400000000000000000000223011445560650400205770ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Everything related retrieving and storing configuration keys. """ from __future__ import absolute_import from __future__ import print_function import os from os.path import dirname import shutil import configobj import validate import re from rabbitvcs import package_prefix MULTILINE_ESCAPE_RE = re.compile(r"""([\\'"])""") MULTILINE_UNESCAPE_RE = re.compile(r"\\(.)") def get_home_folder(): """ Returns the location of the hidden folder we use in the home dir. This is used for storing things like previous commit messages and previously used repositories. FIXME: This is a copy of the helper module's function, because I can't have a circular module reference (helper imports Settings right now). @rtype: string @return: The location of our main user storage folder. """ # Make sure we adher to the freedesktop.org XDG Base Directory # Specifications. $XDG_CONFIG_HOME if set, by default ~/.config xdg_config_home = os.environ.get( "XDG_CONFIG_HOME", os.path.join(os.path.expanduser("~"), ".config") ) config_home = os.path.join(xdg_config_home, "rabbitvcs") # Make sure the directories are there if not os.path.isdir(config_home): # FIXME: what if somebody places a file in there? os.makedirs(config_home, 0o700) return config_home SETTINGS_FILE = "%s/settings.conf" % get_home_folder() def find_configspec(): # Search the following paths for a configspec file configspec_paths = [ os.path.join(dirname(__file__), "configspec/configspec.ini"), os.path.join(package_prefix(), "share/rabbitvcs/configspec.ini"), "/usr/share/rabbitvcs/configspec.ini", "/usr/local/share/rabbitvcs/configspec.ini", ] for path in configspec_paths: if os.path.exists(path): return path raise IOError("Cannot find a configspec.ini file") SETTINGS_SPEC = find_configspec() class SettingsManager(object): """ This class provides an shallow interface for the rest of the program to use to interact with our configuration file. Usage:: Get settings: sm = SettingsManager() diff_tool = sm.get("external", "diff_tool") Set settings: sm = SettingsManager() sm.set("external", "diff_tool", "/usr/bin/meld") sm.write() """ def __init__(self): self.settings = configobj.ConfigObj( infile=SETTINGS_FILE, create_empty=True, indent_type=" ", configspec=SETTINGS_SPEC, ) self.validator = validate.Validator() valid = self.settings.validate(self.validator) # We cannot use "if not valid" here, since validate() returns a dict # if validation fails! # See: # http://www.voidspace.org.uk/python/articles/configobj.shtml#validation if valid is not True: # What to do here? # We could only get to this point if: # 1. The user config file existed # 2. It was invalid # One option is to copy it to a different file and recreate it... log.warning("User configuration not valid. Backing up and recreating.") self.backup_and_rewrite_config() def get(self, section=None, keyword=None): """ Get the settings for a section and/or keyword If no arguments are given, it just returns all settings @type section: string @param section: A settings section. @type keyword: string @param keyword: A particular setting in a section. @rtype: dictionary or string @return: Either a dictionary or string with setting(s). """ if section is None: return self.settings if keyword is None: return self.settings[section] returner = "" try: returner = self.settings[section][keyword] except KeyError: print("Error: section %s:%s doesn't exist" % (section, keyword)) return returner def set(self, section, keyword, value=""): """ Set settings for a particular section and keyword @type section: string @param section: A settings section. @type keyword: string @param keyword: A particular setting in a section. @type value: string or dictionary @param value: Setting value. """ if section not in self.settings: self.settings[section] = {} self.settings[section][keyword] = value # Multilines are escaped to allow them containing ''' def get_multiline(self, section=None, keyword=None): return MULTILINE_UNESCAPE_RE.sub(r"\1", self.get(section, keyword)) def set_multiline(self, section, keyword, value=""): self.set(section, keyword, MULTILINE_ESCAPE_RE.sub(r"\\\1", value)) def set_comments(self, section, comments=[]): """ Set multi-line comments for a section @type section: string @param section: A settings section. @type comments: list @param comments: A list of strings. """ self.settings.comments[section] = comments def set_inline_comments(self, section, comments=""): """ Set inline comments for a section @type section: string @param section: A settings section. @type comments: string @param comments: A single line comment. """ self.settings.inline_comments[section] = comments def write(self): """ Write the settings and comments to the settings file """ self.settings.write() def clear(self): """ Clear the settings object so that all sections/keywords are gone This function does not write-to-file. Only clears from memory. """ self.settings = configobj.ConfigObj(indent_type=" ") self.settings.filename = SETTINGS_FILE # Maybe we should use self.settings.reset()? def use_default_settings(self): """ Specify a set of default settings and write to file. Called when there is no settings.conf present. """ self.settings = configobj.ConfigObj(DEFAULT_SETTINGS, indent_type=" ") self.settings.filename = SETTINGS_FILE def get_default(self, section, keyword): """ Get the default settings for a section and/or keyword If no arguments are given, it just returns all settings @type section: string @param section: A settings section. @type keyword: string @param keyword: A particular setting in a section. @rtype: dictionary or string @return: Either a dictionary or string with setting(s). """ if section is None: return DEFAULT_SETTINGS if keyword is None: return DEFAULT_SETTINGS[section] returner = None try: returner = DEFAULT_SETTINGS[section][keyword] except KeyError: print("Error: section %s:%s doesn't exist" % (section, keyword)) return returner def backup_and_rewrite_config(self): """ Backs up the user configuration file (for debugging) and rewrites a valid config file. The name of the backup file is the name of the settings file plus an incremental count. """ # We need to check that the file doesn't already exist, in case this has # happened before. new_file_free = False renumber = 0 while not new_file_free: new_name = "%s.%02i" % (SETTINGS_FILE, renumber) # FIXME: is this too paranoid? if not os.path.exists(new_name): new_file_free = True created = False try: os.rename(SETTINGS_FILE, new_name) created = True except IOError: # Paranoid again? print("Could not back up user configuration.") if created: self.settings.reset() self.write() else: renumber += 1 if __name__ == "__main__": pass rabbitvcs-0.19/rabbitvcs/util/strings.py000066400000000000000000000171271445560650400204420ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Additional strings support. """ import sys import codecs import re import six import locale __all__ = ["S", "IDENTITY_ENCODING", "UTF8_ENCODING", "SURROGATE_ESCAPE"] unicode_null_string = six.u("") non_alpha_num_re = re.compile("[^A-Za-z0-9]+") SURROGATE_BASE = 0xDC00 RE_SURROGATE = re.compile( six.u("[") + six.unichr(SURROGATE_BASE + 0x80) + six.u("-") + six.unichr(SURROGATE_BASE + 0xFF) + six.u("]") ) RE_UTF8 = re.compile("^[Uu][Tt][Ff][ _-]?8$") # Codec that maps ord(byte) == ord(unicode_char). IDENTITY_ENCODING = "latin-1" # An UTF-8 codec that implements surrogates, even in Python 2. UTF8_ENCODING = "rabbitvcs-utf8" def utf8_decode(input, errors="strict"): return codecs.utf_8_decode(input, errors, True) def utf8_encode(input, errors="strict"): output = b"" pos = 0 end = len(input) eh = None while pos < end: n = end m = RE_SURROGATE.search(input, pos) if m: n = m.start() if n > pos: p, m = codecs.utf_8_encode(input[pos:n], errors) output += p pos = n if pos < end: e = UnicodeEncodeError( UTF8_ENCODING, input, pos, pos + 1, "surrogates not allowed" ) if not eh: eh = codecs.lookup_error(errors) p, n = eh(e) output += p if n <= pos: n = pos + 1 pos = n return (output, len(input)) class Utf8IncrementalEncoder(codecs.IncrementalEncoder): def encode(self, input, final=False): return utf8_encode(input, self.errors)[0] class Utf8IncrementalDecoder(codecs.BufferedIncrementalDecoder): _buffer_decode = codecs.utf_8_decode class Utf8StreamWriter(codecs.StreamWriter): def encode(self, input, errors="strict"): return utf8_encode(input, errors) class Utf8StreamReader(codecs.StreamReader): decode = codecs.utf_8_decode def utf8_search(encoding): encoding = non_alpha_num_re.sub("-", encoding).strip("-").lower() if encoding != UTF8_ENCODING: return None return codecs.CodecInfo( name=UTF8_ENCODING, encode=utf8_encode, decode=utf8_decode, incrementalencoder=Utf8IncrementalEncoder, incrementaldecoder=Utf8IncrementalDecoder, streamwriter=Utf8StreamWriter, streamreader=Utf8StreamReader, ) codecs.register(utf8_search) # Emulate surrogateescape codecs error handler because it is not available # Before Python 3.1 SURROGATE_ESCAPE = "rabbitvcs-surrogateescape" def rabbitvcs_surrogate_escape(e): if not isinstance(e, UnicodeError): raise e input = e.object[e.start : e.end] if isinstance(e, UnicodeDecodeError): output = [ six.unichr(b) if b < 0x80 else six.unichr(SURROGATE_BASE + b) for b in bytearray(input) ] return (unicode_null_string.join(output), e.end) if isinstance(e, UnicodeEncodeError): output = b"" for c in input: b = ord(c) - SURROGATE_BASE if not 0x80 <= b <= 0xFF: raise e output += six.int2byte(b) return (output, e.end) raise e codecs.register_error(SURROGATE_ESCAPE, rabbitvcs_surrogate_escape) class S(str): """ Stores a string in native form: unicode with surrogates in Python 3 and utf-8 in Python 2. Provides the following methods: encode: overloaded to use UTF8_ENCODING and SURROGATE_ESCAPE error handler. decode: overloaded to use UTF8_ENCODING and SURROGATE_ESCAPE error handler. bytes: get the string as bytes. unicode: get the string as unicode. display: get the string in native form, without surrogates. """ if str == bytes: # Python 2. def __new__(cls, value, encoding=UTF8_ENCODING, errors=SURROGATE_ESCAPE): if isinstance(value, bytearray): value = bytes(value) if isinstance(value, str): encoding, errors = S._codeargs(encoding, errors) if encoding.lower() != UTF8_ENCODING: value = value.decode(encoding, errors) if isinstance(value, six.text_type): value = value.encode(UTF8_ENCODING, SURROGATE_ESCAPE) elif not isinstance(value, str): value = str(value) return str.__new__(cls, value) def encode(self, encoding=UTF8_ENCODING, errors=SURROGATE_ESCAPE): encoding, errors = self._codeargs(encoding, errors) if encoding.lower() == UTF8_ENCODING: return str(self) value = str.decode(self, UTF8_ENCODING, SURROGATE_ESCAPE) return value.encode(encoding, errors) def decode(self, encoding=UTF8_ENCODING, errors=SURROGATE_ESCAPE): encoding, errors = self._codeargs(encoding, errors) return str.decode(self, encoding, errors) def display(self, encoding=None, errors="replace"): encoding, errors = self._codeargs(encoding, errors) value = str.decode(self, UTF8_ENCODING, errors) return value.encode(encoding, errors) else: # Python 3. def __new__(cls, value, encoding=UTF8_ENCODING, errors=SURROGATE_ESCAPE): if isinstance(value, bytearray): value = bytes(value) if isinstance(value, bytes): encoding, errors = S._codeargs(encoding, errors) value = value.decode(encoding, errors) elif not isinstance(value, str): value = str(value) return str.__new__(cls, value) def encode(self, encoding=UTF8_ENCODING, errors=SURROGATE_ESCAPE): encoding, errors = self._codeargs(encoding, errors) return str.encode(self, encoding, errors) def decode(self, encoding=UTF8_ENCODING, errors=SURROGATE_ESCAPE): return str(self) def display(self, encoding=None, errors="replace"): return RE_SURROGATE.sub(six.unichr(0xFFFD), self) def bytes(self, encoding=UTF8_ENCODING, errors=SURROGATE_ESCAPE): return self.encode(encoding, errors) def unicode(self): return self.decode() def valid(self, encoding=None, errors=SURROGATE_ESCAPE): return self.display(encoding, errors) == self @staticmethod def _codeargs(encoding, errors): if not encoding: encoding = locale.getlocale(locale.LC_MESSAGES)[1] if not encoding: encoding = sys.getdefaultencoding() if RE_UTF8.match(encoding): encoding = UTF8_ENCODING if errors.lower() == "strict": errors = SURROGATE_ESCAPE return encoding, errors rabbitvcs-0.19/rabbitvcs/vcs/000077500000000000000000000000001445560650400162055ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/vcs/__init__.py000066400000000000000000000213711445560650400203220ustar00rootroot00000000000000from __future__ import absolute_import # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path from rabbitvcs import gettext _ = gettext.gettext from rabbitvcs.util.log import Log logger = Log("rabbitvcs.vcs") from rabbitvcs.util.helper import get_exclude_paths from rabbitvcs.util.settings import SettingsManager settings = SettingsManager() EXT_UTIL_ERROR = _("The output from '%s' was not able to be processed.\n%s") VCS_SVN = "svn" VCS_GIT = "git" VCS_MERCURIAL = "mercurial" VCS_DUMMY = "unknown" VCS_FOLDERS = {} if not settings.get("HideItem", "svn"): VCS_FOLDERS[".svn"] = VCS_SVN if not settings.get("HideItem", "git"): VCS_FOLDERS[".git"] = VCS_GIT def _guess(path): # Determine the VCS instance based on the path if path: path_to_check = path.split("@")[0] while path_to_check != "/" and path_to_check != "": for folder, client in list(VCS_FOLDERS.items()): if os.path.isdir(os.path.join(path_to_check, folder)): cache = {"vcs": client, "repo_path": path_to_check} return cache path_to_check = os.path.split(path_to_check)[0] return {"vcs": VCS_DUMMY, "repo_path": path} # Override the standard guessing method to ensure we # can return a dummy object if needed def guess(path): obj = _guess(path) if obj["vcs"] != VCS_DUMMY and settings.get("HideItem", obj["vcs"]): return {"vcs": VCS_DUMMY, "repo_path": path} else: return obj class VCS(object): clients = {} exclude_paths = [] def __init__(self): self.exclude_paths = get_exclude_paths() def dummy(self): if VCS_DUMMY in self.clients: return self.clients[VCS_DUMMY] else: from rabbitvcs.vcs.dummy import Dummy self.clients[VCS_DUMMY] = Dummy() return self.clients[VCS_DUMMY] def svn(self): if settings.get("HideItem", "svn"): return self.dummy() if VCS_SVN in self.clients: return self.clients[VCS_SVN] else: try: from rabbitvcs.vcs.svn import SVN self.clients[VCS_SVN] = SVN() return self.clients[VCS_SVN] except Exception as e: logger.debug("Unable to load SVN module: %s" % e) logger.exception(e) self.clients[VCS_SVN] = self.dummy() return self.clients[VCS_SVN] def git(self, path=None, is_repo_path=False): if settings.get("HideItem", "git"): return self.dummy() if VCS_GIT in self.clients: git = self.clients[VCS_GIT] if git.__class__.__name__ == "Dummy": return self.dummy() if path: if is_repo_path: git.set_repository(path) else: repo_path = git.find_repository_path(path) git.set_repository(repo_path) return git else: try: from rabbitvcs.vcs.git import Git git = Git() if path: if is_repo_path: git.set_repository(path) else: repo_path = git.find_repository_path(path) git.set_repository(repo_path) self.clients[VCS_GIT] = git return self.clients[VCS_GIT] except Exception as e: logger.debug("Unable to load Git module: %s" % e) logger.exception(e) self.clients[VCS_GIT] = self.dummy() return self.clients[VCS_GIT] def mercurial(self, path=None, is_repo_path=False): if settings.get("HideItem", "hg"): return self.dummy() if VCS_MERCURIAL in self.clients: mercurial = self.clients[VCS_MERCURIAL] if path: if is_repo_path: mercurial.set_repository(path) else: repo_path = mercurial.find_repository_path(path) mercurial.set_repository(repo_path) return mercurial else: try: from rabbitvcs.vcs.mercurial import Mercurial mercurial = Mercurial() if path: if is_repo_path: mercurial.set_repository(path) else: repo_path = mercurial.find_repository_path(path) mercurial.set_repository(repo_path) self.clients[VCS_MERCURIAL] = mercurial return self.clients[VCS_MERCURIAL] except Exception as e: logger.debug("Unable to load Mercurial module: %s" % e) logger.exception(e) self.clients[VCS_MERCURIAL] = self.dummy() return self.clients[VCS_MERCURIAL] def client(self, path, vcs=None): if self.should_exclude(path): logger.debug("Excluding path: %s" % path) return self.dummy() # Determine the VCS instance based on the vcs parameter if vcs: if vcs == VCS_SVN: return self.svn() elif vcs == VCS_GIT: return self.git(path) elif vcs == VCS_MERCURIAL: return self.mercurial(path) guess = self.guess(path) if guess["vcs"] == VCS_GIT: return self.git(guess["repo_path"], is_repo_path=False) elif guess["vcs"] == VCS_SVN: return self.svn() elif guess["vcs"] == VCS_MERCURIAL: return self.mercurial(guess["repo_path"], is_repo_path=False) else: return self.dummy() def should_exclude(self, path): for exclude_path in self.exclude_paths: if path.startswith(exclude_path): return True return False def guess(self, path): return guess(path) # Methods that call client methods def statuses(self, path, recurse=True, invalidate=False): client = self.client(path) return client.statuses(path, recurse=recurse, invalidate=invalidate) def status(self, path, summarize=True, invalidate=False): client = self.client(path) return client.status(path, summarize, invalidate) def is_working_copy(self, path): client = self.client(path) return client.is_working_copy(path) def is_in_a_or_a_working_copy(self, path): client = self.client(path) ret = client.is_in_a_or_a_working_copy(path) return ret def is_versioned(self, path): client = self.client(path) return client.is_versioned(path) def is_locked(self, path): client = self.client(path) return client.is_locked(path) def get_items(self, paths, statuses=[]): client = self.client(paths[0]) return client.get_items(paths, statuses) def statuses_for_add(self, paths): client = self.client(paths[0]) return client.STATUSES_FOR_ADD def statuses_for_commit(self, paths): client = self.client(paths[0]) return client.STATUSES_FOR_COMMIT def statuses_for_revert(self, paths): client = self.client(paths[0]) return client.STATUSES_FOR_REVERT def create_vcs_instance(path=None, vcs=None): """ Create a VCS instance based on the working copy path """ return VCS() def guess_vcs(path): vcs = VCS() return vcs.guess(path) class ExternalUtilError(Exception): """Represents an error caused by unexpected output from an external program. """ def __init__(self, program, output): """Initialises the error with the external tool and the unexpected output. """ Exception.__init__(self, EXT_UTIL_ERROR % (program, output)) self.program = program self.output = output rabbitvcs-0.19/rabbitvcs/vcs/branch.py000066400000000000000000000034251445560650400200200ustar00rootroot00000000000000from __future__ import absolute_import # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import rabbitvcs.util.helper import rabbitvcs.vcs class BranchEntry(object): def __init__(self, name, tracking=False, revision="", message=""): self.name = name self.tracking = tracking self.revision = revision self.message = message def __str__(self): tracking = self.tracking and " (tracking)" or "" return "" % (self.name, self.revision, tracking) class LocalBranchEntry(BranchEntry): def __init__(self, name, tracking=False, revision="", upstream="", message=""): BranchEntry.__init__(self, name, tracking, revision, message) self.upstream = upstream def __str__(self): tracking = self.tracking and " (tracking)" or "" return "" % (self.name, self.revision, tracking)rabbitvcs-0.19/rabbitvcs/vcs/dummy/000077500000000000000000000000001445560650400173405ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/vcs/dummy/__init__.py000066400000000000000000000032741445560650400214570ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Concrete VCS dummy implementation. """ from __future__ import absolute_import import rabbitvcs.vcs import rabbitvcs.vcs.status class Dummy(object): def __init__(self): pass def status(self, path, summarize=True, invalidate=False): return rabbitvcs.vcs.status.Status.status_unknown(path) def is_working_copy(self, path): return False def is_in_a_or_a_working_copy(self, path): return False def is_versioned(self, path): return False def get_items(self, paths, statuses=[]): return [] def is_locked(self, path): return False def statuses(self, path, recurse=True, invalidate=False): return [] def revision(self, kind, number=None): return None rabbitvcs-0.19/rabbitvcs/vcs/git/000077500000000000000000000000001445560650400167705ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/vcs/git/README000066400000000000000000000003301445560650400176440ustar00rootroot00000000000000Hopefully a better library will come along for Git eventually, but in the meantime this should supply the basic functionality needed to work with Git. Dependencies ------------ * dulwich >= 0.19.0 * python >= 2.4 rabbitvcs-0.19/rabbitvcs/vcs/git/__init__.py000066400000000000000000000714711445560650400211130ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Concrete VCS implementation for Git functionality. """ from __future__ import absolute_import import os.path from datetime import datetime from .gittyup.client import GittyupClient from .gittyup import objects from rabbitvcs.util import helper from rabbitvcs.util.strings import S import rabbitvcs.vcs import rabbitvcs.vcs.status import rabbitvcs.vcs.log from rabbitvcs.vcs.branch import BranchEntry, LocalBranchEntry from rabbitvcs.util.log import Log log = Log("rabbitvcs.vcs.git") from rabbitvcs import gettext _ = gettext.gettext class Revision(object): """ Implements a simple revision object as a wrapper around the gittyup revision object. This allows us to provide a standard interface to the object data. """ def __init__(self, kind, value=None): self.kind = kind.upper() self.value = value if self.kind == "HEAD": self.value = "HEAD" self.is_revision_object = True def __str__(self): if self.value: return S(self.value) return S(self.kind) def __unicode__(self): return self.__str__().unicode() def short(self): if self.value: return S(self.value)[0:7] else: return self.kind def __repr__(self): return self.__str__() def primitive(self): return self.value class Git(object): STATUS = { "normal": gittyup.objects.NormalStatus, "added": gittyup.objects.AddedStatus, "renamed": gittyup.objects.RenamedStatus, "removed": gittyup.objects.RemovedStatus, "modified": gittyup.objects.ModifiedStatus, "killed": gittyup.objects.KilledStatus, "untracked": gittyup.objects.UntrackedStatus, "missing": gittyup.objects.MissingStatus, } STATUS_REVERSE = { gittyup.objects.NormalStatus: "normal", gittyup.objects.AddedStatus: "added", gittyup.objects.RenamedStatus: "renamed", gittyup.objects.RemovedStatus: "removed", gittyup.objects.ModifiedStatus: "modified", gittyup.objects.KilledStatus: "killed", gittyup.objects.UntrackedStatus: "untracked", gittyup.objects.MissingStatus: "missing", } STATUSES_FOR_REVERT = ["missing", "renamed", "modified", "removed"] STATUSES_FOR_ADD = ["untracked"] STATUSES_FOR_COMMIT = [ "untracked", "missing", "renamed", "modified", "added", "removed", ] STATUSES_FOR_STAGE = ["untracked"] STATUSES_FOR_UNSTAGE = ["added"] def __init__(self, repo=None): self.vcs = rabbitvcs.vcs.VCS_GIT self.interface = "gittyup" if repo: self.client = GittyupClient(repo) else: self.client = GittyupClient() self.cache = rabbitvcs.vcs.status.StatusCache() def set_repository(self, path): self.client.set_repository(path) self.config = self.client.config def config_get(self, key1, key2): return self.client._config_get(key1, key2) def get_repository(self): return self.client.get_repository() def find_repository_path(self, path): return self.client.find_repository_path(path) # # Status Methods # def statuses(self, path, recurse=False, invalidate=False): """ Generates a list of GittyupStatus objects for the specified file. @type path: string @param path: The file to look up. If the file is a directory, it will return a recursive list of child path statuses """ if path in self.cache: if invalidate: del self.cache[path] else: return self.cache.find_path_statuses(path) gittyup_statuses = self.client.status(path) if not len(gittyup_statuses): return [rabbitvcs.vcs.status.Status.status_unknown(path)] else: statuses = [] for st in gittyup_statuses: # gittyup returns status paths relative to the repository root # so we need to convert the path to an absolute path st.path = self.client.get_absolute_path(st.path) # If not recursing, only return the item in question (if a file) # or items directly under the path (if a directory) cmp_path = os.path.join(path, os.path.basename(st.path)) if not recurse and cmp_path != st.path and st.path != path: continue rabbitvcs_status = rabbitvcs.vcs.status.GitStatus(st) self.cache[st.path] = rabbitvcs_status statuses.append(rabbitvcs_status) return statuses def status(self, path, summarize=True, invalidate=False): if path in self.cache: if invalidate: del self.cache[path] else: st = self.cache[path] if summarize: st.summary = st.single return st all_statuses = self.statuses(path, invalidate=invalidate) if summarize: path_status = None for st in all_statuses: if st.path == path: path_status = st break if path_status: path_status.summary = path_status.single else: path_status = rabbitvcs.vcs.status.Status.status_unknown(path) else: path_status = all_statuses[0] return path_status def is_working_copy(self, path): if os.path.isdir(path) and os.path.isdir(os.path.join(path, ".git")): return True return False def is_in_a_or_a_working_copy(self, path): if self.is_working_copy(path): return True return self.find_repository_path(os.path.split(path)[0]) != "" def is_versioned(self, path): if self.is_working_copy(path): return True st = self.status(path) try: return st.is_versioned() except Exception as e: log.error(e) return False return False def is_locked(self, path): return False def get_items(self, paths, statuses=[]): """ Retrieves a list of files that have one of a set of statuses @type paths: list @param paths: A list of paths or files. @type statuses: list @param statuses: A list of statuses. @rtype: list @return: A list of GittyupStatus objects. """ if paths is None: return [] items = [] for path in paths: st = self.statuses(path, recurse=True, invalidate=True) for st_item in st: if st_item.content == "modified" and os.path.isdir(st_item.path): continue if st_item.content in statuses or len(statuses) == 0: items.append(st_item) return items def revision(self, value): """ Create a revision object usable by pysvn @type kind: string @param kind: HEAD or a sha1 hash @type value: integer @param value: Used for kind=number, specifies the revision hash. @rtype: Revision object @return: A Revision object. """ if value is None: return Revision("WORKING") value_upper = value.upper() if value_upper == "HEAD" or value_upper == "BASE": return Revision("HEAD") elif value_upper == "WORKING": return Revision("WORKING") else: return Revision("hash", value) def add(self, paths, recurse=True): """ Add files to a git repository. @type paths: list @param paths: A list of paths or files. @type recurse: boolean @param recurse: Recursively add a directory's children """ return self.stage(paths) def is_tracking(self, name): return self.client.is_tracking("refs/heads/%s" % name) # # Action Methods # def initialize_repository(self, path, bare=False): """ Initialize a Git repository @type path: string @param path: The folder to initialize as a repository @type bare: boolean @param bare: Whether the repository should be "bare" or not """ return self.client.initialize_repository(path, bare) def stage(self, paths): """ Stage files to be committed or tracked @type paths: list @param paths: A list of files """ return self.client.stage(paths) def stage_all(self): """ Stage all files in a repository to be committed or tracked """ return self.client.stage_all() def unstage(self, paths): """ Unstage files so they are not committed or tracked @type paths: list @param paths: A list of files """ return self.client.unstage(paths) def unstage_all(self): """ Unstage all files so they are not committed or tracked @type paths: list @param paths: A list of files """ return self.client.unstage_all() def branch(self, name, revision=Revision("head"), track=False): """ Create a new branch @type name: string @param name: The name of the new branch @type revision: git.Revision @param revision: A revision to branch from. @type track: boolean @param track: Whether or not to track the new branch, or just create it """ return self.client.branch(name, revision.primitive(), track) def branch_delete(self, name): """ Delete a branch @type name: string @param name: The name of the branch """ return self.client.branch_delete(name) def branch_rename(self, old_name, new_name): """ Rename a branch @type old_name: string @param old_name: The name of the branch to be renamed @type new_name: string @param new_name: The name of the new branch """ return self.client.branch_rename(old_name, new_name) def local_branch_list(self, revision=None): """ List all local branches """ revision_str = None if revision: revision_str = revision.primitive() results = self.client.local_branch_list(revision_str) branches = [] for result in results: branches.append( LocalBranchEntry( result["name"], result["tracking"], result["revision"], result["upstream"], result["message"], ) ) return branches def branch_list(self, revision=None): """ List all branches """ revision_str = None if revision: revision_str = revision.primitive() results = self.client.branch_list(revision_str) branches = [] for result in results: branches.append( BranchEntry( result["name"], result["tracking"], result["revision"], result["message"], ) ) return branches def get_active_branch(self): results = self.client.branch_list() for result in results: if result["tracking"]: return BranchEntry( result["name"], result["tracking"], result["revision"], result["message"], ) return None def checkout(self, paths=[], revision=Revision("HEAD")): """ Checkout a series of paths from a tree or commit. If no tree or commit information is given, it will check out the files from head. If no paths are given, all files will be checked out from head. @type paths: list @param paths: A list of files to checkout @type revision: git.Revision @param revision: The revision object or branch to checkout """ return self.client.checkout(paths, revision.primitive()) def clone(self, host, path, bare=False, origin="origin"): """ Clone a repository @type host: string @param host: The url of the git repository @type path: string @param path: The path to clone to @type bare: boolean @param bare: Create a bare repository or not @type origin: string @param origin: Specify the origin of the repository """ return self.client.clone(host, path, bare, origin) def commit( self, message, parents=None, committer=None, commit_time=None, commit_timezone=None, author=None, author_time=None, author_timezone=None, encoding=None, commit_all=False, ): """ Commit staged files to the local repository @type message: string @param message: The log message @type parents: list @param parents: A list of parent SHAs. Defaults to head. @type committer: string @param committer: The person committing. Defaults to "user.name " @type commit_time: int @param commit_time: The commit time. Defaults to time.time() @type commit_timezone: int @param commit_timezone: The commit timezone. Defaults to (-1 * time.timezone) @type author: string @param author: The author of the file changes. Defaults to "user.name " @type author_time: int @param author_time: The author time. Defaults to time.time() @type author_timezone: int @param author_timezone: The author timezone. Defaults to (-1 * time.timezone) @type encoding: string @param encoding: The encoding of the commit. Defaults to UTF-8. @type commit_all: boolean @param commit_all: Stage all changed files before committing """ return self.client.commit( message, parents, committer, commit_time, commit_timezone, author, author_time, author_timezone, encoding, commit_all, ) def remove(self, paths): """ Remove path from the repository. Also deletes the local file. @type paths: list @param paths: A list of paths to remove """ return self.client.remove(paths) def move(self, source, dest): """ Move a file within the repository @type source: string @param source: The source file @type dest: string @param dest: The destination. If dest exists as a directory, source will be added as a child. Otherwise, source will be renamed to dest. """ return self.client.move(source, dest) def pull(self, repository="origin", refspec="master", options=None): """ Fetch objects from a remote repository and merge with the local repository @type repository: string @param repository: The name of the repository @type refspec: string @param refspec: The branch name to pull from """ return self.client.pull(repository, refspec, options) def push( self, repository="origin", refspec="master", tags=True, force_with_lease=False ): """ Push objects from the local repository into the remote repository and merge them. @type repository: string @param repository: The name of the repository @type refspec: string @param refspec: The branch name to pull from @type tags: boolean @param tags: True to include tags in push, False to omit """ return self.client.push(repository, refspec, tags, force_with_lease) def fetch_all(self): """ Fetch objects from all remote repositories. This will not merge the files into the local working copy, use pull for that. """ return self.client.fetch_all() def fetch(self, repository, branch=None): """ Fetch objects from a remote repository. This will not merge the files into the local working copy, use pull for that. If branch if provided, fetch only for that branch. @type repository: string @param repository: The git remote from which to fetch @type branch: string @param branch: The branch from which to fetch """ return self.client.fetch(repository, branch) def merge(self, branch): return self.client.merge(branch.primitive()) def remote_add(self, name, host): """ Add a remote repository @type name: string @param name: The name to give to the remote repository @type host: string @param host: The git url to add """ return self.client.remote_add(name, host) def remote_delete(self, name): """ Remove a remote repository @type name: string @param name: The name of the remote repository to remove """ return self.client.remote_delete(name) def remote_rename(self, current_name, new_name): """ Rename a remote repository @type current_name: string @param current_name: The current name of the repository @type new_name: string @param new_name: The name to give to the remote repository """ return self.client.remote_rename(current_name, new_name) def remote_set_url(self, name, url): """ Change a remote repository's url @type name: string @param name: The name of the repository @type url: string @param url: The url for the repository """ return self.client.remote_set_url(name, url) def remote_list(self): """ Return a list of the remote repositories @rtype list @return A list of dicts with keys: remote, url, fetch """ return self.client.remote_list() def tag(self, name, message, revision): """ Create a tag object @type name: string @param name: The name to give the tag @type message: string @param message: A log message @type revision: git.Revision @param revision: The revision to tag. Defaults to HEAD """ return self.client.tag(name, message, revision.primitive()) def tag_delete(self, name): """ Delete a tag @type name: string @param name: The name of the tag to delete """ return self.client.tag_delete(name) def tag_list(self): """ Return a list of Tag objects """ return self.client.tag_list() def log( self, path=None, skip=0, limit=None, revision=Revision("HEAD"), showtype="all" ): """ Returns a revision history list @type path string @param path If a path is specified, return commits that contain changes to the specified path only @type revision git.Revision @param revision Determines which branch to find commits for @type start_point sha1 hash string @param start_point Start at a given revision @type limit int @param limit If given, returns a limited number of commits @type refspec string @param refspec Return commits in this refspec only @type showtype string @type showtype Determines which revisions to show. "all" shows all revisions, "branch" shows just the branch given in refspec @returns A list of commits """ # The strptime method relies on locales to work, and may not work with non en_US locales # Temporarily change the locale to en_US so strptime can work consistently # Then change it back at the end of the method import locale current_locale = locale.getlocale() if current_locale[0] is not None: locale.setlocale(locale.LC_ALL, "C") items = self.client.log(path, skip, limit, revision.primitive(), showtype) returner = [] for item in items: revision = self.revision(item["commit"]) date = datetime.strptime(item["commit_date"][0:-6], "%a %b %d %H:%M:%S %Y") try: author = item.get("author", False) or item["committer"] pos = author.find("<") if pos != -1: author = author[0:pos] author = author.strip() except KeyError: author = _("(no author)") message = "" if "message" in item: message = item["message"] changed_paths = [] if "changed_paths" in item: for changed_path in item["changed_paths"]: action = "+%s/-%s" % ( changed_path["additions"], changed_path["removals"], ) changed_paths.append( rabbitvcs.vcs.log.LogChangedPath( changed_path["path"], action, "", "" ) ) parents = [] if "parents" in item: for parent in item["parents"]: parents.append(self.revision(parent)) head = False if item["commit"] == self.client.head(): head = True returner.append( rabbitvcs.vcs.log.Log( date, revision, author, message, changed_paths, parents, head ) ) locale.setlocale(locale.LC_ALL, current_locale) return returner def diff_summarize(self, path1, revision_obj1, path2=None, revision_obj2=None): """ Returns a diff summary between the path(s)/revision(s) @type path1: string @param path1: The absolute path to a file @type revision_obj1: git.Revision() @param revision_obj1: The revision object for path1 @type path2: string @param path2: The absolute path to a file @type revision_obj2: git.Revision() @param revision_obj2: The revision object for path2 """ summary_raw = self.client.diff_summarize( path1, revision_obj1.primitive(), path2, revision_obj2.primitive() ) summary = [] for item in summary_raw: summary.append( rabbitvcs.vcs.log.LogChangedPath(item["path"], item["action"], "", "") ) return summary def annotate(self, path, revision_obj=Revision("head")): """ Returns an annotation for a specified file @type path: string @param path: The absolute path to a tracked file @type revision: string @param revision: HEAD or a sha1 hash """ return self.client.annotate(path, revision_obj.primitive()) def show(self, path, revision_obj): """ Returns a particular file at a given revision object. @type path: string @param path: The absolute path to a file @type revision_obj: git.Revision() @param revision_obj: The revision object for path """ return self.client.show(path, revision_obj.primitive()) def diff(self, path1, revision_obj1, path2=None, revision_obj2=None): """ Returns the diff between the path(s)/revision(s) @type path1: string @param path1: The absolute path to a file @type revision_obj1: git.Revision() @param revision_obj1: The revision object for path1 @type path2: string @param path2: The absolute path to a file @type revision_obj2: git.Revision() @param revision_obj2: The revision object for path2 """ return self.client.diff( path1, revision_obj1.primitive(), path2, revision_obj2.primitive() ) def apply_patch(self, patch_file, base_dir): """ Applies a patch created for this WC. @type patch_file: string @param patch_file: the path to the patch file @type base_dir: string @param base_dir: the base directory from which to interpret the paths in the patch file """ any_failures = False for file, success, rej_file in helper.parse_patch_output( patch_file, base_dir, 1 ): fullpath = os.path.join(base_dir, file) event_dict = dict() event_dict["path"] = file event_dict["mime_type"] = "" # meh if success: event_dict["action"] = _("Patched") # not in pysvn, but # we have a fallback else: any_failures = True event_dict["action"] = _("Patch Failed") # better wording needed? if rej_file: rej_info = { "path": rej_file, "action": _("Rejected Patch"), "mime_type": None, } if self.client.callback_notify: self.client.callback_notify(event_dict) if rej_file: self.client.callback_notify(rej_info) def export(self, path, dest_path, revision): """ Exports a file or directory from a given revision @type path: string @param path: The source file/folder to export @type dest_path: string @param dest_path: The path to put the exported file(s) @type revision: git.Revision @param revision: The revision/tree/commit of the source file being exported """ return self.client.export(path, dest_path, revision.primitive()) def clean( self, path, remove_dir=True, remove_ignored_too=False, remove_only_ignored=False, dry_run=False, force=True, ): return self.client.clean( path, remove_dir, remove_ignored_too, remove_only_ignored, dry_run, force ) def reset(self, path, revision, type=None): """ Reset repository to a specified state @type path: string @param path: The repository file/folder @type revision: git.Revision @param revision: The revision/tree/commit to reset to @type type: string @param type: The type of reset to do. Can be mixed, soft, hard, merge """ return self.client.reset(path, revision.primitive(), type) def get_ignore_files(self, path): paths = [] paths.append(self.client.get_local_ignore_file(path)) paths += self.client.get_global_ignore_files() return paths def get_config_files(self, path): paths = [self.client.get_local_config_file()] return paths def set_callback_notify(self, func): self.client.set_callback_notify(func) def set_callback_progress_update(self, func): self.client.set_callback_progress_update(func) def set_callback_get_user(self, func): self.client.set_callback_get_user(func) def set_callback_get_cancel(self, func): self.client.set_callback_get_cancel(func) def set_callback_cancel(self, func): self.client.callback_cancel = func rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/000077500000000000000000000000001445560650400204755ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/__init__.py000066400000000000000000000000001445560650400225740ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/client.py000066400000000000000000002333651445560650400223410ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function # # client.py # import os, errno import os.path import re import shutil import fnmatch import time import struct from datetime import datetime from mimetypes import guess_type import time import subprocess import dulwich.errors import dulwich.repo import dulwich.porcelain import dulwich.objects from dulwich.index import write_index_dict, SHA1Writer # from dulwich.patch import write_tree_diff from .exceptions import * from . import util from .objects import * from .command import GittyupCommand from rabbitvcs.util import helper from rabbitvcs.util.strings import * import six.moves.tkinter import six.moves.tkinter_messagebox import six ENCODING = "UTF-8" RE_STATUS = re.compile("^([\sA-Z\?]+)\s(?:\S+\s->\s)?(.*?)$") def callback_notify_null(val): pass def callback_get_user(): from pwd import getpwuid pwuid = getpwuid(os.getuid()) user = pwuid[0] fullname = pwuid[4] host = os.getenv("HOSTNAME") return (fullname, "%s@%s" % (user, host)) def callback_get_cancel(): return False def mkdir_p(path): # http://stackoverflow.com/questions/600268/mkdir-p-functionality-in-python try: os.makedirs(path) except OSError as exc: # Python >2.5 if exc.errno == errno.EEXIST and os.path.isdir(path): pass else: raise def get_tmp_path(filename): tmpdir = "/tmp/rabbitvcs" mkdir_p(tmpdir) return os.path.join(tmpdir, filename) class GittyupClient(object): UTF8 = UTF8_ENCODING def __init__(self, path=None, create=False): self.callback_notify = callback_notify_null self.callback_progress_update = None self.callback_get_user = callback_get_user self.callback_get_cancel = callback_get_cancel self.global_ignore_patterns = [] self.git_version = None self.numberOfCommandStages = 0 self.numberOfCommandStagesExecuted = 0 if path: try: self.repo = dulwich.repo.Repo(path) self._load_config() self.global_ignore_patterns = self._get_global_ignore_patterns() except dulwich.errors.NotGitRepository: if create: self.initialize_repository(path) self.global_ignore_patterns = self._get_global_ignore_patterns() else: raise NotRepositoryError() else: self.repo = None # # Start Private Methods # def _initialize_index(self): index_path = self.repo.index_path() f = open(index_path, "wb") try: f = SHA1Writer(f) write_index_dict(f, {}) except: pass f.close() def _get_index(self): if not self.repo.has_index(): self._initialize_index() return self.repo.open_index() def _get_tree_at_head(self): try: tree = self.repo[self.repo[self.repo.head()].tree] except KeyError as e: tree = dulwich.objects.Tree() return tree def _get_tree_from_sha1(self, sha1): return self.repo[self.repo[sha1].tree] def _get_tree_index(self, tree=None): if tree is None: tree = self._get_tree_at_head() tree_index = {} if tree: for item in self.repo.object_store.iter_tree_contents(tree.id): tree_index[item[0].decode(self.UTF8)] = ( item[1], item[2].decode(self.UTF8), ) return tree_index def _get_git_version(self): """ Gets the local git version """ if self.git_version: return self.git_version else: try: proc = subprocess.Popen( ["git", "--version"], stdout=subprocess.PIPE, universal_newlines=True, ) response = proc.communicate()[0].split() version = [int(x) for x in response[2].split(".")] self.git_version = version return self.git_version except Exception as e: return None def _get_global_ignore_patterns(self): """ Get ignore patterns from $GIT_DIR/info/exclude then from core.excludesfile in gitconfig. """ patterns = [] files = self.get_global_ignore_files() for path in files: patterns += self.get_ignore_patterns_from_file(path) return patterns def get_global_ignore_files(self): """ Returns a list of ignore files possible for this repository """ try: git_dir = os.environ["GIT_DIR"] except KeyError: git_dir = os.path.join(self.repo.path, ".git") files = [] excludefile = os.path.join(git_dir, "info", "exclude") files.append(excludefile) try: core_excludesfile = self._config_get(("core",), "excludesfile") if core_excludesfile: files.append(core_excludesfile) except KeyError: pass return files def get_local_ignore_file(self, path): if not os.path.exists(path): return [] if os.path.isfile(path): path = os.path.basename(path) return os.path.join(path, ".gitignore") def get_ignore_patterns_from_file(self, path): """ Read in an ignore patterns file (i.e. .gitignore, $GIT_DIR/info/exclude) and return a list of patterns """ patterns = [] if os.path.isfile(path): file = open(path, "r") try: for line in file: if line == "" or line.startswith("#"): continue patterns.append(line.rstrip("\n")) except: pass file.close() return patterns def get_local_config_file(self): try: git_dir = os.environ["GIT_DIR"] except KeyError: git_dir = os.path.join(self.repo.path, ".git") return git_dir + "/config" def _ignore_file(self, patterns, filename): """ Determine whether the given file should be ignored """ for pattern in patterns: if fnmatch.fnmatch(filename, pattern) and not pattern.startswith("!"): return True return False def _read_directory_tree(self, path, show_ignored_files=False): files = [] directories = [] for root, dirs, filenames in os.walk(path, topdown=True): try: dirs.remove(".git") removed_git_dir = True except ValueError: pass # Find the relative root path of this folder if root == self.repo.path: rel_root = "" else: rel_root = self.get_relative_path(root) for filename in filenames: files.append(os.path.join(rel_root, filename)) for _d in dirs: directories.append(os.path.join(rel_root, _d)) directories.append(rel_root) # Remove duplicates in list directories = list(set(directories)) return (sorted(files), directories) def _get_blob_from_file(self, path): file = open(path, "rb") try: blob = dulwich.objects.Blob.from_string(file.read()) finally: file.close() return blob def _write_blob_to_file(self, path, blob): dirname = os.path.dirname(path) if not os.path.isdir(dirname): os.makedirs(dirname) file = open(path, "wb") try: file.write(blob.data) finally: file.close() def _load_config(self): self.config = self.repo.get_config() def _config_normalize_section(self, section): # If some old code is using string sections, convert to a tuple if isinstance(section, six.string_types): parts = section.split(" ") s1 = parts.pop(0) s2 = " ".join(parts).replace('"', "") section = (s1, s2) return section def _config_set(self, section, key, value): section = self._config_normalize_section(section) return self.config.set(section, key, value) def _config_get(self, section, key): section = self._config_normalize_section(section) return self.config.get(section, key) def _get_config_user(self): try: config_user_name = S(self._config_get(("user",), "name")) config_user_email = S(self._config_get(("user",), "email")) if config_user_name == "" or config_user_email == "": raise KeyError() except KeyError: (config_user_name, config_user_email) = self.callback_get_user() if config_user_name == None and config_user_email == None: return None self._config_set(("user",), "name", config_user_name) self._config_set(("user",), "email", config_user_email) self.config.write_to_path() return "%s <%s>" % (config_user_name, config_user_email) def string_unescape(self, s): # Portable utf-8 string unescape. if isinstance(s, six.text_type): s = s.encode(IDENTITY_ENCODING) s = S(s.decode("unicode_escape"), IDENTITY_ENCODING) return S(s.bytes(IDENTITY_ENCODING)) # # Start Public Methods # def initialize_repository(self, path, bare=False): mkdir_p(path) if bare: dulwich.repo.Repo.init_bare(path) else: dulwich.repo.Repo.init(path) self.set_repository(path) def set_repository(self, path): try: self.repo = dulwich.repo.Repo(path) self._load_config() except dulwich.errors.NotGitRepository: raise NotRepositoryError() def get_repository(self): return self.repo.path def find_repository_path(self, path): path_to_check = S(path) while path_to_check != "/" and path_to_check != "": if os.path.isdir(os.path.join(path_to_check, ".git")): return path_to_check path_to_check = os.path.split(path_to_check)[0] return None def get_relative_path(self, path): path = S(path) if path == self.repo.path: return "." return util.relativepath(self.repo.path, path) def get_absolute_path(self, path): path = S(path) if path == ".": return self.repo.path return os.path.join(self.repo.path, path).rstrip("/") def track(self, name): self.repo.refs.set_symbolic_ref(b"HEAD", name) def is_tracking(self, name): return self.repo.refs.read_ref(b"HEAD")[5:] == name def tracking(self): return self.repo.refs.read_ref(b"HEAD")[5:] def head(self): return self.repo.refs[b"HEAD"] def stage(self, paths): """ Stage files to be committed or tracked @type paths: list @param paths: A list of files """ index = self._get_index() to_stage = [] if isinstance(paths, (str, six.text_type)): paths = [paths] for path in paths: relative_path = self.get_relative_path(path) absolute_path = self.get_absolute_path(path) self.notify( { "action": "Staged", "path": absolute_path, "mime_type": guess_type(absolute_path)[0], } ) to_stage.append(S(relative_path)) self.repo.stage(to_stage) def stage_all(self): """ Stage all files in a repository to be committed or tracked """ index = self._get_index() for status in self.status(): if status in [AddedStatus, RemovedStatus, ModifiedStatus]: abs_path = self.get_absolute_path(status.path) relative_path = self.get_relative_path(status.path) if os.path.isfile(abs_path): self.stage(relative_path) if status == MissingStatus: del index[status.path] index.write() def unstage(self, paths): """ Unstage files so they are not committed or tracked @type paths: list @param paths: A list of files """ index = self._get_index() tree = self._get_tree_index() if isinstance(paths, (str, six.text_type)): paths = [paths] for path in paths: relative_path = S(self.get_relative_path(path)).bytes() if relative_path in index: if relative_path in tree: ( ctime, mtime, dev, ino, mode, uid, gid, size, blob_id, flags, ) = index[relative_path] (mode, blob_id) = tree[relative_path] # If the file is locally modified, set these vars to 0 # I'm not sure yet why this needs to happen, but it does # in order for the file to appear modified and not normal blob = self._get_blob_from_file(path) if blob.id != blob_id: ctime = 0 mtime = 0 dev = 0 ino = 0 uid = 0 gid = 0 size = 0 index[relative_path] = ( ctime, mtime, dev, ino, mode, uid, gid, size, blob_id, flags, ) else: del index[relative_path] else: if relative_path in tree: index[relative_path] = ( 0, 0, 0, 0, tree[relative_path][0], 0, 0, 0, tree[relative_path][1], 0, ) self.notify( {"action": "Unstaged", "path": path, "mime_type": guess_type(path)[0]} ) index.write() def unstage_all(self): """ Unstage all files so they are not committed or tracked @type paths: list @param paths: A list of files """ index = self._get_index() for status in self.status(): abs_path = self.get_absolute_path(status.path) if os.path.isfile(abs_path): self.unstage(abs_path) def get_staged(self): """ Gets a list of files that are staged """ staged = [] tree = self._get_tree_at_head() index = self._get_index() if len(tree) > 0: for item in index.changes_from_tree(self.repo.object_store, tree.id): ((old_name, new_name), (old_mode, new_mode), (old_sha, new_sha)) = item if new_name: staged.append(new_name) if old_name and old_name != new_name: staged.append(old_name) else: for path in index: staged.append(path) return staged def is_staged(self, path, staged_files=None): """ Determines if the specified path is staged @type path: string @param path: A file path @rtype boolean """ if not staged_files: staged_files = self.get_staged() relative_path = self.get_relative_path(path) return relative_path in staged_files def branch(self, name, commit_sha=None, track=False): """ Create a new branch @type name: string @param name: The name of the new branch @type commit_sha: string @param commit_sha: A commit sha to branch from. If None, branches from head @type track: boolean @param track: Whether or not to track the new branch, or just create it """ cmd = ["git", "branch"] if track: cmd.append("-t") if commit_sha is None: commit_sha = self.repo.head() cmd += [name, commit_sha] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) def branch_delete(self, name): """ Delete a branch @type name: string @param name: The name of the branch """ ref_name = "refs/heads/%s" % name refs = self.repo.get_refs() if ref_name in refs: if self.is_tracking(ref_name): self.track("refs/heads/master") del self.repo.refs[ref_name] def branch_rename(self, old_name, new_name): """ Rename a branch @type old_name: string @param old_name: The name of the branch to be renamed @type new_name: string @param new_name: The name of the new branch """ old_ref_name = "refs/heads/%s" % old_name new_ref_name = "refs/heads/%s" % new_name refs = self.repo.get_refs() if old_ref_name in refs: self.repo.refs[new_ref_name] = self.repo.refs[old_ref_name] if self.is_tracking(old_ref_name): self.track(new_ref_name) del self.repo.refs[old_ref_name] def local_branch_list(self, commit_sha=None): """ List all local branches """ cmd = ["git", "branch", "-lvv", "--no-abbrev"] if commit_sha: cmd += ["--contains", commit_sha] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) branches = [] for line in stdout: if not line: continue components = line.split() if components[0] != "*": components.insert(0, "") tracking = components.pop(0) == "*" and True or False if components[0] == "(no": name = components.pop(0) + " " + components.pop(0) elif components[0] == "(HEAD": continue # Detached head is not a branch. else: name = components.pop(0) revision = components.pop(0) upstream = None if components[0].startswith("["): upstream = components.pop(0) try: upstream = upstream[1:upstream.find("/")] except: upstream = None message = " ".join(components) branches.append( { "tracking": tracking, "name": name, "revision": revision, "upstream": upstream, "message": message, } ) return branches def branch_list(self, commit_sha=None): """ List all branches """ """ refs = self.repo.get_refs() branches = [] for ref,branch_sha in refs.items(): if ref.startswith("refs/heads"): branch = Branch(ref[11:], branch_sha, self.repo[branch_sha]) branches.append(branch) return branches """ cmd = ["git", "branch", "-lv", "--no-abbrev", "-a"] if commit_sha: cmd += ["--contains", commit_sha] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) branches = [] for line in stdout: if not line: continue components = line.split() if components[0] != "*": components.insert(0, "") tracking = components.pop(0) == "*" and True or False if components[0] == "(no": name = components.pop(0) + " " + components.pop(0) elif components[0] == "(HEAD": continue # Detached head is not a branch. else: name = components.pop(0) revision = components.pop(0) message = " ".join(components) branches.append( { "tracking": tracking, "name": name, "revision": revision, "message": message, } ) return branches def checkout(self, paths=[], revision="HEAD"): """ Checkout a series of paths from a tree or commit. If no tree or commit information is given, it will check out the files from head. If no paths are given, all files will be checked out from head. @type paths: list @param paths: A list of files to checkout @type revision: string @param revision: The sha or branch to checkout """ if len(paths) == 1 and paths[0] == self.repo.path: paths = [] cmd = ["git", "checkout", "-m", revision] + paths try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) def clone(self, host, path, bare=False, origin="origin"): """ Clone a repository @type host: string @param host: The url of the git repository @type path: string @param path: The path to clone to @type bare: boolean @param bare: Create a bare repository or not @type origin: string @param origin: Specify the origin of the repository """ self.numberOfCommandStages = 3 more = ["-o", "origin", "--progress"] if bare: more.append("--bare") base_dir = os.path.split(path)[0] cmd = ["git", "clone", host, path] + more isUsername = False isPassword = False self.modifiedHost = host try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=base_dir, notify=self.notify_and_parse_progress, cancel=self.get_cancel(), ).execute() if stdout[1].find("could not read Username") > -1: # Prompt for username if it does not exist in the url. isUsername, originalRemoteUrl = self.promptUsername(self.modifiedHost) # Prompt for password if a username exists in the remote url without a password. isPassword, originalRemoteUrl2 = self.promptPassword(self.modifiedHost) elif stdout[1].find("could not read Password") > -1: # Prompt for password if a username exists in the remote url without a password. isPassword, originalRemoteUrl = self.promptPassword(self.modifiedHost) if isUsername == True or isPassword == True: # Update the cmd with the username and password. cmd = ["git", "clone", self.modifiedHost, path] + more # Try again. (status, stdout, stderr) = GittyupCommand( cmd, cwd=base_dir, notify=self.notify_and_parse_progress, cancel=self.get_cancel(), ).execute() except GittyupCommandError as e: self.callback_notify(e) # If we prompted for a username or password then it will now be written to the config. Remove it now before continuing. if isUsername == True or isPassword == True: # Load new config. self.repo = dulwich.repo.Repo(path) self._load_config() # Write original url back to config. self._config_set('remote "origin"', "url", host) self.config.write_to_path() def commit( self, message, parents=None, committer=None, commit_time=None, commit_timezone=None, author=None, author_time=None, author_timezone=None, encoding=None, commit_all=False, ): """ Commit staged files to the local repository @type message: string @param message: The log message @type parents: list @param parents: A list of parent SHAs. Defaults to head. @type committer: string @param committer: The person committing. Defaults to "user.name " @type commit_time: int @param commit_time: The commit time. Defaults to time.time() @type commit_timezone: int @param commit_timezone: The commit timezone. Defaults to local timezone. @type author: string @param author: The author of the file changes. Defaults to "user.name " @type author_time: int @param author_time: The author time. Defaults to time.time() @type author_timezone: int @param author_timezone: The author timezone. Defaults to commit timezone. @type encoding: string @param encoding: The encoding of the commit. Defaults to UTF-8. @type commit_all: boolean @param commit_all: Stage all changed files before committing """ if commit_all: self.stage_all() initial_commit = False if encoding is None: encoding = ENCODING if commit_timezone is None: commit_timezone = helper.utc_offset() commit_id = self.repo.do_commit( **helper.to_bytes( { "message": message, "committer": committer, "commit_timestamp": commit_time, "commit_timezone": commit_timezone, "author": author, "author_timestamp": author_time, "author_timezone": author_timezone, "encoding": encoding, "merge_heads": parents, }, encoding, ) ) branch_full = self.repo.refs.read_ref(b"HEAD") if branch_full is not None: branch_components = re.search(b"refs/heads/(.+)", branch_full) if branch_components != None: branch = branch_components.group(1) self.notify("[%s] -> %s" % (S(commit_id), S(branch))) self.notify("To branch: " + S(branch)) # Print tree changes. # dulwich.patch.write_tree_diff(sys.stdout, self.repo.object_store, commit.tree, commit.id) return commit_id def remove(self, paths): """ Remove path from the repository. Also deletes the local file. @type paths: list @param paths: A list of paths to remove """ if isinstance(paths, (str, six.text_type)): paths = [paths] index = self._get_index() for path in paths: relative_path = self.get_relative_path(path) if relative_path in index: del index[relative_path] os.remove(path) index.write() def move(self, source, dest): """ Move a file within the repository @type source: string @param source: The source file @type dest: string @param dest: The destination. If dest exists as a directory, source will be added as a child. Otherwise, source will be renamed to dest. """ index = self._get_index() relative_source = self.get_relative_path(source) relative_dest = self.get_relative_path(dest) # Get a list of affected files so we can update the index source_files = [] if os.path.isdir(source): for name in index: name = name.decode(self.UTF8) if name.startswith(relative_source): source_files.append(name) else: source_files.append(relative_source) # Rename the affected index entries for source_file in source_files: new_path = source_file.replace(relative_source, relative_dest) if os.path.isdir(dest): new_path = os.path.join(new_path, os.path.basename(source_file)) source_file = source_file.encode(self.UTF8) index[new_path.encode(self.UTF8)] = index[source_file] del index[source_file] index.write() # Actually move the file/folder shutil.move(source, dest) def pull(self, repository="origin", refspec="master", options=None): """ Fetch objects from a remote repository and merge with the local repository @type repository: string @param repository: The name of the repository @type refspec: string @param refspec: The branch name to pull from """ self.numberOfCommandStages = 2 cmd = ["git", "pull", "--progress"] if options != None: if options.count("rebase"): cmd.append("--rebase") if options.count("all"): cmd.append("--all") else: cmd.append(repository) cmd.append(refspec) # Setup the section name in the config for the remote target. remoteKey = 'remote "' + repository + '"' isUsername = False isPassword = False try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify_and_parse_git_push, cancel=self.get_cancel(), ).execute() if stdout[0].find("could not read Username") > -1: # Prompt for username if it does not exist in the url. isUsername, originalRemoteUrl = self.promptUsername(remoteKey) # Prompt for password if a username exists in the remote url without a password. isPassword, originalRemoteUrl2 = self.promptPassword(remoteKey) elif stdout[0].find("could not read Password") > -1: # Prompt for password if a username exists in the remote url without a password. isPassword, originalRemoteUrl = self.promptPassword(remoteKey) if isUsername == True or isPassword == True: # Try again. (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify_and_parse_git_push, cancel=self.get_cancel(), ).execute() except GittyupCommandError as e: self.callback_notify(e) # If we prompted for a password and write it to the config, remove it now before continuing. if isUsername == True or isPassword == True: # Write original url back to config. self._config_set(remoteKey, "url", originalRemoteUrl) self.config.write_to_path() def push( self, repository="origin", refspec="master", tags=True, force_with_lease=False ): """ Push objects from the local repository into the remote repository and merge them. @type repository: string @param repository: The name of the repository @type refspec: string @param refspec: The branch name to pull from @type tags: boolean @param tags: True to include tags in push, False to omit """ self.numberOfCommandStages = 2 cmd = ["git", "push", "--progress"] if tags: cmd.extend(["--tags"]) if force_with_lease: cmd.extend(["--force-with-lease"]) cmd.extend([repository, refspec]) # Setup the section name in the config for the remote target. remoteKey = 'remote "' + repository + '"' isUsername = False isPassword = False try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify_and_parse_git_push, cancel=self.get_cancel(), ).execute() if stdout[0].find("could not read Username") > -1: # Prompt for username if it does not exist in the url. isUsername, originalRemoteUrl = self.promptUsername(remoteKey) # Prompt for password if a username exists in the remote url without a password. isPassword, originalRemoteUrl2 = self.promptPassword(remoteKey) elif stdout[0].find("could not read Password") > -1: # Prompt for password if a username exists in the remote url without a password. isPassword, originalRemoteUrl = self.promptPassword(remoteKey) if isUsername == True or isPassword == True: # Try again. (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify_and_parse_git_push, cancel=self.get_cancel(), ).execute() except GittyupCommandError as e: self.callback_notify(e) # If we prompted for a password and write it to the config, remove it now before continuing. if isUsername == True or isPassword == True: # Write original url back to config. self._config_set(remoteKey, "url", originalRemoteUrl) self.config.write_to_path() def onUsername(self, window, username, remoteKey, originalRemoteUrl, isOk): if isOk == True: if username == "": six.moves.tkinter_messagebox.showinfo( "Error", "Please enter a username.", parent=window ) return else: # Insert password into url. newRemoteUrl = originalRemoteUrl.replace("://", "://" + username + "@") if remoteKey.find("://") == -1: # Write url temporarily back to config. self._config_set(remoteKey, "url", newRemoteUrl) self.config.write_to_path() else: # Change the url in memory, since we don't have a config yet. self.modifiedHost = newRemoteUrl # Close dialog. window.destroy() def onPassword(self, window, password, remoteKey, originalRemoteUrl, isOk): if isOk == True: if password == "": six.moves.tkinter_messagebox.showinfo( "Error", "Please enter a password.", parent=window ) return else: # Insert password into url. newRemoteUrl = originalRemoteUrl.replace("@", ":" + password + "@") if remoteKey.find("://") == -1: # Write url temporarily back to config. self._config_set(remoteKey, "url", newRemoteUrl) self.config.write_to_path() else: # Change the url in memory, since we don't have a config yet. self.modifiedHost = newRemoteUrl # Close dialog. window.destroy() def promptUsername(self, remoteKey): """ If the github url contains no username, prompt for one and write the url back to the config. Note, we'll set the url back to its original (without the password) after the call completes. https://user@github.com/path/repositoryName.git """ isUsername = False originalRemoteUrl = remoteKey self.modifiedHost = originalRemoteUrl if remoteKey.find("://") == -1: # Get existing url from config, otherwise just use what was provided (the url from cloning, etc). originalRemoteUrl = S(self._config_get(remoteKey, "url")) if originalRemoteUrl.find("@") == -1: # No username or password. Prompt for both. Create dialog. window = six.moves.tkinter.Tk() window.title("Please enter your username") window.resizable(0, 0) window["padx"] = 40 window["pady"] = 20 textFrame = six.moves.tkinter.Frame(window) # Create textbox label. entryLabel = six.moves.tkinter.Label(textFrame) entryLabel["text"] = "Username:" entryLabel.pack(side=six.moves.tkinter.LEFT) # Create textbox. entryWidget = six.moves.tkinter.Entry(textFrame) entryWidget["width"] = 25 entryWidget.bind( "", ( lambda event: self.onUsername( window, entryWidget.get(), remoteKey, originalRemoteUrl, True ) ), ) entryWidget.bind( "", ( lambda event: self.onUsername( window, entryWidget.get(), remoteKey, originalRemoteUrl, True ) ), ) entryWidget.pack(side=six.moves.tkinter.LEFT) entryWidget.focus() textFrame.pack() # Create OK button. button = six.moves.tkinter.Button( window, width=5, text="OK", command=( lambda: self.onUsername( window, entryWidget.get(), remoteKey, originalRemoteUrl, True ) ), ) button.pack(side=six.moves.tkinter.RIGHT) # Create Cancel button. button = six.moves.tkinter.Button( window, width=5, text="Cancel", command=( lambda: self.onUsername( window, entryWidget.get(), remoteKey, originalRemoteUrl, False ) ), ) button.pack(side=six.moves.tkinter.RIGHT) # Position window in center of screen. self.center(window) # Show dialog. window.mainloop() isUsername = True return isUsername, originalRemoteUrl def promptPassword(self, remoteKey): """ If a username exists in the github url without a password, prompt the user and write the url back to the config. Note, we'll set the url back to its original (without the password) after the call completes. https://user@github.com/path/repositoryName.git """ isPassword = False originalRemoteUrl = remoteKey self.modifiedHost = originalRemoteUrl if remoteKey.find("://") == -1: # Get existing url from config, otherwise just use what was provided (the url from cloning, etc). originalRemoteUrl = S(self._config_get(remoteKey, "url")) # If the url contains a username (@) without a password (:), then prompt for a password. if originalRemoteUrl.find("@") > -1 and originalRemoteUrl.rfind(":") <= 5: # Prompt for password. Create dialog. window = six.moves.tkinter.Tk() window.title("Please enter your password") window.resizable(0, 0) window["padx"] = 40 window["pady"] = 20 textFrame = six.moves.tkinter.Frame(window) # Create textbox label. entryLabel = six.moves.tkinter.Label(textFrame) entryLabel["text"] = "Password:" entryLabel.pack(side=six.moves.tkinter.LEFT) # Create textbox. entryWidget = six.moves.tkinter.Entry(textFrame) entryWidget["show"] = "*" entryWidget["width"] = 25 entryWidget.bind( "", ( lambda event: self.onPassword( window, entryWidget.get(), remoteKey, originalRemoteUrl, True ) ), ) entryWidget.bind( "", ( lambda event: self.onPassword( window, entryWidget.get(), remoteKey, originalRemoteUrl, True ) ), ) entryWidget.pack(side=six.moves.tkinter.LEFT) entryWidget.focus() textFrame.pack() # Create OK button. button = six.moves.tkinter.Button( window, width=5, text="OK", command=( lambda: self.onPassword( window, entryWidget.get(), remoteKey, originalRemoteUrl, True ) ), ) button.pack(side=six.moves.tkinter.RIGHT) # Create Cancel button. button = six.moves.tkinter.Button( window, width=5, text="Cancel", command=( lambda: self.onPassword( window, entryWidget.get(), remoteKey, originalRemoteUrl, False ) ), ) button.pack(side=six.moves.tkinter.RIGHT) # Position window in center of screen. self.center(window) # Show dialog. window.mainloop() isPassword = True return isPassword, originalRemoteUrl def fetch(self, repository, branch=None): """ Fetch objects from a remote repository. This will not merge the files into the local working copy, use pull for that. @type repository: string @param repository: The git repository from which to fetch @type branch: string @param branch: The git branch from which to fetch """ cmd = ["git", "fetch", repository] if branch: cmd.append(branch) try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) def fetch_all(self): cmd = ["git", "fetch", "--all"] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) def merge(self, branch): cmd = ["git", "merge", branch] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) def remote_add(self, name, host): """ Add a remote repository @type name: string @param name: The name to give to the remote repository @type host: string @param host: The git url to add """ cmd = ["git", "remote", "add", name, host] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) def remote_rename(self, current_name, new_name): """ Rename a remote repository @type current_name: string @param current_name: The current name of the repository @type new_name: string @param new_name: The name to give to the remote repository """ cmd = ["git", "remote", "rename", current_name, new_name] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) def remote_set_url(self, name, url): """ Change a remote repository's url @type name: string @param name: The name of the repository @type url: string @param url: The url for the repository """ cmd = ["git", "remote", "set-url", name, url] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) def remote_delete(self, name): """ Remove a remote repository @type name: string @param name: The name of the remote repository to remove """ cmd = ["git", "remote", "rm", name] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) def remote_list(self): """ Return a list of the remote repositories @rtype list @return A list of dicts with keys: remote, url, fetch """ cmd = ["git", "remote", "-v"] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) stdout = [] returner = [] for line in stdout: components = line.split() if components: name = components[0] host = components[1] add = True for item in returner: if item["name"] == name: add = False if add: returner.append({"name": name, "host": host}) return returner def tag(self, name, message, revision="HEAD"): """ Create a tag object @type name: string @param name: The name to give the tag @type message: string @param message: A log message @type revision: string @param revision: The revision to tag. Defaults to HEAD """ dulwich.porcelain.tag(self.repo, name, objectish=revision, message=message) def tag_delete(self, name): """ Delete a tag @type name: string @param name: The name of the tag to delete """ ref_name = S("refs/tags/%s" % name).bytes() refs = self.repo.get_refs() if ref_name in refs: del self.repo.refs[ref_name] def tag_list(self): """ Return a list of Tag objects """ refs = self.repo.get_refs() tags = [] for ref, tag_sha in list(refs.items()): if S(ref).startswith("refs/tags"): if type(self.repo[tag_sha]) == dulwich.objects.Commit: tag = CommitTag(ref[10:], tag_sha, self.repo[tag_sha]) else: tag = Tag(tag_sha, self.repo[tag_sha]) tags.append(tag) return tags def status_porcelain(self, path): if os.path.isdir(path): (files, directories) = self._read_directory_tree(path) else: files = [self.get_relative_path(path)] directories = [] files_hash = {} for file in files: files_hash[file] = True cmd = ["git", "status", "--porcelain", path] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify ).execute() except GittyupCommandError as e: self.callback_notify(e) statuses = [] modified_files = [] for line in stdout: components = RE_STATUS.match(line) if components: status = components.group(1) strip_status = status.strip() path = self.string_unescape(components.group(2)) if path[0] == '"' and path[-1] == '"': path = path[1:-1] if status == " D": statuses.append(MissingStatus(path)) elif any(c in strip_status for c in ["M", "R", "U"]): statuses.append(ModifiedStatus(path)) elif strip_status in ["A", "C"]: statuses.append(AddedStatus(path)) elif strip_status == "D": statuses.append(RemovedStatus(path)) elif strip_status == "??": statuses.append(UntrackedStatus(path)) modified_files.append(path) try: del files_hash[path] except Exception as e: pass # Determine untracked directories cmd = ["git", "clean", "-nd", self.repo.path] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify ).execute() except GittyupCommandError as e: self.callback_notify(e) untracked_directories = [] for line in stdout: components = re.match("^(Would remove)\s(.*?)$", line) if components: untracked_path = components.group(2) if untracked_path[-1] == "/": untracked_directories.append(untracked_path[:-1]) # Determine the ignored files and directories in Repo cmd = ["git", "clean", "-ndX", self.repo.path] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify ).execute() except GittyupCommandError as e: self.callback_notify(e) ignored_directories = [] for line in stdout: components = re.match("^(Would remove)\s(.*?)$", line) if components: ignored_path = components.group(2) if ignored_path[-1] == "/": ignored_directories.append(ignored_path[:-1]) next statuses.append(IgnoredStatus(ignored_path)) self.ignored_paths.append(ignored_path) try: del files_hash[ignored_path] except Exception as e: pass for file, data in list(files_hash.items()): ignore_file = False untracked_file = False for ignored_path in ignored_directories: if S(ignored_path) in file: ignore_file = True break for untracked_path in untracked_directories: if S(untracked_path) in file: untracked_file = True break if untracked_file == True: statuses.append(UntrackedStatus(file)) if ignore_file == True: self.ignored_paths.append(file) elif ignore_file == True: statuses.append(IgnoredStatus(file)) self.ignored_paths.append(file) else: statuses.append(NormalStatus(file)) # Determine status of folders based on child contents for d in directories: d_status = NormalStatus(d) # Check if directory is untracked or a sub-directory of an untracked directory for untracked_path in untracked_directories: if untracked_path in d: d_status = UntrackedStatus(d) break dirPattern = "/%s/" % d if len(d) == 0: dirPattern = "/" # Check if directory includes modified files for file in modified_files: if ("/%s" % file).startswith( dirPattern ): # fix, when file startwith same prefix as directory, fix status for root repo path "" d_status = ModifiedStatus(d) break # Check if directory is ignored for ignored_path in ignored_directories: if ignored_path in d: d_status = IgnoredStatus(d) break statuses.append(d_status) return statuses def status_dulwich(self, path): tree = self._get_tree_index() index = self._get_index() if os.path.isdir(path): (files, directories) = self._read_directory_tree(path) else: files = [self.get_relative_path(path)] directories = [] files_hash = {} for file in files: files_hash[file] = True statuses = [] # Calculate statuses for files in the current HEAD modified_files = [] for name in tree: try: if index[name]: inIndex = True except Exception as e: inIndex = False if inIndex: absolute_path = self.get_absolute_path(name) if os.path.isfile(absolute_path): # Cached, determine if modified or not blob = self._get_blob_from_file(absolute_path) if blob.id == tree[name][1]: statuses.append(NormalStatus(name)) else: modified_files.append(name) statuses.append(ModifiedStatus(name)) else: modified_files.append(name) statuses.append(MissingStatus(name)) else: modified_files.append(name) statuses.append(RemovedStatus(name)) try: del files_hash[name] except Exception as e: pass # Calculate statuses for untracked files for name, data in list(files_hash.items()): try: inTreeIndex = tree[name] except Exception as e: inTreeIndex = False try: inIndex = index[name] except Exception as e: inIndex = False if inIndex and not inTreeIndex: modified_files.append(name) statuses.append(AddedStatus(name)) continue # Generate a list of appropriate ignore patterns patterns = [] path_to_check = os.path.dirname(self.get_absolute_path(name)) while path_to_check != self.repo.path: patterns += self.get_ignore_patterns_from_file( self.get_local_ignore_file(path_to_check) ) path_to_check = os.path.split(path_to_check)[0] patterns += self.get_ignore_patterns_from_file( self.get_local_ignore_file(self.repo.path) ) patterns += self.global_ignore_patterns if not self._ignore_file(patterns, os.path.basename(name)): statuses.append(UntrackedStatus(name)) else: self.ignored_paths.append(name) # Determine status of folders based on child contents for d in directories: d_status = NormalStatus(d) for file in modified_files: if os.path.join(d, os.path.basename(file)) == file: d_status = ModifiedStatus(d) break statuses.append(d_status) return statuses def get_all_ignore_file_paths(self, path): return self.ignored_paths def status(self, path): # TODO - simply get this from the status implementation / avoid global state self.ignored_paths = [] return self.status_porcelain(path) def log(self, path="", skip=0, limit=None, revision="", showtype="all"): cmd = [ "git", "--no-pager", "log", "--numstat", "--parents", "--pretty=fuller", "--date-order", "--date=default", "-m", ] if showtype == "all": cmd.append("--all") if limit: cmd.append("-%s" % limit) if skip: cmd.append("--skip=%s" % skip) if revision: if showtype == "push": cmd.append("%s.." % revision) else: cmd.append(revision) if path == self.repo.path: path = "" if path: cmd += ["--", path] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify ).execute() except GittyupCommandError as e: self.callback_notify(e) return [] revisions = [] revision = {} changed_file = {} pattern_from = re.compile(r" \(from (.*)\)") last_commitId = "" for line in stdout: if line == "": continue if line[0:6] == "commit": match = pattern_from.search(line) commit_line = re.sub(" \(from.*\)", "", line).split(" ") fromPath = "" if match: fromPath = match.group(1) if revision: if "changed_paths" not in revision: revision["changed_paths"] = {} if last_commitId != commit_line[1]: revisions.append(revision) revision = {} elif "message" in revision: del revision["message"] if len(fromPath) > 0: if "changed_paths" not in revision: revision["changed_paths"] = [] changed_file = { "additions": "-", "removals": "-", "path": "Diff with parent : %s " % fromPath, } revision["changed_paths"].append(changed_file) changed_file = {} revision["commit"] = commit_line[1] last_commitId = revision["commit"] revision["parents"] = [] for parent in commit_line[2:]: revision["parents"].append(parent) elif line[0:7] == "Author:": revision["author"] = line[7:].strip() elif line[0:11] == "AuthorDate:": revision["author_date"] = line[11:].strip() elif line[0:7] == "Commit:": revision["committer"] = line[7:].strip() elif line[0:11] == "CommitDate:": revision["commit_date"] = line[11:].strip() elif line[0:4] == " ": message = line[4:] if "message" not in revision: revision["message"] = "" else: revision["message"] += "\n" revision["message"] = revision["message"] + message elif line[0].isdigit() or line[0] in "-": file_line = line.split("\t") if "changed_paths" not in revision: revision["changed_paths"] = [] if len(file_line) == 3: changed_file = { "additions": file_line[0], "removals": file_line[1], "path": self.string_unescape(file_line[2]), } if ( changed_file["path"][0] == '"' and changed_file["path"][-1] == '"' ): changed_file["path"] = changed_file["path"][1:-1] revision["changed_paths"].append(changed_file) if revision: revisions.append(revision) return revisions def annotate(self, path, revision_obj="HEAD"): """ Returns an annotation for a specified file @type path: string @param path: The absolute path to a tracked file @type revision: string @param revision: HEAD or a sha1 hash """ relative_path = self.get_relative_path(path) cmd = ["git", "annotate", "-l", revision_obj, relative_path] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) stdout = [] returner = [] for line in stdout: components = re.split("\t", line, 3) if len(components) < 4: continue dt = datetime(*time.strptime(components[2][:-6], "%Y-%m-%d %H:%M:%S")[:-2]) message = components[3].split(")", 1) code = message[1] if len(components) == 5: code = components[4] returner.append( { "revision": components[0], "author": components[1][1:], "date": dt, "line": code, "number": message[0], } ) return returner def show(self, path, revision_obj): """ Returns a particular file at a given revision object. @type path: string @param path: The absolute path to a file @type revision_obj: git.Revision() @param revision_obj: The revision object for path """ if not revision_obj: revision_obj = "HEAD" relative_path = self.get_relative_path(path) cmd = ["git", "show", "%s:%s" % (revision_obj, relative_path)] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) stdout = [] return "\n".join(stdout) def diff( self, path1, revision_obj1, path2=None, revision_obj2=None, summarize=False ): """ Returns the diff between the path(s)/revision(s) @type path1: string @param path1: The absolute path to a file @type revision_obj1: git.Revision() @param revision_obj1: The revision object for path1 @type path2: string @param path2: The absolute path to a file @type revision_obj2: git.Revision() @param revision_obj2: The revision object for path2 """ relative_path1 = None relative_path2 = None if path1: relative_path1 = self.get_relative_path(path1) if path2: relative_path2 = self.get_relative_path(path2) cmd = ["git", "diff"] if summarize: cmd.append("--name-status") if revision_obj1: cmd += [revision_obj1] if revision_obj2 and path2: cmd += [revision_obj2] if relative_path1: cmd += [relative_path1] if relative_path2 and relative_path2 != relative_path1: cmd += [relative_path2] try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) stdout = [] return "".join(x + "\n" for x in stdout) def diff_summarize(self, path1, revision_obj1, path2=None, revision_obj2=None): results = self.diff(path1, revision_obj1, path2, revision_obj2, True) summary = [] for line in results.split("\n"): if not line: continue (action, path) = (line + "\t").split("\t")[:2] summary.append({"action": action, "path": path}) return summary def export(self, path, dest_path, revision): """ Exports a file or directory from a given revision @type path: string @param path: The source file/folder to export @type dest_path: string @param dest_path: The path to put the exported file(s) @type revision: string @param revision: The revision/tree/commit of the source file being exported """ tmp_file = get_tmp_path("rabbitvcs-git-export.tar") cmd1 = ["git", "archive", "--format", "tar", "-o", tmp_file, revision, path] cmd2 = ["tar", "-xf", tmp_file, "-C", dest_path] mkdir_p(dest_path) try: (status, stdout, stderr) = GittyupCommand( cmd1, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() (status, stdout, stderr) = GittyupCommand( cmd2, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) stdout = [] self.notify("%s at %s exported to %s" % (path, revision, dest_path)) return "\n".join(stdout) def clean( self, path, remove_dir=True, remove_ignored_too=False, remove_only_ignored=False, dry_run=False, force=True, ): cmd = ["git", "clean"] if remove_dir: cmd.append("-d") if remove_ignored_too: cmd.append("-x") if remove_only_ignored: cmd.append("-X") if dry_run: cmd.append("-n") if force: cmd.append("-f") relative_path = self.get_relative_path(path) cmd.append(relative_path) try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) return def reset(self, path, revision, type=None): relative_path = self.get_relative_path(path) cmd = ["git", "reset"] if type: cmd.append("--%s" % type) cmd.append(revision) if relative_path: cmd.append(relative_path) try: (status, stdout, stderr) = GittyupCommand( cmd, cwd=self.repo.path, notify=self.notify, cancel=self.get_cancel() ).execute() except GittyupCommandError as e: self.callback_notify(e) return def set_callback_notify(self, func): self.callback_notify = func def set_callback_progress_update(self, func): self.callback_progress_update = func def set_callback_get_user(self, func): self.callback_get_user = func def set_callback_get_cancel(self, func): self.callback_get_cancel = func def notify(self, data): self.callback_notify(data) def notify_and_parse_progress(self, data): # When progress is requested to a git command, it will # respond with the current operation, and that operations current progress # in the following format: ": % (/)". # # When a command has reached 100% the format of this final message assumes the formatt: # ": 100% (/), , done." returnData = {"action": "", "path": "", "mime_type": ""} # print "parsing message: " + str(data) # If data is already a dict, we'll assume it's already been parsed, and return. if isinstance(data, dict): self.notify(data) return # Is this an error? message_components = re.search("^([eE]rror|[fF]atal): (.+)", data) if message_components != None: returnData["action"] = "Error" returnData["path"] = message_components.group(2) self.notify(returnData) return # Check to see if this is a remote command. remote_check = re.search("^(remote: )(.+)$", data) if remote_check != None: returnData["action"] = "Remote" message = remote_check.group(2) else: message = data # First, we'll test to see if this is a progress notification. if "%" not in message: # No, this is just a regular message. # Some messages have a strage tendancy to append a non-printable character, # followed by a right square brace and a capitol "K". This tests for, and # strips these superfluous characters. message_components = re.search("^(.+).\[K", message) if message_components != None: returnData["path"] = message_components.group(1) else: returnData["path"] = message self.notify(returnData) return # Extract the percentage, which will be all numerals directly # prior to '%'. message_components = re.search("^(.+): +([0-9]+)%", message) if message_components == None: print("Error: failed to parse git string: " + data) return fraction = ( float(message_components.group(2)) / 100 ) # Convert percentage to fraction. current_action = message_components.group(1) # If we're at 0%, then we want to notify which action we're performing. if fraction == 0: returnData["path"] = current_action self.notify(returnData) # print "stage fraction: " + str (fraction) # If we're using a number of stages, adjust the fraction acordingly. if self.numberOfCommandStages > 0: fraction = ( self.numberOfCommandStagesExecuted + fraction ) / self.numberOfCommandStages # If we've finished the current stage (100%). if "done" in message: self.numberOfCommandStagesExecuted += 1 # If we've registered a callback for progress, update with the new fraction. if self.callback_progress_update != None: # print "setting pbar: " + str(fraction) self.callback_progress_update(fraction) # If we've finished the whole command (all stages). if fraction == 1 and "done" in message: # Reset stage variables. self.numberOfCommandStages = 0 self.numberOfCommandStagesExecuted = 0 def notify_and_parse_git_pull(self, data): return_data = {"action": "", "path": "", "mime_type": ""} message_parsed = False # Look for "From" line (e.g. "From ssh://server:22/my_project") message_components = re.search("^From (.+)", data) if message_components != None: return_data["action"] = "From" return_data["path"] = message_components.group(1) message_parsed = True # Look for "Branch" line (e.g. "* branch master -> FETCH_HEAD") message_components = re.search("\* branch +([A-z0-9]+) +-> (.+)", data) if message_components != None: return_data["action"] = "Branch" return_data["path"] = ( message_components.group(1) + " -> " + message_components.group(2) ) message_parsed = True # Look for a file line (e.g. "src/somefile.py | 5 -++++") message_components = re.search(" +(.+) +\| *([0-9]+) ([+-]+)", data) if message_components != None: return_data["action"] = "Modified" return_data["path"] = message_components.group(1) return_data["mime_type"] = ( message_components.group(2) + " " + message_components.group(3) ) message_parsed = True # Look for a updating line (e.g. "Updating ffffff..ffffff") message_components = re.search("^Updating ([a-f0-9.]+)", data) if message_components != None: return_data["action"] = "Updating" return_data["path"] = message_components.group(1) message_parsed = True # Look for a "create mode" line (e.g. "create mode 100755 file.py") message_components = re.search("create mode ([0-9]+) (.+)", data) if message_components != None: return_data["action"] = "Create" return_data["path"] = message_components.group(2) return_data["mime_type"] = "mode: " + message_components.group(1) message_parsed = True # Look for a "delete mode" line (e.g. "create mode 100755 file.py") message_components = re.search("delete mode ([0-9]+) (.+)", data) if message_components != None: return_data["action"] = "Delete" return_data["path"] = message_components.group(2) return_data["mime_type"] = "mode: " + message_components.group(1) message_parsed = True # Look for an "Auto-merging" line (e.g. "Auto-merging src/file.py") message_components = re.search("^Auto-merging (.+)", data) if message_components != None: return_data["action"] = "Merging" return_data["path"] = message_components.group(1) message_parsed = True # Look for a "binary" line (e.g. "icons/file.png" | Bin 0 -> 55555 bytes) message_components = re.search( "^[ ](.+) +\| Bin ([0-9]+ -> [0-9]+ bytes)", data ) if message_components != None: return_data["action"] = "Binary" return_data["path"] = message_components.group(1) return_data["mime_type"] = message_components.group(2) message_parsed = True # Look for a "rename" line (e.g. "rename src/{foo.py => bar.py} (50%)") message_components = re.search("rename (.+}) \([0-9]+%\)", data) if message_components != None: return_data["action"] = "Rename" return_data["path"] = message_components.group(1) message_parsed = True # Look for a "copy" line (e.g. "copy src/{foo.py => bar.py} (50%)") message_components = re.search("copy (.+}) \([0-9]+%\)", data) if message_components != None: return_data["action"] = "Copy" return_data["path"] = message_components.group(1) message_parsed = True # Prepend "Error" to conflict lines. e.g. : # CONFLICT (content): Merge conflict in file.py. # Automatic merge failed; fix conflicts and then commit the result. message_components = re.search("^CONFLICT \(|Automatic merge failed", data) if message_components != None: return_data["action"] = "Error" return_data["path"] = data message_parsed = True if message_parsed == False: return_data = data self.notify_and_parse_progress(return_data) def notify_and_parse_git_push(self, data): return_data = {"action": "", "path": "", "mime_type": ""} message_parsed = False # Look for to line. e.g. "To gitosis@server.org:project.git". Exclude any # lines that include a space (as this could be a message about something else) message_components = re.search("^To ([^ ]+$)", data) if message_components != None: return_data["action"] = "To" return_data["path"] = message_components.group(1) message_parsed = True # Look for "new branch" line. e.g. " * [new branch] master -> master" message_components = re.search("^ \* \[new branch\] +(.+) -> (.+)", data) if message_components != None: return_data["action"] = "New Branch" return_data["path"] = ( message_components.group(1) + " -> " + message_components.group(2) ) message_parsed = True # Look for "rejected" line. e.g. " ![rejected] master -> master (non-fast-forward)". message_components = re.search("!\[rejected\] +(.+)", data) if message_components != None: return_data["action"] = "Rejected" return_data["path"] = message_components.group(1) message_parsed = True if message_parsed == False: return_data = data self.notify_and_parse_progress(return_data) def get_cancel(self): return self.callback_get_cancel def center(self, window): # Temporarily hide the window to avoid update_idletasks() drawing the window in the wrong position. window.withdraw() # Update "requested size" from geometry manager. window.update_idletasks() x = (window.winfo_screenwidth() - window.winfo_reqwidth()) / 2 y = (window.winfo_screenheight() - window.winfo_reqheight()) / 2 window.geometry("+%d+%d" % (x, y)) # Draw the window frame immediately after setting correct window position. window.deiconify() rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/command.py000066400000000000000000000034001445560650400224620ustar00rootroot00000000000000from __future__ import absolute_import # # command.py # import subprocess import fcntl import select import codecs import os from .exceptions import GittyupCommandError from rabbitvcs.util.strings import * def notify_func(data): pass def cancel_func(): return False class GittyupCommand(object): def __init__(self, command, cwd=None, notify=None, cancel=None): self.command = command self.notify = notify_func if notify: self.notify = notify self.cancel = cancel_func if cancel: self.cancel = cancel self.cwd = cwd if not self.cwd: self.cwd = os.getcwd() def get_lines(self, val): returner = [] lines = val.rstrip("\n").split("\n") for line in lines: returner.append(line.rstrip("\x1b[K\n")) return returner def execute(self): env = os.environ.copy() env["LANG"] = "C" env["PYTHONIOENCODING"] = "UTF-8" env["GIT_TERMINAL_PROMPT"] = "0" env["GIT_SSL_CERT_PASSWORD_PROTECTED"] = "" proc = subprocess.Popen( self.command, cwd=self.cwd, stdin=None, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, env=env, close_fds=True, preexec_fn=os.setsid, ) out = codecs.getreader(UTF8_ENCODING)(proc.stdout, SURROGATE_ESCAPE) stdout = [] while True: line = out.readline() if line == "": break line = line.rstrip("\r\n") # Strip trailing newline. self.notify(line) stdout.append(line) if self.cancel(): proc.kill() return (0, stdout, None) rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/exceptions.py000066400000000000000000000006011445560650400232250ustar00rootroot00000000000000# # exceptions.py # class NotRepositoryError(Exception): """Indicates that no Git repository was found.""" def __init__(self, *args, **kwargs): Exception.__init__(self, *args, **kwargs) class GittyupCommandError(Exception): """Indicates a command returned an error""" def __init__(self, *args, **kwargs): Exception.__init__(self, *args, **kwargs) rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/objects.py000066400000000000000000000072531445560650400225070ustar00rootroot00000000000000# # objects.py # class GittyupStatus(object): path = None is_staged = False def __init__(self, path): self.path = path def __repr__(self): return "" % (self.path, self.identifier) def __eq__(self, other): return self.identifier == other.identifier class NormalStatus(GittyupStatus): identifier = "normal" class AddedStatus(GittyupStatus): identifier = "added" class RenamedStatus(GittyupStatus): identifier = "renamed" class RemovedStatus(GittyupStatus): identifier = "removed" class ModifiedStatus(GittyupStatus): identifier = "modified" class KilledStatus(GittyupStatus): identifier = "killed" class UntrackedStatus(GittyupStatus): identifier = "untracked" class MissingStatus(GittyupStatus): identifier = "missing" class IgnoredStatus(GittyupStatus): identifier = "ignored" class NoStatus(GittyupStatus): identifier = "" def __eq__(self, other): return self.path == other.path class GittyupObject(object): def __init__(self, sha, obj): self.sha = sha self.obj = obj class Commit(GittyupObject): def __init__(self, sha, obj, changed_paths=[]): self.sha = sha self.obj = obj self.changed_paths = changed_paths def __repr__(self): return "" % self.sha @property def parents(self): return self.obj.parents @property def author(self): return self.obj.author @property def committer(self): return self.obj.committer @property def message(self): return self.obj.message @property def commit_time(self): return self.obj.commit_time @property def commit_timezone(self): return self.obj.commit_timezone @property def author_time(self): return self.obj.author_time @property def author_timezone(self): return self.obj.author_timezone @property def encoding(self): return self.obj.encoding def __eq__(self, other): return self.sha == other.sha class Tag(GittyupObject): def __repr__(self): return "" % self.sha @property def name(self): return self.obj.name @property def tag_type(self): return self.obj.type @property def message(self): return self.obj.message @property def tagger(self): return self.obj.tagger @property def tag_time(self): return self.obj.tag_time @property def tag_timezone(self): return self.obj.tag_timezone class CommitTag(Commit): def __init__(self, name, sha, obj): self._name = name self.sha = sha self.obj = obj def __repr__(self): return "" % (self.name, self.sha) @property def name(self): return self._name def __eq__(self, other): return self.name == other @property def tag_type(self): return "" @property def message(self): return self.obj.message @property def tagger(self): return self.obj.committer @property def tag_time(self): return self.obj.commit_time @property def tag_timezone(self): return self.obj.commit_timezone class Tree(GittyupObject): def __repr__(self): return "" % self.sha class Branch(Commit): def __init__(self, name, sha, obj): self._name = name self.sha = sha self.obj = obj def __repr__(self): return "" % (self.name, self.sha) @property def name(self): return self._name def __eq__(self, other): return self.name == other rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/000077500000000000000000000000001445560650400216375ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/branch.py000066400000000000000000000032121445560650400234440ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function # # test/stage.py # import os from shutil import rmtree from sys import argv from optparse import OptionParser from gittyup.client import GittyupClient from util import touch parser = OptionParser() parser.add_option("-c", "--cleanup", action="store_true", default=False) (options, args) = parser.parse_args(argv) DIR = "branch" if options.cleanup: rmtree(DIR, ignore_errors=True) print("branch.py clean") else: if os.path.isdir(DIR): raise SystemExit( "This test script has already been run. Please call this script with --cleanup to start again" ) os.mkdir(DIR) g = GittyupClient() g.initialize_repository(DIR) touch(DIR + "/test1.txt") touch(DIR + "/test2.txt") g.stage([DIR + "/test1.txt", DIR + "/test2.txt"]) g.commit("This is a commit") # Create a new branch, don't track it g.branch("branch1") assert "branch1" in [x["name"] for x in g.branch_list()] # Make sure we are still tracking master assert g.is_tracking("refs/heads/master") # Track branch1 g.track("refs/heads/branch1") assert g.is_tracking("refs/heads/branch1") # Rename branch1 to branch1b g.branch_rename("branch1", "branch1b") assert "branch1b" in [x["name"] for x in g.branch_list()] # Make sure we are now tracking branch1b assert g.is_tracking("refs/heads/branch1b") # Delete branch1b g.branch_delete("branch1b") assert "branch1b" not in g.branch_list() # Make sure we are now tracking master assert g.is_tracking("refs/heads/master") print("branch.py pass") rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/clone.py000066400000000000000000000014201445560650400233060ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function # # test/clone.py # import os from shutil import rmtree from sys import argv from optparse import OptionParser from gittyup.client import GittyupClient from util import touch parser = OptionParser() parser.add_option("-c", "--cleanup", action="store_true", default=False) (options, args) = parser.parse_args(argv) DIR = "clone" if options.cleanup: rmtree(DIR, ignore_errors=True) print("clone.py clean") else: if os.path.isdir(DIR): raise SystemExit( "This test script has already been run. Please call this script with --cleanup to start again" ) g = GittyupClient() g.clone("git://github.com/adamplumb/sprout.git", DIR) print("clone.py pass") rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/commit.py000066400000000000000000000021371445560650400235040ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function # # test/stage.py # import os from shutil import rmtree from sys import argv from optparse import OptionParser from gittyup.client import GittyupClient from gittyup.objects import * from util import touch, change parser = OptionParser() parser.add_option("-c", "--cleanup", action="store_true", default=False) (options, args) = parser.parse_args(argv) DIR = "commit" if options.cleanup: rmtree(DIR, ignore_errors=True) print("commit.py clean") else: if os.path.isdir(DIR): raise SystemExit( "This test script has already been run. Please call this script with --cleanup to start again" ) os.mkdir(DIR) g = GittyupClient() g.initialize_repository(DIR) touch(DIR + "/test1.txt") touch(DIR + "/test2.txt") g.stage([DIR + "/test1.txt", DIR + "/test2.txt"]) g.commit("First commit", commit_all=True) change(DIR + "/test1.txt") g.stage([DIR + "/test1.txt"]) g.commit("Second commit", author="Alex Plumb ") print("commit.py pass") rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/data/000077500000000000000000000000001445560650400225505ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/data/config/000077500000000000000000000000001445560650400240155ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/data/config/config.example000066400000000000000000000005641445560650400266440ustar00rootroot00000000000000# # This is the config file, and # a '#' or ';' character indicates # a comment # ; core variables [core] ; Don't trust file modes filemode = false ; Our diff algorithm [diff] external = /usr/local/bin/diff-wrapper renames = true ; Proxy settings [core] gitproxy="proxy-command" gitproxy=default-proxy ; for all the rest rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/move.py000066400000000000000000000035411445560650400231620ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function # # test/stage.py # import os from shutil import rmtree from sys import argv from optparse import OptionParser from gittyup.client import GittyupClient from gittyup.objects import * from util import touch, change parser = OptionParser() parser.add_option("-c", "--cleanup", action="store_true", default=False) (options, args) = parser.parse_args(argv) DIR = "move" if options.cleanup: rmtree(DIR, ignore_errors=True) print("move.py clean") else: if os.path.isdir(DIR): raise SystemExit( "This test script has already been run. Please call this script with --cleanup to start again" ) g = GittyupClient(DIR, create=True) touch(DIR + "/test.txt") # Stage and commit the file g.stage([DIR + "/test.txt"]) g.commit("Adding test.txt") st = g.status() # Move file explicity test os.mkdir(DIR + "/fol") g.move(DIR + "/test.txt", DIR + "/fol/test.txt") st = g.status() assert not os.path.exists(DIR + "/test.txt") assert os.path.exists(DIR + "/fol/test.txt") assert g.is_staged(DIR + "/fol/test.txt") assert st[0] == RemovedStatus assert st[1] == AddedStatus # Move as children test touch(DIR + "/test2.txt") g.stage([DIR + "/test2.txt"]) g.commit("Adding test2.txt") g.move(DIR + "/test2.txt", DIR + "/fol") st = g.status() assert not os.path.exists(DIR + "/test2.txt") assert os.path.exists(DIR + "/fol/test2.txt") assert g.is_staged(DIR + "/fol/test2.txt") assert st[1] == RemovedStatus assert st[2] == AddedStatus g.commit("Committing the test2 move") g.move(DIR + "/fol", DIR + "/bar") st = g.status() assert os.path.exists(DIR + "/bar/test.txt") assert st[0] == RemovedStatus assert st[2] == AddedStatus print("move.py pass") rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/pull.py000066400000000000000000000015061445560650400231670ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function # # test/pull.py # import os from shutil import rmtree from sys import argv from optparse import OptionParser from gittyup.client import GittyupClient from util import touch parser = OptionParser() parser.add_option("-c", "--cleanup", action="store_true", default=False) (options, args) = parser.parse_args(argv) DIR = "pull" if options.cleanup: rmtree(DIR, ignore_errors=True) print("pull.py clean") else: if os.path.isdir(DIR): raise SystemExit( "This test script has already been run. Please call this script with --cleanup to start again" ) g = GittyupClient(DIR, create=True) g.remote_add("origin", "git://github.com/adamplumb/gittyup.git") g.pull("origin", "master") print("pull.py pass") rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/remote.py000066400000000000000000000020021445560650400234760ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function # # test/remote.py # import os from shutil import rmtree from sys import argv from optparse import OptionParser from gittyup.client import GittyupClient from util import touch parser = OptionParser() parser.add_option("-c", "--cleanup", action="store_true", default=False) (options, args) = parser.parse_args(argv) DIR = "remote" if options.cleanup: rmtree(DIR, ignore_errors=True) print("remote.py clean") else: if os.path.isdir(DIR): raise SystemExit( "This test script has already been run. Please call this script with --cleanup to start again" ) os.mkdir(DIR) g = GittyupClient(DIR, create=True) g.remote_add("origin", "git://github.com/adamplumb/sprout.git") l = g.remote_list() assert len(l) == 1 assert l[0]["host"] == "git://github.com/adamplumb/sprout.git" g.remote_delete("origin") l = g.remote_list() assert len(l) == 0 print("remote.py pass") rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/remove.py000066400000000000000000000027241445560650400235130ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function # # test/stage.py # import os from shutil import rmtree from sys import argv from optparse import OptionParser from gittyup.client import GittyupClient from gittyup.objects import * from util import touch, change parser = OptionParser() parser.add_option("-c", "--cleanup", action="store_true", default=False) (options, args) = parser.parse_args(argv) DIR = "remove" if options.cleanup: rmtree(DIR, ignore_errors=True) print("remove.py clean") else: if os.path.isdir(DIR): raise SystemExit( "This test script has already been run. Please call this script with --cleanup to start again" ) os.mkdir(DIR) g = GittyupClient() g.initialize_repository(DIR) touch(DIR + "/test.txt") # Stage and commit the file g.stage([DIR + "/test.txt"]) g.commit("Adding test.txt") g.remove([DIR + "/test.txt"]) st = g.status() assert not os.path.exists(DIR + "/test.txt") assert g.is_staged(DIR + "/test.txt") assert st[0] == RemovedStatus g.unstage([DIR + "/test.txt"]) st = g.status() assert not os.path.exists(DIR + "/test.txt") assert not g.is_staged(DIR + "/test.txt") assert st[0] == MissingStatus g.checkout([DIR + "/test.txt"]) st = g.status() assert os.path.exists(DIR + "/test.txt") assert not g.is_staged(DIR + "/test.txt") assert st[0] == NormalStatus print("remove.py pass") rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/run_all.py000077500000000000000000000011061445560650400236460ustar00rootroot00000000000000from __future__ import absolute_import #!/usr/bin/python from sys import argv import os import subprocess def cleanup(modules): for module in modules: subprocess.call(["python", module, "--cleanup"]) modules = [ "branch.py", "stage.py", "commit.py", "tag.py", "remove.py", "clone.py", "move.py", "pull.py", "remote.py", ] if len(argv) == 2 and argv[1] == "--cleanup": cleanup(modules) for module in modules: if subprocess.call(["python", module]) == 1: raise SystemExit("Module test failed") cleanup(modules) rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/stage.py000066400000000000000000000040431445560650400233150ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function # # test/stage.py # import os from shutil import rmtree from sys import argv from optparse import OptionParser from gittyup.client import GittyupClient from gittyup.objects import * from util import touch, change parser = OptionParser() parser.add_option("-c", "--cleanup", action="store_true", default=False) (options, args) = parser.parse_args(argv) DIR = "stage" if options.cleanup: rmtree(DIR, ignore_errors=True) print("stage.py clean") else: if os.path.isdir(DIR): raise SystemExit( "This test script has already been run. Please call this script with --cleanup to start again" ) os.mkdir(DIR) g = GittyupClient() g.initialize_repository(DIR) touch(DIR + "/test1.txt") touch(DIR + "/test2.txt") # Stage both files g.stage([DIR + "/test1.txt", DIR + "/test2.txt"]) st = g.status(DIR) assert st[0] == AddedStatus, st assert st[1] == AddedStatus assert st[0].is_staged # Unstage both files g.unstage([DIR + "/test1.txt", DIR + "/test2.txt"]) st = g.status(DIR) assert st[0] == UntrackedStatus assert st[1] == UntrackedStatus assert not st[0].is_staged # Untracked files should not be staged g.stage_all() st = g.status(DIR) assert st[0] == UntrackedStatus assert st[1] == UntrackedStatus # test1.txt is changed, so it should get staged and set as Modified g.stage([DIR + "/test1.txt"]) g.commit("Test commit") change(DIR + "/test1.txt") st = g.status(DIR) assert st[0] == ModifiedStatus g.stage_all() st = g.status(DIR) assert st[0] == ModifiedStatus assert g.is_staged(DIR + "/" + st[0].path) assert not g.is_staged(DIR + "/" + st[1].path) # Unstage all staged files g.unstage_all() st = g.status(DIR) assert not g.is_staged(DIR + "/" + st[0].path) assert not g.is_staged(DIR + "/" + st[1].path) assert st[0] == ModifiedStatus assert st[1] == UntrackedStatus print("stage.py pass") rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/tag.py000066400000000000000000000021401445560650400227610ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function # # test/stage.py # import os from shutil import rmtree from sys import argv from optparse import OptionParser from gittyup.client import GittyupClient from gittyup.objects import * from util import touch, change parser = OptionParser() parser.add_option("-c", "--cleanup", action="store_true", default=False) (options, args) = parser.parse_args(argv) DIR = "tag" if options.cleanup: rmtree(DIR, ignore_errors=True) print("tag.py clean") else: if os.path.isdir(DIR): raise SystemExit( "This test script has already been run. Please call this script with --cleanup to start again" ) os.mkdir(DIR) g = GittyupClient() g.initialize_repository(DIR) touch(DIR + "/test1.txt") touch(DIR + "/test2.txt") g.stage([DIR + "/test1.txt", DIR + "/test2.txt"]) commit_id = g.commit("First commit", commit_all=True) tag_id = g.tag("tag1", "Tagging as tag1", track=True) assert g.is_tracking("refs/tags/tag1") assert len(g.tag_list()) == 1 print("tag.py pass") rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/tests/util.py000066400000000000000000000003461445560650400231710ustar00rootroot00000000000000from __future__ import absolute_import # # util.py # import os def touch(fname, times=None): with open(fname, "a"): os.utime(fname, times) def change(path): f = open(path, "a") f.write("1") f.close() rabbitvcs-0.19/rabbitvcs/vcs/git/gittyup/util.py000066400000000000000000000037671445560650400220410ustar00rootroot00000000000000from __future__ import absolute_import # # util.py # import os def splitall(path): """Split a path into all of its parts. From: Python Cookbook, Credit: Trent Mick """ allparts = [] while 1: parts = os.path.split(path) if parts[0] == path: allparts.insert(0, parts[0]) break elif parts[1] == path: allparts.insert(0, parts[1]) break else: path = parts[0] allparts.insert(0, parts[1]) return allparts def relativepath(fromdir, tofile): """Find relative path from 'fromdir' to 'tofile'. An absolute path is returned if 'fromdir' and 'tofile' are on different drives. Martin Bless, 2004-03-22. """ f1name = os.path.abspath(tofile) if os.path.splitdrive(f1name)[0]: hasdrive = True else: hasdrive = False f1basename = os.path.basename(tofile) f1dirname = os.path.dirname(f1name) f2dirname = os.path.abspath(fromdir) f1parts = splitall(f1dirname) f2parts = splitall(f2dirname) if hasdrive and (f1parts[0].lower() != f2parts[0].lower()): "Return absolute path since we are on different drives." return f1name while f1parts and f2parts: if hasdrive: if f1parts[0].lower() != f2parts[0].lower(): break else: if f1parts[0] != f2parts[0]: break del f1parts[0] del f2parts[0] result = [".." for part in f2parts] result.extend(f1parts) result.append(f1basename) return os.sep.join(result) def get_transport_and_path(uri): from dulwich.client import TCPGitClient, SSHGitClient, SubprocessGitClient for handler, transport in (("git://", TCPGitClient), ("git+ssh://", SSHGitClient)): if uri.startswith(handler): host, path = uri[len(handler) :].split("/", 1) return transport(host), "/" + path # if its not git or git+ssh, try a local url.. return SubprocessGitClient(), uri rabbitvcs-0.19/rabbitvcs/vcs/log.py000066400000000000000000000037041445560650400173440ustar00rootroot00000000000000from __future__ import absolute_import # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import rabbitvcs.vcs class LogChangedPath(object): path = "" action = "" copy_from_path = "" copy_from_revision = "" def __init__(self, path, action, copy_from_path, copy_from_revision): self.path = path self.action = action self.copy_from_path = copy_from_path self.copy_from_revision = copy_from_revision class Log(object): date = None revision = None author = None message = None parents = [] head = False # A list of LogChangedFiles elements changed_paths = [] def __init__( self, date, revision, author, message, changed_paths, parents=[], head=False ): self.date = date self.revision = revision self.author = author self.message = message self.changed_paths = changed_paths self.parents = parents self.head = head def get_date(self): return self.date def set_date(self, date): self.date = date rabbitvcs-0.19/rabbitvcs/vcs/mercurial/000077500000000000000000000000001445560650400201705ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/vcs/mercurial/__init__.py000066400000000000000000000173011445560650400223030ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Concrete VCS implementation for Mercurial functionality. """ from __future__ import absolute_import import os.path from datetime import datetime from mercurial import commands, ui, hg from rabbitvcs.util.strings import S import rabbitvcs.vcs import rabbitvcs.vcs.status import rabbitvcs.vcs.log import rabbitvcs.vcs.mercurial.util from rabbitvcs.vcs.branch import BranchEntry from rabbitvcs.util.log import Log log = Log("rabbitvcs.vcs.mercurial") from rabbitvcs import gettext _ = gettext.gettext class Revision(object): """ Implements a simple revision object as a wrapper around the gittyup revision object. This allows us to provide a standard interface to the object data. """ def __init__(self, kind, value=None): self.kind = kind.upper() self.value = value if self.kind == "HEAD": self.value = "HEAD" self.is_revision_object = True def __str__(self): if self.value: return S(self.value) return S(self.kind) def __unicode__(self): return self.__str__().unicode() def short(self): if self.value: return S(self.value)[0:7] else: return self.kind def __repr__(self): return self.__str__() def primitive(self): return self.value class Mercurial(object): STATUS = { "normal": "C", "added": "A", "removed": "R", "modified": "M", "untracked": "?", "missing": "!", } STATUS_REVERSE = { "C": "normal", "A": "added", "R": "removed", "M": "modified", "?": "untracked", "!": "missing", } STATUSES_FOR_REVERT = ["missing", "modified", "removed"] STATUSES_FOR_COMMIT = ["untracked", "missing", "modified", "added", "removed"] STATUSES_FOR_STAGE = ["untracked"] STATUSES_FOR_UNSTAGE = ["added"] def __init__(self, repo=None): self.vcs = rabbitvcs.vcs.VCS_MERCURIAL self.interface = "mercurial" self.ui = ui.ui() self.repository = None if repo: self.repository_path = repo self.repository = hg.repository(self.ui, self.repository_path) self.cache = rabbitvcs.vcs.status.StatusCache() def set_repository(self, path): self.repository_path = path self.repository = hg.repository(self.ui, self.repository_path) def get_repository(self): return self.repository_path def find_repository_path(self, path): path_to_check = path while path_to_check != "/" and path_to_check != "": if os.path.isdir(os.path.join(path_to_check, ".hg")): return path_to_check path_to_check = os.path.split(path_to_check)[0] return None def get_relative_path(self, path): if path == self.repository_path: return "" return rabbitvcs.vcs.mercurial.util.relativepath(self.repository_path, path) def get_absolute_path(self, path): return os.path.join(self.repository_path, path).rstrip("/") def statuses(self, path, recurse=True, invalidate=False): mercurial_statuses = self.repository.status(clean=True, unknown=True) # the status method returns a series of tuples filled with files matching # the statuses below tuple_order = [ "modified", "added", "removed", "missing", "unknown", "ignored", "clean", ] # go through each tuple (each of which has a defined status), and # generate a flat list of rabbitvcs statuses statuses = [] index = 0 directories = {} for status_tuple in mercurial_statuses: content = tuple_order[index] for item in status_tuple: st_path = self.get_absolute_path(item) rabbitvcs_status = rabbitvcs.vcs.status.MercurialStatus( {"path": st_path, "content": content} ) statuses.append(rabbitvcs_status) # determine the statuses of the parent folders dir_content = content if content in self.STATUSES_FOR_REVERT: dir_content = "modified" path_to_check = os.path.dirname(st_path) while True: if ( path_to_check not in directories or directories[path_to_check] not in self.STATUSES_FOR_COMMIT ): rabbitvcs_status = rabbitvcs.vcs.status.MercurialStatus( {"path": path_to_check, "content": dir_content} ) statuses.append(rabbitvcs_status) directories[path_to_check] = dir_content if path_to_check == "" or path_to_check == self.repository_path: break path_to_check = os.path.split(path_to_check)[0] index += 1 return statuses def status(self, path, summarize=True, invalidate=False): all_statuses = self.statuses(path, invalidate=invalidate) if summarize: path_status = None for st in all_statuses: if st.path == path: path_status = st break if path_status: path_status.summary = path_status.single else: path_status = rabbitvcs.vcs.status.Status.status_unknown(path) else: path_status = all_statuses[0] return path_status def is_working_copy(self, path): if os.path.isdir(path) and os.path.isdir(os.path.join(path, ".hg")): return True return False def is_in_a_or_a_working_copy(self, path): if self.is_working_copy(path): return True return self.find_repository_path(os.path.split(path)[0]) != "" def is_versioned(self, path): if self.is_working_copy(path): return True st = self.status(path) try: return st.is_versioned() except Exception as e: log.error(e) return False return False def is_locked(self, path): return False def get_items(self, paths, statuses=[]): if paths is None: return [] items = [] for path in paths: st = self.statuses(path, invalidate=True) for st_item in st: if st_item.content == "modified" and os.path.isdir(st_item.path): continue if st_item.content in statuses or len(statuses) == 0: items.append(st_item) return items # # Actions # rabbitvcs-0.19/rabbitvcs/vcs/mercurial/util.py000066400000000000000000000047651445560650400215330ustar00rootroot00000000000000from __future__ import absolute_import # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os def splitall(path): """Split a path into all of its parts. From: Python Cookbook, Credit: Trent Mick """ allparts = [] while 1: parts = os.path.split(path) if parts[0] == path: allparts.insert(0, parts[0]) break elif parts[1] == path: allparts.insert(0, parts[1]) break else: path = parts[0] allparts.insert(0, parts[1]) return allparts def relativepath(fromdir, tofile): """Find relative path from 'fromdir' to 'tofile'. An absolute path is returned if 'fromdir' and 'tofile' are on different drives. Martin Bless, 2004-03-22. """ f1name = os.path.abspath(tofile) if os.path.splitdrive(f1name)[0]: hasdrive = True else: hasdrive = False f1basename = os.path.basename(tofile) f1dirname = os.path.dirname(f1name) f2dirname = os.path.abspath(fromdir) f1parts = splitall(f1dirname) f2parts = splitall(f2dirname) if hasdrive and (f1parts[0].lower() != f2parts[0].lower()): "Return absolute path since we are on different drives." return f1name while f1parts and f2parts: if hasdrive: if f1parts[0].lower() != f2parts[0].lower(): break else: if f1parts[0] != f2parts[0]: break del f1parts[0] del f2parts[0] result = [".." for part in f2parts] result.extend(f1parts) result.append(f1basename) return os.sep.join(result) rabbitvcs-0.19/rabbitvcs/vcs/status.py000066400000000000000000000371561445560650400201160ustar00rootroot00000000000000from __future__ import absolute_import # # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2010 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os.path import unittest import six from datetime import datetime import rabbitvcs.vcs from rabbitvcs.util.strings import S from rabbitvcs.util.log import Log from six.moves import range log = Log("rabbitvcs.vcs.status") from rabbitvcs import gettext _ = gettext.gettext # These are the statuses that we might represent with icons status_normal = "normal" status_modified = "modified" status_added = "added" status_deleted = "deleted" status_ignored = "ignored" status_read_only = "read-only" status_locked = "locked" status_unknown = "unknown" # Specifically: this means something IN A WORKING COPY but not added status_unversioned = "unversioned" status_missing = "missing" status_replaced = "replaced" # "complicated" = anything we display with that exclamation mark icon status_complicated = "complicated" status_calculating = "calculating" status_error = "error" MODIFIED_CHILD_STATUSES = [ status_modified, status_added, status_deleted, status_missing, status_replaced, ] class StatusCache(object): keys = [ None, status_normal, status_modified, status_added, status_deleted, status_ignored, status_read_only, status_locked, status_unknown, status_unversioned, status_missing, status_replaced, status_complicated, status_calculating, status_error, ] authors = [] revisions = [] def __init__(self): self.cache = {} def __setitem__(self, path, status): try: content_index = self.keys.index(status.simple_content_status()) metadata_index = self.keys.index(status.simple_metadata_status()) try: author_index = self.authors.index(status.author) except ValueError as e: self.authors.append(status.author) author_index = len(self.authors) - 1 try: revision_index = self.revisions.index(status.revision) except ValueError as e: self.revisions.append(status.revision) revision_index = len(self.revisions) - 1 self.cache[path] = ( status.__class__, content_index, metadata_index, revision_index, author_index, status.date, ) except Exception as e: log.debug(e) def __getitem__(self, path): try: ( statusclass, content_index, metadata_index, revision_index, author_index, date, ) = self.cache[path] content = self.keys[content_index] metadata = self.keys[metadata_index] revision = self.revisions[revision_index] author = self.authors[author_index] status = Status( path, content, metadata, revision=revision, author=author, date=date ) status.__class__ = statusclass return status except Exception as e: log.debug(e) def __delitem__(self, path): try: del self.cache[path] except KeyError as e: log.debug(e) def __contains__(self, path): return path in self.cache def find_path_statuses(self, path): statuses = [] if os.path.isdir(path): for key, value in list(self.cache.items()): if key.startswith(path): statuses.append(self.__getitem__(key)) else: statuses.append(self.__getitem__(path)) return statuses class Status(object): @staticmethod def status_unknown(path): return Status(path, status_unknown, summary=status_unknown) @staticmethod def status_error(path): return Status(path, status_error, summary=status_error) @staticmethod def status_calc(path): return Status(path, status_calculating, summary=status_calculating) vcs_type = rabbitvcs.vcs.VCS_DUMMY clean_statuses = ["unchanged"] content_status_map = None metadata_status_map = None def __init__( self, path, content, metadata=None, summary=None, revision=None, author=None, date=None, ): """ The status objects accepts the following items @type path: string @param path: The path to the item @type content: string @param content: The content status @type metadata: string @param metadata: The property status @type summary: string @param summary: The summary status @type revision: string or int @param revision: The last commit revision of the item @type author: string @param author: The commit author @type date: int @param date: The timestamp of the commit time """ self.path = path self.content = content self.metadata = metadata self.remote_content = None self.remote_metadata = None self.single = self._make_single_status() self.summary = summary self.revision = revision self.author = author self.date = date def _make_single_status(self): """ Given our text_status and a prop_status, simplify to a single "simple" status. If we don't know how to simplify our particular combination of status, call it an error. """ # Content status dominates single = self.simple_content_status() or status_error if single in Status.clean_statuses: if self.metadata: single = self.simple_metadata_status() or status_error return single def simple_content_status(self): if self.content_status_map: return self.content_status_map.get(self.content, self.content) else: return self.content def simple_metadata_status(self): if self.metadata and self.metadata_status_map: return self.metadata_status_map.get(self.metadata) else: return self.metadata def make_summary(self, child_statuses=[]): """Summarises statuses for directories.""" summary = status_unknown status_set = set([st.single for st in child_statuses]) if not status_set: self.summary = self.single if status_complicated in status_set: self.summary = status_complicated elif self.single in ["added", "modified", "deleted"]: # These take priority over child statuses self.summary = self.single elif len(set(MODIFIED_CHILD_STATUSES) & status_set): self.summary = status_modified else: self.summary = self.single return summary def is_versioned(self): return self.single is not status_unversioned def is_modified(self): # This may need to be more sophisticated... eg. is read-only modified? # Unknown? etc... return self.single is not status_normal def has_modified(self): # Includes self being modified! return self.summary is not status_normal def __repr__(self): return "<%s %s (%s) %s/%s>" % ( _("RabbitVCS status for"), self.path, self.vcs_type, self.simple_content_status(), self.simple_metadata_status(), ) def __getstate__(self): attrs = self.__dict__.copy() # Force strings to Unicode to avoid json implicit conversion. for key in attrs: if isinstance(attrs[key], (six.string_types, six.text_type)): attrs[key] = S(attrs[key]).unicode() attrs["__type__"] = type(self).__name__ attrs["__module__"] = type(self).__module__ return attrs def __setstate__(self, state_dict): del state_dict["__type__"] del state_dict["__module__"] # Store strings in native str type. for key in state_dict: if isinstance(state_dict[key], (six.string_types, six.text_type)): state_dict[key] = str(S(state_dict[key])) self.__dict__ = state_dict class SVNStatus(Status): vcs_type = rabbitvcs.vcs.VCS_SVN content_status_map = { "normal": status_normal, "added": status_added, "missing": status_missing, "unversioned": status_unversioned, "deleted": status_deleted, "replaced": status_modified, "modified": status_modified, "merged": status_modified, "conflicted": status_complicated, "ignored": status_ignored, "obstructed": status_complicated, # FIXME: is this the best representation of 'externally populated'? "external": status_normal, "incomplete": status_complicated, } metadata_status_map = { "normal": status_normal, "none": status_normal, "modified": status_modified, } # external - an unversioned path populated by an svn:external property # incomplete - a directory doesn't contain a complete entries list def __init__(self, pysvn_status): revision = author = date = None if pysvn_status.entry: revision = int(pysvn_status.entry.commit_revision.number) author = pysvn_status.entry.commit_author date = int(pysvn_status.entry.commit_time) # There is a potential problem here: I'm pretty sure that PySVN statuses # do NOT have translatable representations, so this will always come out # to be 'normal', 'modified' etc Status.__init__( self, pysvn_status.path, content=str(pysvn_status.text_status), metadata=str(pysvn_status.prop_status), revision=revision, author=author, date=date, ) # self.remote_content = getattr(pysvn_status, "repos_text_status", None) # self.remote_metadata = getattr(pysvn_status, "repos_prop_status", None) self.remote_content = str(pysvn_status.repos_text_status) self.remote_metadata = str(pysvn_status.repos_prop_status) class GitStatus(Status): vcs_type = "git" content_status_map = { "normal": status_normal, "added": status_added, "missing": status_missing, "untracked": status_unversioned, "removed": status_deleted, "modified": status_modified, "renamed": status_modified, "ignored": status_ignored, } metadata_status_map = {"normal": status_normal, None: status_normal} def __init__(self, gittyup_status): super(GitStatus, self).__init__( gittyup_status.path, content=str(gittyup_status.identifier), metadata=None ) class MercurialStatus(Status): vcs_type = "mercurial" content_status_map = { "clean": status_normal, "added": status_added, "missing": status_missing, "unknown": status_unversioned, "removed": status_deleted, "modified": status_modified, "ignored": status_ignored, } metadata_status_map = {"normal": status_normal, None: status_normal} def __init__(self, mercurial_status): super(MercurialStatus, self).__init__( mercurial_status["path"], content=str(mercurial_status["content"]), metadata=None, ) STATUS_TYPES = [Status, SVNStatus, GitStatus, MercurialStatus] class TestStatusObjects(unittest.TestCase): @classmethod def __initclass__(self): self.base = "/path/to/test" self.children = [os.path.join(self.base, chr(x)) for x in range(97, 123)] def testsingle_clean(self): status = Status(self.base, status_normal) self.assertEqual(status.single, status_normal) def testsingle_changed(self): status = Status(self.base, status_modified) self.assertEqual(status.single, status_modified) def testsingle_propclean(self): status = Status(self.base, status_normal, status_normal) self.assertEqual(status.single, status_normal) def testsingle_propchanged(self): status = Status(self.base, status_normal, status_modified) self.assertEqual(status.single, status_modified) def testsummary_clean(self): top_status = Status(self.base, status_normal) child_sts = [Status(path, status_normal) for path in self.children] top_status.make_summary(child_sts) self.assertEqual(top_status.summary, status_normal) def testsummary_changed(self): top_status = Status(self.base, status_normal) child_sts = [Status(path, status_normal) for path in self.children] child_sts[1] = Status(child_sts[1].path, status_modified) top_status.make_summary(child_sts) self.assertEqual(top_status.summary, status_modified) def testsummary_added(self): top_status = Status(self.base, status_normal) child_sts = [Status(path, status_normal) for path in self.children] child_sts[1] = Status(child_sts[1].path, status_added) top_status.make_summary(child_sts) self.assertEqual(top_status.summary, status_modified) def testsummary_complicated(self): top_status = Status(self.base, status_normal) child_sts = [Status(path, status_normal) for path in self.children] child_sts[1] = Status(child_sts[1].path, status_complicated) top_status.make_summary(child_sts) self.assertEqual(top_status.summary, status_complicated) def testsummary_propchange(self): top_status = Status(self.base, status_normal) child_sts = [Status(path, status_normal) for path in self.children] child_sts[1] = Status(child_sts[1].path, status_normal, status_modified) top_status.make_summary(child_sts) self.assertEqual(top_status.summary, status_modified) def testsummary_bothchange(self): top_status = Status(self.base, status_normal) child_sts = [Status(path, status_normal) for path in self.children] child_sts[1] = Status(child_sts[1].path, status_complicated, status_modified) top_status.make_summary(child_sts) self.assertEqual(top_status.summary, status_complicated) def testsummary_topadded(self): top_status = Status(self.base, status_added) child_sts = [Status(path, status_normal) for path in self.children] child_sts[1] = Status(child_sts[1].path, status_modified, status_modified) top_status.make_summary(child_sts) self.assertEqual(top_status.summary, status_added) TestStatusObjects.__initclass__() if __name__ == "__main__": unittest.main() rabbitvcs-0.19/rabbitvcs/vcs/svn/000077500000000000000000000000001445560650400170135ustar00rootroot00000000000000rabbitvcs-0.19/rabbitvcs/vcs/svn/__init__.py000066400000000000000000001641231445560650400211330ustar00rootroot00000000000000# # This is an extension to the Nautilus file manager to allow better # integration with the Subversion source control system. # # Copyright (C) 2006-2008 by Jason Field # Copyright (C) 2007-2008 by Bruce van der Kooij # Copyright (C) 2008-2008 by Adam Plumb # # RabbitVCS is free software; you can 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. # # RabbitVCS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # """ Concrete VCS implementation for Subversion functionality. """ from __future__ import absolute_import import subprocess import os import shutil import os.path from os.path import isdir, isfile, dirname, islink, realpath from datetime import datetime import pysvn import rabbitvcs.vcs import rabbitvcs.vcs.status import rabbitvcs.vcs.log from rabbitvcs.util import helper from rabbitvcs.util.log import Log from rabbitvcs.util.decorators import structure_map from rabbitvcs.util.strings import * import six from six.moves import map from six.moves import range log = Log("rabbitvcs.vcs.svn") from rabbitvcs import gettext _ = gettext.gettext # Extra "action" for "commit completed" commit_completed = "commit_completed" @structure_map def pure_unicode(obj): """ Map object string subclass components to real unicode type. Pysvn (using PyCXX) does not like string subclasses as arguments and requires unsubclassed string/unicode objects. In addition, it fails on Python2 non-ascii byte strings when converting them to utf-8. This function is called each time there is a risk of passing string or unicode objects to the pysvn API. """ if isinstance(obj, (six.string_types, six.text_type)): obj = S(obj).unicode() return obj class Revision(object): """ Implements a simple revision object as a wrapper around the pysvn revision object. This allows us to provide a standard interface to the object data. """ KINDS = { "unspecified": pysvn.opt_revision_kind.unspecified, "number": pysvn.opt_revision_kind.number, "date": pysvn.opt_revision_kind.date, "committed": pysvn.opt_revision_kind.committed, "previous": pysvn.opt_revision_kind.previous, "working": pysvn.opt_revision_kind.working, "head": pysvn.opt_revision_kind.head, "base": pysvn.opt_revision_kind.base, } def __init__(self, kind, value=None): self.kind = S(kind).lower() self.value = value self.is_revision_object = True # TODO Shift to options factory? if self.value and str(self.value).lower().strip() == "head": self.kind = "head" if self.value is None and self.kind in ("number", "date"): self.kind = "head" if self.kind == "head": self.value = None self.__revision_kind = self.KINDS[self.kind] self.__revision = None try: if self.value is not None: self.__revision = pysvn.Revision(self.__revision_kind, self.value) else: self.__revision = pysvn.Revision(self.__revision_kind) except Exception as e: log.exception(e) def __str__(self): if self.value: return S(self.value) return S(self.kind) def __unicode__(self): return self.__str__().unicode() def short(self): return self.__str__() def __repr__(self): return self.__str__() def primitive(self): return self.__revision class SVN(object): """ """ STATUS = { "none": pysvn.wc_status_kind.none, "unversioned": pysvn.wc_status_kind.unversioned, "normal": pysvn.wc_status_kind.normal, "added": pysvn.wc_status_kind.added, "missing": pysvn.wc_status_kind.missing, "deleted": pysvn.wc_status_kind.deleted, "replaced": pysvn.wc_status_kind.replaced, "modified": pysvn.wc_status_kind.modified, "merged": pysvn.wc_status_kind.merged, "conflicted": pysvn.wc_status_kind.conflicted, "ignored": pysvn.wc_status_kind.ignored, "obstructed": pysvn.wc_status_kind.obstructed, "external": pysvn.wc_status_kind.external, "incomplete": pysvn.wc_status_kind.incomplete, } STATUSES_FOR_COMMIT = list( map( str, [ pysvn.wc_status_kind.unversioned, pysvn.wc_status_kind.added, pysvn.wc_status_kind.deleted, pysvn.wc_status_kind.replaced, pysvn.wc_status_kind.modified, pysvn.wc_status_kind.missing, pysvn.wc_status_kind.obstructed, ], ) ) STATUSES_FOR_REVERT = list( map( str, [ pysvn.wc_status_kind.missing, pysvn.wc_status_kind.added, pysvn.wc_status_kind.modified, pysvn.wc_status_kind.deleted, ], ) ) STATUSES_FOR_ADD = list( map(str, [pysvn.wc_status_kind.unversioned, pysvn.wc_status_kind.obstructed]) ) STATUSES_FOR_RESOLVE = list(map(str, [pysvn.wc_status_kind.conflicted])) STATUSES_FOR_CHECK = list( map( str, [ pysvn.wc_status_kind.added, pysvn.wc_status_kind.deleted, pysvn.wc_status_kind.replaced, pysvn.wc_status_kind.modified, pysvn.wc_status_kind.missing, pysvn.wc_status_kind.conflicted, ], ) ) PROPERTIES = { "executable": "svn:executable", "mime-type": "svn:mime-type", "ignore": "svn:ignore", "keywords": "svn:keywords", "eol-style": "svn:eol-style", "externals": "svn:externals", "special": "svn:special", } NOTIFY_ACTIONS = { pysvn.wc_notify_action.add: _("Added"), pysvn.wc_notify_action.copy: _("Copied"), pysvn.wc_notify_action.delete: _("Deleted"), pysvn.wc_notify_action.restore: _("Restored"), pysvn.wc_notify_action.revert: _("Reverted"), pysvn.wc_notify_action.failed_revert: _("Failed Revert"), pysvn.wc_notify_action.resolved: _("Resolved"), pysvn.wc_notify_action.skip: _("Skipped"), pysvn.wc_notify_action.update_delete: _("Deleted"), pysvn.wc_notify_action.update_add: _("Added"), pysvn.wc_notify_action.update_started: _("Updating"), pysvn.wc_notify_action.update_update: _("Updated"), pysvn.wc_notify_action.update_completed: _("Completed"), pysvn.wc_notify_action.update_external: _("External"), pysvn.wc_notify_action.status_completed: _("Completed"), pysvn.wc_notify_action.status_external: _("External"), pysvn.wc_notify_action.commit_modified: _("Modified"), pysvn.wc_notify_action.commit_added: _("Added"), pysvn.wc_notify_action.commit_deleted: _("Deleted"), pysvn.wc_notify_action.commit_replaced: _("Replaced"), pysvn.wc_notify_action.commit_postfix_txdelta: _("Changed"), pysvn.wc_notify_action.annotate_revision: _("Annotated"), pysvn.wc_notify_action.locked: _("Locked"), pysvn.wc_notify_action.unlocked: _("Unlocked"), pysvn.wc_notify_action.failed_lock: _("Failed Lock"), pysvn.wc_notify_action.failed_unlock: _("Failed Unlock"), } NOTIFY_ACTIONS_COMPLETE = [ pysvn.wc_notify_action.status_completed, pysvn.wc_notify_action.update_completed, commit_completed, ] NOTIFY_STATES = { pysvn.wc_notify_state.inapplicable: _("Inapplicable"), pysvn.wc_notify_state.unknown: _("Unknown"), pysvn.wc_notify_state.unchanged: _("Unchanged"), pysvn.wc_notify_state.missing: _("Missing"), pysvn.wc_notify_state.obstructed: _("Obstructed"), pysvn.wc_notify_state.changed: _("Changed"), pysvn.wc_notify_state.merged: _("Merged"), pysvn.wc_notify_state.conflicted: _("Conflicted"), } NODE_KINDS_REVERSE = { pysvn.node_kind.none: "none", pysvn.node_kind.file: "file", pysvn.node_kind.dir: "dir", pysvn.node_kind.unknown: "unknown", } def __init__(self): self.client = pysvn.Client() self.interface = "pysvn" self.vcs = rabbitvcs.vcs.VCS_SVN self.cache = rabbitvcs.vcs.status.StatusCache() def statuses(self, path, recurse=True, update=False, invalidate=False): """ Look up the status for path. """ spath = S(path) if spath in self.cache: if invalidate: del self.cache[spath] else: return self.cache.find_path_statuses(spath) on_error = rabbitvcs.vcs.status.Status.status_unknown(path) if not self.is_in_a_or_a_working_copy(path): return [on_error] try: pysvn_statuses = self.client_status( path, depth=pysvn.depth.infinity, update=update ) if not len(pysvn_statuses): # This is NOT in the PySVN documentation, but sometimes it # returns an empty list if the file goes missing... return [on_error] else: statuslist = [] for st in pysvn_statuses: # If not recursing, only return the item in question (if a file) # or items directly under the path (if a directory) st_path = S(st.path) cmp_path = os.path.join(path, os.path.basename(st_path)) if not recurse and cmp_path != st_path and st_path != path: continue rabbitvcs_status = rabbitvcs.vcs.status.SVNStatus(st) self.cache[st_path] = rabbitvcs_status statuslist.append(rabbitvcs_status) return statuslist except pysvn.ClientError as ex: # TODO: uncommenting these might not be a good idea # ~ traceback.print_exc() log.debug("Exception occurred in SVN.status() for %s" % path) log.exception(ex) return [on_error] def client_info(self, path): if islink(path): path = realpath(path) return self.client.info(pure_unicode(path)) def client_status(self, *args, **kwargs): return self.client.status(*pure_unicode(args), **pure_unicode(kwargs)) def find_repository_path(self, path): path_to_check = path while path_to_check != "/" and path_to_check != "": if os.path.isdir(os.path.join(path_to_check, ".svn")): return path_to_check path_to_check = os.path.split(path_to_check)[0] return None def status(self, path, summarize=True, invalidate=False): spath = S(path) if spath in self.cache: if invalidate: del self.cache[spath] else: st = self.cache[spath] if summarize: st.summary = st.single return st all_statuses = self.statuses(path, recurse=summarize) if summarize: path_status = None for st in all_statuses: if S(st.path) == spath: path_status = st break path_status.make_summary(all_statuses) else: path_status = all_statuses[0] return path_status def is_working_copy(self, path): try: # when a versioned directory is removed and replaced with a # non-versioned directory (one that doesn't have a working copy # administration area, or .svn directory) you can't do a status # call on that item itself (results in an exception). # # Note that this is not a conflict, it's more of a corruption. # And it's associated with the status "obstructed". The only # way to make sure that we're dealing with a working copy # is by verifying the SVN administration area exists. if ( isdir(path) and self.client_info(path) and isdir(os.path.join(path, ".svn")) ): return True return False except Exception as e: # FIXME: ClientError client in use on another thread # ~ log.debug("EXCEPTION in is_working_copy(): %s" % str(e)) return False def is_in_a_or_a_working_copy(self, path): if self.is_working_copy(path): return True if self.find_repository_path(os.path.split(path)[0]): return True return False def is_versioned(self, path): if self.is_working_copy(path): return True else: try: # info will return nothing for an unversioned file inside a working copy if self.is_in_a_or_a_working_copy(path) and self.client_info(path): return True except Exception as e: log.exception("is_versioned exception for %s" % path) return False def is_status(self, path, status_kind): try: status = self.status(path, summarize=False) except Exception as e: log.exception("is_status exception for %s" % path) return False # If looking for "NORMAL", then both statuses must be normal (or propstatus=none) # Otherwise, it is an either or situation if status_kind == pysvn.wc_status_kind.normal: return status.data["text_status"] == status_kind and ( status.data["prop_status"] == status_kind or status.data["prop_status"] == pysvn.wc_status_kind.none ) else: return ( status.data["text_status"] == status_kind or status.data["prop_status"] == status_kind ) return False def is_locked(self, path): is_locked = False path = pure_unicode(path) try: is_locked = self.client.info2(path, recurse=False)[0][1].lock is not None except pysvn.ClientError as e: return False # log.exception("is_locked exception for %s" % path) return is_locked def get_items(self, paths, statuses=[]): """ Retrieves a list of files that have one of a set of statuses @type paths: list @param paths: A list of paths or files. @type statuses: list @param statuses: A list of pysvn.wc_status_kind statuses. @rtype: list @return: A list of statuses """ items = [] for path in paths: sts = self.statuses(path, invalidate=True) for st in sts: if (not statuses) or ( st.content in statuses or st.metadata in statuses ): items.append(st) return items def get_remote_updates(self, paths): if paths is None: return [] items = [] for path in paths: try: sts = self.statuses(path, update=True, invalidate=True) except Exception as e: log.exception(e) continue for st in sts: if st.remote_content is None and st.remote_metadata is None: continue if st.remote_content == "none" and st.remote_metadata == "none": continue items.append(st) return items def get_repo_url(self, path): """ Retrieve the repository URL for the given working copy path @type path: string @param path: A working copy path. @rtype: string @return: A repository URL. """ # If the given path is a URL, the user is passing a repository url # In that case we already have the url if self.is_path_repository_url(path): return path # If the given path is not part of a working copy, keep trying the # parent path to see if it is part of a working copy path = self.get_versioned_path(os.path.abspath(path)) if not path: return "" returner = "" try: info = self.client_info(path) returner = S(info["url"], IDENTITY_ENCODING) except Exception as e: log.exception(e) return returner def get_repo_root_url(self, path): """ Retrieve the repository URL for the given working copy path FYI this method was not added until svn 1.6.x @type path: string @param path: A working copy path. @rtype: string @return: A repository URL. """ returner = "" try: info = self.client.info2(pure_unicode(path), recurse=False) returner = info[0][1]["repos_root_URL"] except Exception as e: log.exception(e) return returner def is_path_repository_url(self, path): for proto in ("http://", "https://", "svn://", "svn+ssh://", "file://"): if path.startswith(proto): return True return False def get_revision(self, path): """ Retrieve the current revision number for a path @type path: string @param path: A working copy path. @rtype: integer @return: A repository revision. """ info = self.client_info(path) returner = None try: returner = info["commit_revision"].number except KeyError as e: log.exception("KeyError exception in svn.py get_revision() for %s" % path) except AttributeError as e: log.exception( "AttributeError exception in svn.py get_revision() for %s" % path ) return returner def get_head(self, path): """ Retrieve the HEAD revision for a repository. @type path: string @param path: A working copy path. @rtype: integer @return: A repository revision. """ info = self.client_info(path) returner = None try: returner = info["revision"].number except KeyError as e: log.exception("KeyError exception in svn.py get_head() for %s" % path) except AttributeError as e: log.exception("AttributeError exception in svn.py get_head() for %s" % path) return returner def find_merge_candidate_revisions(self, from_url, to_path): """ Return the list of revisions from from_url that are not already merged into to_path. @type from_url: string @param from_url: A repository URL to merge from. @type to_path: string @param to_path: A working copy path to merge into. @rtype: list @return: A list of revisions not already merged. """ from_url_root = self.get_repo_root_url(from_url) from_branch = from_url.replace(from_url_root, "") from_branch = from_branch.rstrip("/") merge_info = self.propget(to_path, "svn:mergeinfo") merged_revisions = [] for branch in merge_info.split("\n"): if not branch.startswith(from_branch + ":"): continue revisions = branch.split(":")[1] # branch:rev,rev-rev,... for rev in revisions.split(","): if rev.find("-") != -1: (rev_s, rev_e) = rev.split("-") merged_revisions += list(range(int(rev_s), int(rev_e) + 1)) else: merged_revisions.append(int(rev)) from_log = self.log(from_url, strict_node_history=False) from_revisions = [int(l.revision.short()) for l in from_log] to_log = self.log(to_path, strict_node_history=False) to_revisions = [int(l.revision.short()) for l in to_log] candidate_revisions = list( set(from_revisions) - set(to_revisions) - set(merged_revisions) ) return candidate_revisions # # properties # def get_versioned_path(self, path): """ Generates a safe path to use with the prop* functions. If the given path is unversioned, go to the next path up. @type path: string @param path: A file or directory path. @rtype: string @return: A prop* function-safe path. """ path_to_check = path path_to_use = None while path_to_check != "/" and path_to_check != "": if self.is_versioned(path_to_check): path_to_use = path_to_check return path_to_use path_to_check = os.path.split(path_to_check)[0] return path_to_use def propset(self, path, prop_name, prop_value, overwrite=False, recurse=False): """ Adds an svn property to a path. If the item is unversioned, add a recursive property to the parent path @type path: string @param path: A file or directory path. @type prop_name: string @param prop_name: An svn property name. @type prop_value: string @param prop_value: An svn property value/pattern. @type recurse: boolean @param recurse: If True, the property will be applied to all subdirectories as well. """ path = self.get_versioned_path(path) if overwrite: props = prop_value else: props = self.propget(path, prop_name) props = "%s%s" % (props, prop_value) try: self.client.propset( pure_unicode(prop_name), pure_unicode(props), pure_unicode(path), recurse=recurse, ) return True except pysvn.ClientError as e: log.exception( "pysvn.ClientError exception in svn.py propset() for %s" % S(path).display() ) except TypeError as e: log.exception( "TypeError exception in svn.py propset() %s" % S(path).display() ) return False def proplist(self, path, rev=None): """ Retrieves a dictionary of properties for a path. @type path: string @param path: A file or directory path. @rtype: dictionary @return: A dictionary of properties. """ path = pure_unicode(path) if rev: returner = self.client.proplist(path, revision=rev) else: returner = self.client.proplist(path) if returner: returner = returner[0][1] else: returner = {} return returner def propget(self, path, prop_name, rev=None): """ Retrieves a dictionary of the prop_value of the given path and prop_name @type path: string @param path: A file or directory path. @type prop_name: string or self.PROPERTIES @param prop_name: An svn property name. @rtype: dictionary @return: A dictionary where the key is the path, the value is the prop_value. """ path = self.get_versioned_path(pure_unicode(path)) prop_name = pure_unicode(prop_name) try: if rev: returner = self.client.propget( prop_name, path, recurse=True, revision=rev ) else: returner = self.client.propget(prop_name, path, recurse=True) except pysvn.ClientError as e: log.exception( "pysvn.ClientError exception in svn.py propget() for %s" % path ) return "" try: returner = returner[path] except KeyError as e: returner = "" return returner def propdel(self, path, prop_name, recurse=True): """ Removes a property from a given path @type path: string @param path: A file or directory path. @type prop_name: string or self.PROPERTIES @param prop_name: An svn property name. @type recurse: boolean @param recurse: If True, the property will be deleted from any subdirectories also having the property set. """ path = self.get_versioned_path(path) returner = False try: self.client.propdel( pure_unicode(prop_name), pure_unicode(path), recurse=recurse ) returner = True except pysvn.ClientError as e: log.exception( "pysvn.ClientError exception in svn.py propdel() for %s" % S(path).display() ) except TypeError as e: log.exception( "TypeError exception in svn.py propdel() %s" % S(path).display() ) return returner def propdetails(self, path): """ Each property on a path may be modified in the WC, deleted or added. This method compares the properties on the local path to the base and identifies which. @param path: the path (file or dir) in the WC to check @type path: a path for something in a WC @return a dict of the form: {prop_name: {"value": value (WC value, unless deleted then base value), "status": status of property} } """ local_props = self.proplist(path) base_props = self.proplist(path, rev=Revision("base").primitive()) prop_details = {} local_propnames = set(local_props.keys()) base_propnames = set(base_props.keys()) for propname in local_propnames | base_propnames: if propname in (local_propnames & base_propnames): # These are the property names that are common to the WC and # base. If their values have changed, list them as changed if local_props[propname] == base_props[propname]: prop_details[propname] = { "status": rabbitvcs.vcs.status.status_normal, "value": local_props[propname], } else: prop_details[propname] = { "status": rabbitvcs.vcs.status.status_modified, "value": local_props[propname], } elif propname in local_propnames: prop_details[propname] = { "status": rabbitvcs.vcs.status.status_added, "value": local_props[propname], } elif propname in base_propnames: prop_details[propname] = { "status": rabbitvcs.vcs.status.status_deleted, "value": base_props[propname], } return prop_details def revpropset(self, prop_name, prop_value, url, rev=None, force=False): """ Adds an svn property to a path. If the item is unversioned, add a recursive property to the parent path @type url: string @param url: A url to attach the prop to @type prop_name: string @param prop_name: An svn property name. @type prop_value: string @param prop_value: An svn property value/pattern. @type rev: pysvn.Revision object @param rev: The revision to attach the prop to @type force: boolean @param force: If True, the property will be forced """ if rev is None: rev = self.revision("head") self.client.revpropset( pure_unicode(prop_name), pure_unicode(prop_value), pure_unicode(url), revision=rev.primitive(), ) def revproplist(self, url, rev=None): """ Retrieves a dictionary of properties for a url. @type url: string @param url: A repository url @type rev: pysvn.Revision object @param rev: The revision to attach the prop to @rtype: tuple(revision object, propsdict) @return: A tuple with revision information and property dictionary """ if rev is None: rev = self.revision("head") return self.client.revproplist(pure_unicode(url), rev.primitive())[1] def revpropget(self, url, prop_name, rev=None): """ Retrieves the revprop value for a specific url/propname/revision @type url: string @param url: A repository url @type prop_name: string or self.PROPERTIES @param prop_name: An svn property name. @type rev: pysvn.Revision object @param rev: The revision to attach the prop to @rtype: tuple(revision object, propsdict) @return: A tuple with revision information and property dictionary """ if rev is None: rev = self.revision("head") return self.client.revpropget( pure_unicode(prop_name), pure_unicode(url), revision=rev.primitive() ) def revpropdel(self, url, prop_name, rev=None, force=False): """ Removes a property from a given path @type url: string @param url: A repository url @type prop_name: string or self.PROPERTIES @param prop_name: An svn property name. @type rev: pysvn.Revision object @param rev: The revision to attach the prop to @type force: boolean @param force: If True, the property deletion will be forced """ if rev is None: rev = self.revision("head") return self.client.revpropdel( pure_unicode(prop_name), pure_unicode(url), revision=rev.primitive(), force=force, ) # # callbacks # def set_callback_cancel(self, func): self.client.callback_cancel = func def callback_cancel(self): if hasattr(self.client, "callback_cancel"): self.client.callback_cancel() def set_callback_notify(self, func): self.client.callback_notify = func def set_callback_get_log_message(self, func): self.client.callback_get_log_message = func def set_callback_get_login(self, func): self.client.callback_get_login = func def set_callback_ssl_server_trust_prompt(self, func): self.client.callback_ssl_server_trust_prompt = func def set_callback_ssl_client_cert_password_prompt(self, func): self.client.callback_ssl_client_cert_password_prompt = func def set_callback_ssl_client_cert_prompt(self, func): self.client.callback_ssl_client_cert_prompt = func # # revision # def revision(self, kind, date=None, number=None): """ Create a revision object usable by pysvn @type kind: string @param kind: An svn.REVISIONS keyword. @type date: integer @param date: Used for kind=date, in the form of UNIX TIMESTAMP (secs). @type number: integer @param number: Used for kind=number, specifies the revision number. @rtype: pysvn.Revision object @return: A pysvn.Revision object. """ # TODO: Don't use kwargs for date/number, just accept a "value" as a # regular arg value = None if date: value = date elif number: value = number return Revision(kind, value) # # actions # def add(self, paths, recurse=True): """ Add files or directories to the repository @type paths: list @param paths: A list of files/directories. @type recurse: boolean @param recurse: Recursively add a directory's children """ return self.client.add(pure_unicode(paths), recurse) def add_backwards(self, path): """ This will add the given path to version control, and any parent directories that themselves require adding. It is essential that "path" contains a WC somewhere in its hierarchy. @param path: the path to add to version control @type path: string """ head, tail = pure_unicode(path), "" tails = list() # We need to add backwards-recursively, since patch could create # files any level deep in the tree while not (self.is_working_copy(head) or self.is_versioned(head)): head, tail = os.path.split(head) tails.insert(0, tail) # If we get all the way to the FS root, something really dumb # has happened. assert head, "No longer in a working copy!" # Walk back up the tree... for tail in tails: head = os.path.join(head, tail) self.client.add(head, depth=pysvn.depth.empty) def copy(self, src, dest, revision=Revision("head")): """ Copy files/directories from src to dest. src or dest may both be either a local path or a repository URL. revision is a pysvn.Revision object. @type src: string @param src: Source URL or path. @type dest: string @param dest: Destination URL or path. @type revision: pysvn.Revision object @param revision: A pysvn.Revision object. """ src = helper.urlize(pure_unicode(src)) dest = helper.urlize(pure_unicode(dest)) return self.client.copy(src, dest, revision.primitive()) def copy_all( self, sources, dest_url_or_path, copy_as_child=False, make_parents=False, ignore_externals=False, ): """ Copy sources to the dest_url_or_path. @type sources: list of tuples @param sources: A list of tuples (url_or_path,revision) @type dest_url_or_path: string @param dest_url_or_path: Destination URL or path. @type copy_as_child: boolean @param copy_as_child: If there are multiple sources, copy as child to dest_url_or_path (assumed to be a folder) @type make_parents: boolean @param make_parents: TBD @type ignore_externals: boolean @param ignore_externals: Omit externals """ return self.client.copy2( pure_unicode(sources), pure_unicode(dest_url_or_path), copy_as_child, make_parents, None, ignore_externals, ) def checkout( self, url, path, recurse=True, revision=Revision("head"), ignore_externals=False ): """ Checkout a working copy from a vcs repository @type url: string @param url: A repository url. @type path: string @param path: A local destination for the working copy. @type recurse: boolean @param recurse: Whether or not to run a recursive checkout. @type revision: pysvn.Revision @param revision: Revision to checkout, defaults to HEAD. @type ignore_externals: boolean @param ignore_externals: Whether or not to ignore externals. """ url = helper.urlize(pure_unicode(url)) return self.client.checkout( url, pure_unicode(path), recurse=recurse, revision=revision.primitive(), ignore_externals=ignore_externals, ) def cleanup(self, path): """ Clean up a working copy. @type path: string @param path: A local working copy path. """ return self.client.cleanup(pure_unicode(path)) def revert(self, paths): """ Revert files or directories so they are unversioned @type paths: list @param paths: A list of files/directories. """ return self.client.revert(pure_unicode(paths)) def commit(self, paths, log_message="", recurse=False, keep_locks=False): """ Commit a list of files to the repository. @type paths: list @param paths: A list of files/directories. @type log_message: string @param log_message: A commit log message. @type recurse: boolean @param recurse: Whether or not to recurse into sub-directories. @type keep_locks: boolean @param keep_locks: Whether or not to keep locks on commit. """ kwargs = {"keep_locks": keep_locks} try: # Simply setting recurse=False will not stop child files from getting # committed. The pysvn.depth kwarg must be set to empty. # Unfortunately, older pysvn/svn installations do not have the depth # enum so for those, recurse must be used. kwargs["depth"] = recurse and pysvn.depth.infinity or pysvn.depth.empty except AttributeError: kwargs["recurse"] = recurse retval = self.client.checkin( pure_unicode(paths), pure_unicode(log_message), **kwargs ) dummy_commit_dict = { "revision": retval, "action": rabbitvcs.vcs.svn.commit_completed, } self.client.callback_notify(dummy_commit_dict) return retval def log( self, url_or_path, revision_start=Revision("head"), revision_end=Revision("number", 0), limit=0, discover_changed_paths=True, strict_node_history=False, ): """ Retrieve log items for a given path in the repository @type url_or_path: string @param url_or_path: Path for which to get log items for @type revision_start: pysvn.Revision @param revision_start: Most recent revision. Defaults to HEAD @type revision_end: pysvn.Revision @param revision_end: Oldest revision. Defaults to rev 0. @type limit: int @param limit: The maximum number of items to return. Defaults to 0. """ log = self.client.log( pure_unicode(url_or_path), revision_start.primitive(), revision_end.primitive(), discover_changed_paths, strict_node_history, limit, ) returner = [] for item in log: revision = Revision(pysvn.opt_revision_kind.number, item.revision.number) date = ( datetime.fromtimestamp(item.date) if hasattr(item, "date") else datetime(1900, 1, 1) ) author = _("(no author)") if hasattr(item, "author"): author = item["author"] message = "" if hasattr(item, "message"): message = item["message"] changed_paths = [] for changed_path in item.changed_paths: copy_from_rev = "" if hasattr(changed_path.copyfrom_revision, "number"): copy_from_rev = self.revision( "number", changed_path.copyfrom_revision.number ) copy_from_path = "" if hasattr(changed_path, "copyfrom_path"): copy_from_path = changed_path.copyfrom_path changed_paths.append( rabbitvcs.vcs.log.LogChangedPath( changed_path.path, changed_path.action, copy_from_path, copy_from_rev, ) ) returner.append( rabbitvcs.vcs.log.Log( date, revision, author, message, changed_paths, None ) ) return returner def export( self, src_url_or_path, dest_path, revision=Revision("head"), recurse=True, ignore_externals=False, force=False, native_eol=None, ): """ Export files from either a working copy or repository into a local path without versioning information. @type src_url_or_path: string @param src_url_or_path: A repository url. @type dest_path: string @param dest_path: A local destination for the working copy. @type revision: pysvn.Revision @param revision: The revision to retrieve from the repository. @type ignore_externals: boolean @param ignore_externals: Whether or not to ignore externals. @type recurse: boolean @param recurse: Whether or not to run a recursive checkout. """ self.client.export( pure_unicode(src_url_or_path), pure_unicode(dest_path), force, revision.primitive(), native_eol, ignore_externals, recurse, ) def import_(self, path, url, log_message, ignore=False): """ Import an unversioned file or directory structure into a repository. @type path: string @param path: An unversioned file or directory structure @type url: string @param url: A repository location to put the imported files @type log_message: string @param log_message: Log message to use for commit @type ignore: boolean @param ignore: Disregard svn:ignore props """ url = helper.urlize(url) return self.client.import_( pure_unicode(path), pure_unicode(url), pure_unicode(log_message), ignore ) def lock(self, url_or_path, lock_comment, force=False): """ Lock a url or path. @type url_or_path: string @param url_or_path: A url or path to lock @type lock_comment: string @param lock_comment: A log message to go along with the lock. @type force: boolean @param force: Steal the locks of others if they exist. """ return self.client.lock( pure_unicode(url_or_path), pure_unicode(lock_comment), force ) def relocate(self, from_url, to_url, path, recurse=True): """ Relocate the working copy from from_url to to_url for path @type from_url: string @param from_url: A url to relocate from @type to_url: string @param to_url: A url to relocate to @type path: string @param path: The path of the local working copy """ from_url = helper.urlize(pure_unicode(from_url)) to_url = helper.urlize(pure_unicode(to_url)) return self.client.relocate(from_url, to_url, path, recurse) def move(self, src_url_or_path, dest_url_or_path): """ Schedule a file to be moved around the repository @type src_url_or_path: string @param src_url_or_path: A url/path to move from @type dest_url_or_path: string @param dest_url_or_path: A url/path to move to """ src_url_or_path = pure_unicode(src_url_or_path) dest_url_or_path = pure_unicode(dest_url_or_path) if hasattr(self.client, "move2"): return self.client.move2([src_url_or_path], dest_url_or_path) else: return self.client.move(src_url_or_path, dest_url_or_path, force=True) def move_all( self, sources, dest_url_or_path, move_as_child=False, make_parents=False ): """ Move sources to the dest_url_or_path. @type sources: list of tuples @param sources: A list of tuples (url_or_path,revision) @type dest_url_or_path: string @param dest_url_or_path: Destination URL or path. @type move_as_child: boolean @param move_as_child: If there are multiple sources, move as child to dest_url_or_path (assumed to be a folder) @type make_parents: boolean @param make_parents: TBD """ return self.client.move2( pure_unicode(sources), pure_unicode(dest_url_or_path), move_as_child=move_as_child, make_parents=make_parents, ) def remove(self, url_or_path, force=False, keep_local=False): """ Schedule a file to be removed from the repository @type url_or_path: string @param url_or_path: A url/path to remove @type force: boolean @param force: Force renaming, despite conflicts. Defaults to false. @type keep_local: boolean @param keep_local: Keep the local copy (don't just delete it) """ return self.client.remove(pure_unicode(url_or_path), force, keep_local) def revert(self, paths, recurse=False): """ Revert files or directories from the repository @type paths: list @param paths: A list of files/directories. @type recurse: boolean @param recurse: Recursively add a directory's children """ return self.client.revert(pure_unicode(paths), recurse) def resolve(self, path, recurse=True): """ Mark conflicted files as resolved @type path: string @param path: A local path to resolve @type recurse: boolean @param recurse: Recursively add a directory's children """ return self.client.resolved(pure_unicode(path), recurse) def switch(self, path, url, revision=Revision("head")): """ Switch the working copy to another repository source. @type path: string @param path: A local path to a working copy @type url: string @param url: The repository location to switch to @type revision: pysvn.Revision @param revision: The revision of the repository to switch to (Def:HEAD) """ url = helper.urlize(pure_unicode(url)) return self.client.switch(pure_unicode(path), url, revision.primitive()) def unlock(self, path, force=False): """ Unlock locked files. @type path: string @param path: A local path to resolve @type force: boolean @param force: If locked by another user, unlock it anyway. """ return self.client.unlock(pure_unicode(path), force) def update( self, path, recurse=True, revision=Revision("head"), ignore_externals=False ): """ Update a working copy. @type path: string @param path: A local path to update @type recurse: boolean @param recurse: Update child folders recursively @type revision: pysvn.Revision @param revision: Revision to update to (Def: HEAD) @type ignore_externals: boolean @param ignore_externals: Ignore external items """ return self.client.update( pure_unicode(path), recurse, revision.primitive(), ignore_externals ) def annotate( self, url_or_path, from_revision=Revision("number", 1), to_revision=Revision("head"), ): """ Get the annotate results for the given file and revision range. @type url_or_path: string @param url_or_path: A url or local path @type from_revision: pysvn.Revision @param from_revision: Revision from (def: 1) @type to_revision: pysvn.Revision @param to_revision: Revision to (def: HEAD) """ return self.client.annotate( pure_unicode(url_or_path), from_revision.primitive(), to_revision.primitive(), ) def merge_ranges( self, source, ranges_to_merge, peg_revision, target_wcpath, notice_ancestry=False, force=False, dry_run=False, record_only=False, ): """ Merge a range of revisions. @type source: string @param source: A repository location @type ranges_to_merge: list of tuples @param ranges_to_merge: A list of revision ranges to merge @type peg_revision: pysvn.Revision @param peg_revision: Indicates which revision in sources is valid. @type target_wcpath: string @param target_wcpath: Target working copy path @type notice_ancestry: boolean @param notice_ancestry: unsure @type force: boolean @param force: unsure @type dry_run: boolean @param dry_run: Do a test/dry run or not @type record_only: boolean @param record_only: unsure TODO: Will firm up the parameter documentation later """ return self.client.merge_peg2( pure_unicode(source), ranges_to_merge, peg_revision.primitive(), pure_unicode(target_wcpath), notice_ancestry=notice_ancestry, force=force, dry_run=dry_run, record_only=record_only, ) def has_merge2(self): """ Tests whether the user has a later version of pysvn/svn installed with more merge features """ return hasattr(self.client, "merge_peg2") def merge_trees( self, url_or_path1, revision1, url_or_path2, revision2, local_path, force=False, recurse=True, dry_run=False, record_only=False, ): """ Merge two trees into one. @type url_or_path1: string @param url_or_path1: From WC/URL location @type revision1: pysvn.Revision @param revision1: Indicates the revision of the URL/Path @type url_or_path2: string @param url_or_path2: To WC/URL location @type revision2: pysvn.Revision @param revision2: Indicates the revision of the URL/Path @type local_path: string @param local_path: Target working copy path @type force: boolean @param force: unsure @type recurse: boolean @param recurse: Merge children recursively @type dry_run: boolean @param dry_run: Do a test/dry run or not @type record_only: boolean @param record_only: unsure TODO: Will firm up the parameter documentation later """ url_or_path1 = helper.urlize(pure_unicode(url_or_path1)) url_or_path2 = helper.urlize(pure_unicode(url_or_path2)) return self.client.merge( url_or_path1, revision1.primitive(), url_or_path2, revision2.primitive(), pure_unicode(local_path), force=force, recurse=recurse, dry_run=dry_run, record_only=record_only, ) def has_merge_reintegrate(self): """ Tests whether the user has a later version of pysvn/svn installed with more merge features """ return hasattr(self.client, "merge_reintegrate") def merge_reintegrate(self, url_or_path, revision, local_path, dry_run=False): """ Merge a branch into trunk @type url_or_path: string @param url_or_path: From WC/URL location @type revision: Revision() @param revision: Indicates the revision of the URL/Path @type local_path: string @param local_path: Target working copy path @type dry_run: boolean @param dry_run: Do a test/dry run or not """ return self.client.merge_reintegrate( pure_unicode(url_or_path), revision.primitive(), pure_unicode(local_path), dry_run=dry_run, ) def diff( self, tmp_path, url_or_path, revision1, url_or_path2, revision2, recurse=True, ignore_ancestry=False, diff_deleted=True, ignore_content_type=False, ): """ Returns the diff text between the base code and the working copy. @type tmp_path: string @param tmp_path: Temporal path to store the diff @type url_or_path: string @param url_or_path: From WC/URL location @type revision1: pysvn.Revision @param revision1: Indicates the revision of the URL/Path (def: pysvn.Revision( opt_revision_kind.base )) @type url_or_path2: string @param url_or_path2: From WC/URL location @type revision2: pysvn.Revision @param revision2: Indicates the revision of the URL/Path (def: pysvn.Revision( opt_revision_kind.working )) @type recurse: boolean @param recurse: Whether or not to recurse into sub-directories. (def: True) @type ignore_ancestry: boolean @param ignore_ancestry: Whether or not to recurse into sub-directories. (def: False) @type diff_deleted: boolean @param diff_deleted: Whether or not to recurse into sub-directories. (def: True) @type ignore_content_type: boolean @param ignore_content_type: Whether or not to recurse into sub-directories. (def: False) """ return self.client.diff( pure_unicode(tmp_path), pure_unicode(url_or_path), revision1.primitive(), pure_unicode(url_or_path2), revision2.primitive(), recurse, ignore_ancestry, diff_deleted, ignore_content_type, ) def diff_summarize( self, url_or_path1, revision1, url_or_path2, revision2, recurse=True, ignore_ancestry=False, ): """ Returns a summary of changed items between two paths/revisions @type url_or_path1: string @param url_or_path1: First WC/URL location @type revision1: pysvn.Revision @param revision1: Indicates the revision of the URL/Path (def: pysvn.Revision( opt_revision_kind.base )) @type url_or_path2: string @param url_or_path2: Second WC/URL location @type revision2: pysvn.Revision @param revision2: Indicates the revision of the URL/Path (def: pysvn.Revision( opt_revision_kind.working )) @type recurse: boolean @param recurse: Whether or not to recurse into sub-directories. (def: True) @type ignore_ancestry: boolean @param ignore_ancestry: Whether or not to recurse into sub-directories. (def: False) @type depth: pysvn.depth enum @param depth: a replacement for recurse """ return self.client.diff_summarize( pure_unicode(url_or_path1), revision1.primitive(), pure_unicode(url_or_path2), revision2.primitive(), recurse, ignore_ancestry, ) def list(self, url_or_path, revision=Revision("HEAD"), recurse=True): url_or_path = helper.urlize(url_or_path) return self.client.list( pure_unicode(url_or_path), revision=revision.primitive(), recurse=recurse ) def mkdir(self, url_or_path, log_message): """ Make a new directory in the repository or working copy @type url_or_path: string @param url_or_path: Url in the repository or path in working copy @type log_message: string @param log_message: A log message to use in your commit """ return self.client.mkdir(pure_unicode(url_or_path), pure_unicode(log_message)) def apply_patch(self, patch_file, base_dir): """ Applies a patch created for this WC. @type patch_file: string @param patch_file: the path to the patch file @type base_dir: string @param base_dir: the base directory from which to interpret the paths in the patch file """ any_failures = False for file, success, rej_file in helper.parse_patch_output(patch_file, base_dir): fullpath = os.path.join(base_dir, file) event_dict = dict() event_dict["path"] = file event_dict["mime_type"] = "" # meh if success: event_dict["action"] = _("Patched") # not in pysvn, but # we have a fallback else: any_failures = True event_dict["action"] = _("Patch Failed") # better wording needed? # Creates its own notifications. self.add_backwards(fullpath) if rej_file: rej_info = { "path": rej_file, "action": _("Rejected Patch"), "mime_type": None, } if self.client.callback_notify: self.client.callback_notify(event_dict) if rej_file: self.client.callback_notify(rej_info) def is_version_less_than(self, version): """ @type version: tuple @param version: A version tuple to compare pysvn's version to """ if version[0] > pysvn.version[0]: return True if (version[0] == pysvn.version[0]) and (version[1] > pysvn.version[1]): return True if ( (version[0] == pysvn.version[0]) and (version[1] == pysvn.version[1]) and (version[2] > pysvn.version[2]) ): return True if ( (version[0] == pysvn.version[0]) and (version[1] == pysvn.version[1]) and (version[2] == pysvn.version[2]) and (version[3] > pysvn.version[3]) ): return True return False rabbitvcs-0.19/scripts/000077500000000000000000000000001445560650400151225ustar00rootroot00000000000000rabbitvcs-0.19/scripts/README000066400000000000000000000013201445560650400157760ustar00rootroot00000000000000Scripts README ---------------- To start a new translation: $ sh initialize_new_translation.sh This will create a .po file in the /trunk/rabbitvcs/po directory with the name .po. Translate the strings in the .po file any way you want. To install a translation: $ sh install_translation.sh This will take your .po file and install it in the /trunk/rabbitvcs/locale//LC_MESSAGES folder. To test a translation: $ LANGUAGE= /path/to/trunk/clients/cli/rabbitvcs commit For more on translating, see our wiki page at: http://wiki.rabbitvcs.org/wiki/contribute/translate rabbitvcs-0.19/scripts/import_launchpad_translations.sh000077500000000000000000000011511445560650400236110ustar00rootroot00000000000000#!/bin/sh # This script should be run from the scripts directory LOCALE_TGZ=$1 if [ -z "$LOCALE_TGZ" ]; then echo "usage: ./import_launchpad_translations.sh LOCALE_TGZ" exit 1 fi rm -rf translations mkdir translations cd translations tar xzf $LOCALE_TGZ rm -rf templates for mo in `ls`; do if [ -f ../../locale/$mo/LC_MESSAGES/RabbitVCS.mo ]; then mv $mo/LC_MESSAGES/* ../../locale/$mo/LC_MESSAGES/RabbitVCS.mo else mkdir -p ../../locale/$mo/LC_MESSAGES mv $mo/LC_MESSAGES/rabbit-vcs.mo ../../locale/$mo/LC_MESSAGES/RabbitVCS.mo fi done cd .. rm -rf translations rabbitvcs-0.19/scripts/initialize_new_translation.sh000077500000000000000000000005311445560650400231100ustar00rootroot00000000000000#!/bin/sh LOCALE=$1 if [ -z "$LOCALE" ] then echo "usage: ./initialize_new_translation.sh LOCALE" exit 1 fi msginit --input=../rabbitvcs/po/RabbitVCS.pot --locale=$LOCALE \ --output-file=../rabbitvcs/po/$LOCALE.po echo "" echo "Once you have translated the strings, install the strings with \ the install_translations.sh script" rabbitvcs-0.19/scripts/install_po_files.sh000077500000000000000000000003671445560650400210150ustar00rootroot00000000000000#!/bin/sh # Converts all the po source files into mo binary files and installs them in # the correct location for i in `ls ../po/*.po`; do filename=`basename $i` locale=`echo ${filename%.*}` ./install_translation.sh $locale $i done rabbitvcs-0.19/scripts/install_translation.sh000077500000000000000000000005151445560650400215460ustar00rootroot00000000000000#!/bin/sh LOCALE=$1 POFILE=$2 if [ -z "$POFILE" -o -z "$LOCALE" ] then echo "usage: ./install_translation.sh LOCALE POFILE" exit 1 fi mkdir -p ../locale/$LOCALE/LC_MESSAGES msgfmt --output-file=../locale/$LOCALE/LC_MESSAGES/RabbitVCS.mo $POFILE echo "Translations installed to ../locale/$LOCALE/LC_MESSAGES/RabbitVCS.mo" rabbitvcs-0.19/scripts/sync_strings.sh000077500000000000000000000013631445560650400202110ustar00rootroot00000000000000#!/bin/sh # Sync our translation template file with the actual strings # 1. Extracts strings from gtkbuilder xml files into .h files # 2. Extracts gettext strings from py files # 3. Deletes the glade .h files cd .. for i in `find . | grep '\.xml' | grep -v '\.svn' | grep -v '\.xml\.h'`; do intltool-extract --type=gettext/glade $i done cd rabbitvcs echo "util/helper.py" > POTFILES.in find . -type f | egrep '(ui|.xml)' | grep -v \.svn | grep -v \.h | grep -v \.pyc >> POTFILES.in sed -i 's|\.xml|.xml.h|g' POTFILES.in sed -i 's|\.\/||g' POTFILES.in mv POTFILES.in ../po/POTFILES.in xgettext -L Python --keyword=_ --keyword=N_ -o ../po/RabbitVCS.pot -f ../po/POTFILES.in for i in `find . | grep '\.xml\.h' | grep -v '\.svn'`; do rm -f $i done rabbitvcs-0.19/setup.cfg000066400000000000000000000000461445560650400152540ustar00rootroot00000000000000[bdist_rpm] group = Development/Tools rabbitvcs-0.19/setup.py000066400000000000000000000135021445560650400151460ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import absolute_import from __future__ import print_function # If you didn't know already, this is a Python setuptools script. It borrows # heavily from Phatch's (see: http://photobatch.stani.be/). # # There's a lot of comments here (on purpose) so people can actually learn from # this and don't have to figure out everything on their own. # # This setup script is used to build distribution specific packages. # # For more information see: http://docs.python.org/dist/dist.html # # TODO: this all feels just a little too shell scripty, refactoring it later # might be a good idea. # NOTES: # System-wide directories: # Scalable emblems go in: /usr/share/icons/hicolor/scalable/emblems # # User-specific directories: # Scalable emblems go in: ~/.icons/hicolor/scalable # # Common directories # See: http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html # Configuration information goes in: ~/.config/rabbitvcs/ # Data goes in: ~/.local/share/rabbitvcs import sys import os import os.path import subprocess from setuptools import setup PREFIX = sys.prefix # If the user passed --prefix=... then use the new prefix newargs = [] installing = False for c in sys.argv: installing |= c == "install" if c.startswith("--prefix="): PREFIX = c.split("=", 1)[1].strip() elif c == "--user": PREFIX = os.path.expanduser("~/.local") else: newargs.append(c) if not installing: sys.argv = newargs # ============================================================================== # Variables # ============================================================================== # Some descriptive variables # This will eventually be passed to the setup function, but we already need them # for doing some other stuff so we have to declare them here. name = "rabbitvcs" version = "0.19" description = "Easy version control" long_description = """RabbitVCS is a set of graphical tools written to provide simple and straightforward access to the version control systems you use.""" author = "Adam Plumb" author_email = "adamplumb@gmail.com" url = "http://www.rabbitvcs.org" license = "GNU General Public License version 2 or later" # ============================================================================== # Paths # ============================================================================== icon_theme_directory = "share/icons/hicolor" locale_directory = "share/locale" # ============================================================================== # Helper functions # ============================================================================== def include_by_pattern(directory, directory_to_install, pattern): files_to_include = [] for root, dirs, files in os.walk(directory): for file in files: if file.endswith(pattern): files_to_include.append( ( root.replace(directory, directory_to_install), [os.path.join(root, file)], ) ) return files_to_include # ============================================================================== # Gather all the files that need to be included # ============================================================================== # Packages packages = [] for root, dirs, files in os.walk("rabbitvcs"): if "__init__.py" in files: packages.append(root.replace(os.path.sep, ".")) # Translation translations = include_by_pattern("locale", locale_directory, ".mo") # Icons icons = include_by_pattern("data/icons/hicolor", icon_theme_directory, ".svg") icons += include_by_pattern("data/icons/hicolor", icon_theme_directory, ".png") # Config parsing specification config_spec = [("share/rabbitvcs", ["rabbitvcs/util/configspec/configspec.ini"])] # Documentation documentation = [("share/doc/rabbitvcs", ["AUTHORS", "MAINTAINERS"])] # Save build information so we can access the prefix later path = "rabbitvcs/buildinfo.py" buildinfo = """rabbitvcs_prefix = "%s" icon_path = "%s/%s" """ % ( PREFIX, PREFIX, icon_theme_directory, ) fh = open(path, "w") fh.write(buildinfo) fh.close() # ============================================================================== # Ready to install # ============================================================================== # Calling the setup function will actually install RabbitVCS and also creates # an .egg-info file in /usr/lib/python/site-packages/ or # /usr/share/python-support/rabbitvcs when generating a Debian package. dist = setup( # The following arguments will be included in the .egg.info file, # for a list of available arguments and their descriptions see: # - https://docs.python.org/3/distutils/apiref.html#module-distutils.core name=name, version=version, description=description, long_description=long_description, author=author, author_email=author_email, url=url, license=license, # There are actually several arguments that are used to install files: # - py_modules: installs specific modules to site-packages # - packages: install complete packages (directories with an __init__.py # file) into site-packages # - data_files: any file you want, anywhere you want it packages=packages, package_data={ "rabbitvcs": [ # Include our GtkBuilder UI files right into the package "ui/xml/*.xml", "ui/xml/dialogs/*.xml", ] }, data_files=translations + icons + documentation + config_spec, ) # # Post installation # # Make sure the icon cache is deleted and recreated if installing: if os.uname()[0] != "Darwin": print("Running gtk-update-icon-cache") subprocess.Popen( ["gtk-update-icon-cache", os.path.join(PREFIX, icon_theme_directory)], stdout=subprocess.PIPE, ).communicate()[0]